This script will cause a use after free error:
https://crashes.fuzzing-project.org/radare2-script-uaf-heap-r_core_magic_at
It contains the command "pm0" twice. Found with american fuzzy lop.
Test: radare2 -q -i [script] /dev/null
==4421==ERROR: AddressSanitizer: heap-use-after-free on address 0x6020000168b2 at pc 0x7fbc9a9c25b5 bp 0x7ffff981f960 sp 0x7ffff981f920
READ of size 1 at 0x6020000168b2 thread T0
#0 0x7fbc9a9c25b4 in strcmp (/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/libasan.so.1+0x385b4)
#1 0x7fbc9a2d5ec5 in r_core_magic_at /f/radare2/radare2/libr/core/cmd_magic.c:41
#2 0x7fbc9a2e9740 in r_core_magic /f/radare2/radare2/libr/core/cmd_magic.c:155
#3 0x7fbc9a2e9740 in cmd_print /f/radare2/radare2/libr/core/cmd_print.c:2338
#4 0x7fbc9a35323d in r_core_cmd_subst_i /f/radare2/radare2/libr/core/cmd.c:1590
#5 0x7fbc9a2b702c in r_core_cmd_subst /f/radare2/radare2/libr/core/cmd.c:1081
#6 0x7fbc9a2b82ee in r_core_cmd /f/radare2/radare2/libr/core/cmd.c:1938
#7 0x7fbc9a2bb11c in r_core_cmd_lines /f/radare2/radare2/libr/core/cmd.c:1989
#8 0x7fbc9a2bb38e in r_core_cmd_file /f/radare2/radare2/libr/core/cmd.c:2001
#9 0x7fbc9a2be363 in r_core_run_script /f/radare2/radare2/libr/core/cmd.c:373
#10 0x405572 in main /f/radare2/radare2/binr/radare2/radare2.c:729
#11 0x7fbc9481bf9f in __libc_start_main (/lib64/libc.so.6+0x1ff9f)
#12 0x40a333 (/mnt/ram/radare2/radare2+0x40a333)
0x6020000168b2 is located 2 bytes inside of 4-byte region [0x6020000168b0,0x6020000168b4)
freed by thread T0 here:
#0 0x7fbc9a9e147f in __interceptor_free (/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/libasan.so.1+0x5747f)
#1 0x7fbc9a2b6dad in r_core_cmd_subst /f/radare2/radare2/libr/core/cmd.c:1105
previously allocated by thread T0 here:
#0 0x7fbc9a9e16f7 in malloc (/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/libasan.so.1+0x576f7)
#1 0x7fbc9487d789 in strdup (/lib64/libc.so.6+0x81789)
SUMMARY: AddressSanitizer: heap-use-after-free ??:0 strcmp
Shadow bytes around the buggy address:
0x0c047fffacc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fffacd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047ffface0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fffacf0: fa fa fa fa fa fa fa fa fa fa 01 fa fa fa 04 fa
0x0c047fffad00: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
=>0x0c047fffad10: fa fa fd fa fa fa[fd]fa fa fa 00 fa fa fa 00 fa
0x0c047fffad20: fa fa fd fa fa fa fd fd fa fa 06 fa fa fa fd fa
0x0c047fffad30: fa fa 05 fa fa fa fd fa fa fa 06 fa fa fa fd fa
0x0c047fffad40: fa fa 03 fa fa fa fd fa fa fa 04 fa fa fa fd fa
0x0c047fffad50: fa fa fd fa fa fa 04 fa fa fa fd fa fa fa fd fa
0x0c047fffad60: fa fa fd fa fa fa fd fa fa fa 01 fa fa fa fd 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
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Contiguous container OOB:fc
ASan internal: fe
==4421==ABORTING
This script will cause a use after free error:
https://crashes.fuzzing-project.org/radare2-script-uaf-heap-r_core_magic_at
It contains the command "pm0" twice. Found with american fuzzy lop.
Test: radare2 -q -i [script] /dev/null