Headline
CVE-2022-36041: Heap out-of-bounds write in mach0.c · Issue #2956 · rizinorg/rizin
Rizin is a UNIX-like reverse engineering framework and command-line toolset. Versions 0.4.0 and prior are vulnerable to an out-of-bounds write when parsing Mach-O files. A user opening a malicious Mach-O file could be affected by this vulnerability, allowing an attacker to execute code on the user’s machine. Commit number 7323e64d68ecccfb0ed3ee480f704384c38676b2 contains a patch.
Hi! We’ve been fuzzing your project and found the following error in librz/bin/format/mach0/mach0.c
=================================================================
==2478981==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020001af852 at pc 0x000000c5c71d bp 0x7ffdd3ff06f0 sp 0x7ffdd3ff06e8
WRITE of size 2 at 0x6020001af852 thread T0
#0 0xc5c71c in reconstruct_chained_fixup /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:1612:39
#1 0xc5c71c in init_items /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:2041:3
#2 0xc32de1 in init /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:2050:7
#3 0xc32de1 in new_buf_64 /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:2123:8
#4 0xb3548a in load_buffer /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/p/bin_mach0.c:47:30
#5 0xae7004 in rz_bin_object_new /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/bobj.c:300:8
#6 0xad7d31 in rz_bin_file_new_from_buffer /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/bfile.c:150:19
#7 0xadf3c7 in rz_bin_open_buf /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/bin.c:272:8
#8 0xadec27 in rz_bin_open_io /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/bin.c:330:18
#9 0x1003353 in core_file_do_load_for_io_plugin /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/core/cfile.c:727:23
#10 0x1003353 in rz_core_bin_load /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/core/cfile.c:974:4
#11 0x5b9af8 in rz_main_rizin /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/main/rizin.c:1119:14
#12 0x7f601eb77082 in __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:308:16
#13 0x41da3d in _start (/home/madrat/Desktop/rizin-report/rz-installation-asan/bin/rizin+0x41da3d)
0x6020001af852 is located 0 bytes to the right of 2-byte region [0x6020001af850,0x6020001af852)
allocated by thread T0 here:
#0 0x498c9d in malloc (/home/madrat/Desktop/rizin-report/rz-installation-asan/bin/rizin+0x498c9d)
#1 0xc57e72 in reconstruct_chained_fixup /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:1600:30
#2 0xc57e72 in init_items /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:2041:3
#3 0xc32de1 in init /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:2050:7
#4 0xc32de1 in new_buf_64 /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:2123:8
#5 0xb3548a in load_buffer /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/p/bin_mach0.c:47:30
#6 0xae7004 in rz_bin_object_new /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/bobj.c:300:8
SUMMARY: AddressSanitizer: heap-buffer-overflow /home/madrat/Desktop/rizin-report/rizin/build-asan/../librz/bin/format/mach0/mach0.c:1612:39 in reconstruct_chained_fixup
Shadow bytes around the buggy address:
0x0c048002deb0: fa fa 06 fa fa fa 00 03 fa fa 06 fa fa fa 00 03
0x0c048002dec0: fa fa 06 fa fa fa 00 03 fa fa 06 fa fa fa 00 03
0x0c048002ded0: fa fa 06 fa fa fa 00 03 fa fa 06 fa fa fa 00 03
0x0c048002dee0: fa fa 06 fa fa fa 06 fa fa fa 06 fa fa fa 00 00
0x0c048002def0: fa fa 06 fa fa fa 00 05 fa fa 06 fa fa fa fd fa
=>0x0c048002df00: fa fa 00 04 fa fa 00 02 fa fa[02]fa fa fa fa fa
0x0c048002df10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c048002df20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c048002df30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c048002df40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c048002df50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==2478981==ABORTING