Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-46246: Integer Overflow in :history command

Vim is an improved version of the good old UNIX editor Vi. Heap-use-after-free in memory allocated in the function ga_grow_inner in in the file src/alloc.c at line 748, which is freed in the file src/ex_docmd.c in the function do_cmdline at line 1010 and then used again in src/cmdhist.c at line 759. When using the :history command, it’s possible that the provided argument overflows the accepted value. Causing an Integer Overflow and potentially later an use-after-free. This vulnerability has been patched in version 9.0.2068.

CVE
#vulnerability#linux#debian

Environment

Distributor ID: Debian Description: Debian GNU/Linux bookworm/sid

Version

I checked against the master branch at commit 5f5131d .

Description

Heap-use-after-free in memory allocated in the function ga_grow_inner in in the file src/alloc.c at line 748, which is freed in the file src/ex_docmd.c in the function do_cmdline at line 1010 and then used again in src/cmdhist.c at line 759

POC

./bins/vim -u NONE -i NONE -n -e -s -S ./crashmin/gchar_cursor -c :qa!

ASAN

================================================================= ==27059==ERROR: AddressSanitizer: heap-use-after-free on address 0x611000000700 at pc 0x5561472e4d7e bp 0x7ffc40ff1ad0 sp 0x7ffc40ff1ac8 READ of size 4 at 0x611000000700 thread T0 #0 0x5561472e4d7d in ex_history /path/vim/src/cmdhist.c:759:62 #1 0x55614743ea18 in do_one_cmd /path/vim/src/ex_docmd.c:2582:2 #2 0x55614743ea18 in do_cmdline /path/vim/src/ex_docmd.c:994:17 #3 0x55614788323a in do_source_ext /path/vim/src/scriptfile.c:1762:5 #4 0x556147880fab in do_source /path/vim/src/scriptfile.c:1908:12 #5 0x556147880fab in cmd_source /path/vim/src/scriptfile.c:1253:14 #6 0x55614743ea18 in do_one_cmd /path/vim/src/ex_docmd.c:2582:2 #7 0x55614743ea18 in do_cmdline /path/vim/src/ex_docmd.c:994:17 #8 0x556147c96613 in exe_commands /path/vim/src/main.c:3173:2 #9 0x556147c96613 in vim_main2 /path/vim/src/main.c:790:2 #10 0x556147c933ae in main /path/vim/src/main.c:441:12 #11 0x7f2312dde1c9 in __libc_start_call_main csu/…/sysdeps/nptl/libc_start_call_main.h:58:16 #12 0x7f2312dde284 in __libc_start_main csu/…/csu/libc-start.c:360:3 #13 0x556147170760 in _start (/path/vim/fuzzfuzzfuzz/bins/vim+0x208760) (BuildId: 0021b8b45c0d1823917b83c6743ec61faf0b7ab3)

0x611000000700 is located 128 bytes inside of 250-byte region [0x611000000680,0x61100000077a) freed by thread T0 here: #0 0x5561471f3302 in __interceptor_free (/path/vim/fuzzfuzzfuzz/bins/vim+0x28b302) (BuildId: 0021b8b45c0d1823917b83c6743ec61faf0b7ab3) #1 0x556147439233 in do_cmdline /path/vim/src/ex_docmd.c:1010:6 #2 0x55614788323a in do_source_ext /path/vim/src/scriptfile.c:1762:5 #3 0x556147880fab in do_source /path/vim/src/scriptfile.c:1908:12 #4 0x556147880fab in cmd_source /path/vim/src/scriptfile.c:1253:14 #5 0x556147c96613 in exe_commands /path/vim/src/main.c:3173:2 #6 0x556147c96613 in vim_main2 /path/vim/src/main.c:790:2 #7 0x556147c933ae in main /path/vim/src/main.c:441:12 #8 0x7f2312dde1c9 in __libc_start_call_main csu/…/sysdeps/nptl/libc_start_call_main.h:58:16

previously allocated by thread T0 here: #0 0x5561471f39d6 in __interceptor_realloc (/path/vim/fuzzfuzzfuzz/bins/vim+0x28b9d6) (BuildId: 0021b8b45c0d1823917b83c6743ec61faf0b7ab3) #1 0x55614723054b in ga_grow_inner /path/vim/src/alloc.c:748:10 #2 0x55614723054b in ga_grow /path/vim/src/alloc.c:713:9

SUMMARY: AddressSanitizer: heap-use-after-free /path/vim/src/cmdhist.c:759:62 in ex_history Shadow bytes around the buggy address: 0x0c227fff8090: 00 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa 0x0c227fff80a0: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 0x0c227fff80b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c227fff80c0: 00 00 00 00 00 00 00 02 fa fa fa fa fa fa fa fa 0x0c227fff80d0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd =>0x0c227fff80e0:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x0c227fff80f0: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 0x0c227fff8100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c227fff8110: 00 00 00 00 00 00 fa fa fa fa fa fa fa fa fa fa 0x0c227fff8120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c227fff8130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 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 ==27059==ABORTING

Impact

When using the :history command, it’s possible that the provided argument overflows the accepted value. Causing an Integer Overflow and potentially later an use-after-free. This is not a major issue as most users probably won’t use intentionally large values for the :history command

Patches

Problem is patched in version: 9.0.2068

Credits

Thanks to Cole Dilorenzo for notifying the vim-security mailinglist

Related news

Ubuntu Security Notice USN-6557-1

Ubuntu Security Notice 6557-1 - It was discovered that Vim could be made to dereference invalid memory. An attacker could possibly use this issue to cause a denial of service. This issue only affected Ubuntu 18.04 LTS, Ubuntu 20.04 LTS, and Ubuntu 22.04 LTS. It was discovered that Vim could be made to recurse infinitely. An attacker could possibly use this issue to cause a denial of service. This issue only affected Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Ubuntu 18.04 LTS, Ubuntu 20.04 LTS, and Ubuntu 22.04 LTS.

CVE: Latest News

CVE-2023-50976: Transactions API Authorization by oleiman · Pull Request #14969 · redpanda-data/redpanda
CVE-2023-6905
CVE-2023-6903
CVE-2023-6904
CVE-2023-3907