Project

General

Profile

Actions

Bug #22318

closed

heap uaf triggered in array.flatten

Bug #22318: heap uaf triggered in array.flatten

Added by danielchong (Daniel Chong) 5 days ago. Updated about 11 hours ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:126730]

Description

Hello, there seems to be a bug in Array's flatten function.

PoC:

a = (1..2000).to_a
bad = Object.new
$a = a
def bad.to_ary; $a.clear; [1,2,3]; end
a << bad       
a.flatten

ASAN output (truncated):

7==ERROR: AddressSanitizer: heap-buffer-overflow ...
READ of size 16000 ... thread T0
    #3 ary_memcpy0  array.c:354
    #4 ary_memcpy   array.c:371
    #5 flatten       array.c:6715            <-- USE (stale count i)
    #6 rb_ary_flatten array.c:6924
0x... is located 0 bytes after 256-byte region [...]
allocated by thread T0 here:
    #4 ary_heap_realloc  array.c:396
    #5 ary_resize_capa   array.c:439
    #6 rb_ary_clear      array.c:4988         <-- SHRINK (via to_ary)
    ...
    #18 convert_type_with_id       object.c:3303
    #21 rb_check_array_type        array.c:1032
    #22 flatten                    array.c:6705  <-- reentrant conversion
Actions

Also available in: PDF Atom