[php-src] Issue #24159: sqlite3 UAF

From: Date: Tue, 06 Oct 2026 08:54:12 +0000
Subject: [php-src] Issue #24159: sqlite3 UAF
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-252912@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/24159 Author: YuanchengJiang ### Description The following code: ```php <?php try { $db = new SQLite3(':memory:'); $db->exec('CREATE TABLE t (a INTEGER)'); $db->exec('INSERT INTO t VALUES (1)'); $db->createAggregate('agg', function ($context, $rows, $a) use (&$db, &$reported) { if (!$reported) { try { var_dump($db->close()); } catch (Throwable $e) { } } }, function ($context, $rows) { }, 1); $db = $db->prepare('SELECT agg(a) FROM t'); $res = $db->execute(); } catch (\Throwable $_ffl_e) {} ``` Resulted in this output: ``` ================================================================= ==3179922==ERROR: AddressSanitizer: heap-use-after-free on address 0x603000040400 at pc 0x000000dddd1d bp 0x7ffdac372270 sp 0x7ffdac372268 READ of size 1 at 0x603000040400 thread T0 #0 0xdddd1c in zval_get_type /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/Zend/zend_types.h:685:18 #1 0xddd556 in sqlite3_do_callback /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/sqlite3/sqlite3.c:880:23 #2 0xda8f43 in php_sqlite3_callback_step /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/sqlite3/sqlite3.c:912:2 #3 0x7f6b030a8259 in sqlite3VdbeExec (/lib/x86_64-linux-gnu/libsqlite3.so.0+0xde259) #4 0x7f6b030b2a2e in sqlite3_step (/lib/x86_64-linux-gnu/libsqlite3.so.0+0xe8a2e) #5 0xdbd018 in zim_SQLite3Stmt_execute /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/sqlite3/sqlite3.c:1901:16 #6 0x60dd22e in ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/Zend/zend_vm_execute.h:2284:4 #7 0x2fd5067 in zend_jit_trace_execute /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/opcache/jit/zend_jit_vm_helpers.c:1082:12 #8 0x2ffc9e5 in zend_jit_trace_hot_root /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/opcache/jit/zend_jit_trace.c:8204:9 #9 0x2fc3903 in zend_jit_trace_counter_helper /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/opcache/jit/zend_jit_vm_helpers.c:470:7 #10 0x2fc319a in zend_jit_func_trace_helper /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/ext/opcache/jit/zend_jit_vm_helpers.c:506:2 #11 0x5e8e9b7 in execute_ex /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/Zend/zend_vm_execute.h:110583:12 #12 0x5e90bf8 in zend_execute /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/Zend/zend_vm_execute.h:116021:2 #13 0x6ad321c in zend_execute_script /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/Zend/zend.c:1980:3 #14 0x53dd1fd in php_execute_script_ex /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/main/main.c:2590:13 #15 0x53de308 in php_execute_script /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/main/main.c:2630:9 #16 0x6ae5dd2 in do_cli /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php_cli.c:941:5 #17 0x6ae058a in do_php_cli /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php_cli.c:1354:18 #18 0x6ade991 in main /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php_cli_main.c:18:9 #19 0x7f6b0284ad8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16 #20 0x7f6b0284ae3f in __libc_start_main csu/../csu/libc-start.c:392:3 #21 0x605b34 in _start (/home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php+0x605b34) 0x603000040400 is located 16 bytes inside of 32-byte region [0x6030000403f0,0x603000040410) freed by thread T0 here: #0 0x680792 in free (/home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php+0x680792) #1 0x7f6b03060e91 in sqlite3_free (/lib/x86_64-linux-gnu/libsqlite3.so.0+0x96e91) previously allocated by thread T0 here: #0 0x6809fd in malloc (/home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php+0x6809fd) #1 0x7f6b0305c7ea (/lib/x86_64-linux-gnu/libsqlite3.so.0+0x927ea) SUMMARY: AddressSanitizer: heap-use-after-free /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/Zend/zend_types.h:685:18 in zval_get_type Shadow bytes around the buggy address: 0x0c0680000030: 00 00 00 fa fa fa fd fd fd fa fa fa fd fd fd fa 0x0c0680000040: fa fa fd fd fd fa fa fa fd fd fd fa fa fa fd fd 0x0c0680000050: fd fa fa fa fd fd fd fa fa fa fd fd fd fa fa fa 0x0c0680000060: fd fd fd fa fa fa 00 00 00 fa fa fa fd fd fd fd 0x0c0680000070: fa fa fd fd fd fd fa fa fd fd fd fd fa fa fd fd =>0x0c0680000080:[fd]fd fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c0680000090: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c06800000a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c06800000b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c06800000c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c06800000d0: 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 ==3179922==ABORTING ``` To reproduce: ``` /home/fuzz/WorkSpace/fusion-fuzz/projects/php/php-src/sapi/cli/php ./test.php ``` Commit: ``` 940ff2098ea4cbc1ce711a07df958f7d531e51fa ``` Configurations: ``` CC="clang-12" CXX="clang++-12" CFLAGS="-DZEND_VERIFY_TYPE_INFERENCE" CXXFLAGS="-DZEND_VERIFY_TYPE_INFERENCE" ./configure --enable-debug --enable-address-sanitizer --enable-undefined-sanitizer --enable-re2c-cgoto --enable-fpm --enable-litespeed --enable-phpdbg-debug --enable-zts --enable-bcmath --enable-calendar --enable-dba --enable-dl-test --enable-exif --enable-ftp --enable-gd --enable-gd-jis-conv --enable-mbstring --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvmsg --enable-zend-test --with-zlib --with-bz2 --with-curl --with-enchant --with-gettext --with-gmp --with-mhash --with-ldap --with-libedit --with-readline --with-snmp --with-sodium --with-xsl --with-zip --with-mysqli --with-pdo-mysql --with-pdo-pgsql --with-pgsql --with-sqlite3 --with-pdo-sqlite --with-webp --with-jpeg --with-freetype --enable-sigchild --with-readline --with-pcre-jit --with-iconv ``` Operating System: ``` Ubuntu 20.04 Host, Docker 0599jiangyc/flowfusion:latest ``` *This bug was found by [fusion-fuzz](https://github.com/fusion-fuzz/fusion-fuzz)* ### PHP Version ```plain 940ff2098ea4cbc1ce711a07df958f7d531e51fa ``` ### Operating System _No response_

« previous php.bugs (#252912) next »