[2019-09-13] - Found with Honggfuzz - CVE-2019-16277 Heap-based buffer overflow in the StringStrcpy() function, in cstdlib/string.c. Issue can be reproduced by running: ``` picoc test01.c ``` ``` ================================================================= ==14146==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x606000000532 at pc 0x0000004ad02c bp 0x7ffecf27b630 sp 0x7ffecf27ade0 WRITE of size 615 at 0x606000000532 thread T0 #0 0x4ad02b in __interceptor_strcpy.part.245 (/home/fcambus/picoc/picoc+0x4ad02b) #1 0x55e547 in StringStrcpy /home/fcambus/picoc/cstdlib/string.c:10:33 #2 0x53eb47 in ExpressionParseFunctionCall /home/fcambus/picoc/expression.c:1560:13 #3 0x53bf47 in ExpressionParse /home/fcambus/picoc/expression.c:1251:17 #4 0x5269ad in ParseStatement /home/fcambus/picoc/parse.c:653:13 #5 0x52e5e4 in PicocParse /home/fcambus/picoc/parse.c:966:14 #6 0x551d86 in PicocPlatformScanFile /home/fcambus/picoc/platform/platform_unix.c:131:5 #7 0x514831 in main /home/fcambus/picoc/picoc.c:54:13 #8 0x7fe7a057db96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 #9 0x41bff9 in _start (/home/fcambus/picoc/picoc+0x41bff9) 0x606000000532 is located 0 bytes to the right of 50-byte region [0x606000000500,0x606000000532) allocated by thread T0 here: #0 0x4dc0d8 in calloc (/home/fcambus/picoc/picoc+0x4dc0d8) #1 0x540af1 in HeapAllocMem /home/fcambus/picoc/heap.c:138:12 #2 0x5471bb in VariableAlloc /home/fcambus/picoc/variable.c:73:20 #3 0x547243 in VariableAllocValueAndData /home/fcambus/picoc/variable.c:91:30 #4 0x54762b in VariableAllocValueFromType /home/fcambus/picoc/variable.c:110:30 #5 0x5492ac in VariableDefine /home/fcambus/picoc/variable.c:272:23 #6 0x54a403 in VariableDefineButIgnoreIdentical /home/fcambus/picoc/variable.c:341:20 #7 0x52bf0f in ParseDeclaration /home/fcambus/picoc/parse.c:345:35 #8 0x527415 in ParseStatement /home/fcambus/picoc/parse.c:772:38 #9 0x52e5e4 in PicocParse /home/fcambus/picoc/parse.c:966:14 #10 0x551d86 in PicocPlatformScanFile /home/fcambus/picoc/platform/platform_unix.c:131:5 #11 0x514831 in main /home/fcambus/picoc/picoc.c:54:13 #12 0x7fe7a057db96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 SUMMARY: AddressSanitizer: heap-buffer-overflow (/home/fcambus/picoc/picoc+0x4ad02b) in __interceptor_strcpy.part.245 Shadow bytes around the buggy address: 0x0c0c7fff8050: 00 00 00 00 fa fa fa fa fd fd fd fd fd fd fd fa 0x0c0c7fff8060: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa 0x0c0c7fff8070: 00 00 00 00 00 00 00 00 fa fa fa fa fd fd fd fd 0x0c0c7fff8080: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa 0x0c0c7fff8090: fa fa fa fa 00 00 00 00 00 00 00 00 fa fa fa fa =>0x0c0c7fff80a0: 00 00 00 00 00 00[02]fa fa fa fa fa fa fa fa fa 0x0c0c7fff80b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c0c7fff80c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c0c7fff80d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c0c7fff80e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c0c7fff80f0: 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 ==14146==ABORTING ```