Skip to content

Heap buffer overflow in DOMNode -> getElementByTagName #16465

Closed
@chibinz

Description

@chibinz

Description

The following code:

<?php
$v10 = new DOMElement ( "a" );
$v10 -> getElementsByTagName ( "text\0something" );

Resulted in this output:

==1323436==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000003f95 at pc 0x55dbf218d627 bp 0x7fff76326f40 sp 0x7fff76326f38
READ of size 1 at 0x602000003f95 thread T0
    #0 0x55dbf218d626 in zend_str_tolower_impl /tmp/php-asan/Zend/zend_operators.c:2946:10
    #1 0x55dbf218e000 in zend_str_tolower /tmp/php-asan/Zend/zend_operators.c:3003:2
    #2 0x55dbf0fce3d3 in dom_namednode_iter /tmp/php-asan/ext/dom/php_dom.c:1488:4
    #3 0x55dbf0f3dfe3 in dom_element_get_elements_by_tag_name /tmp/php-asan/ext/dom/element.c:831:2
    #4 0x55dbf0f3db5e in zim_DOMElement_getElementsByTagName /tmp/php-asan/ext/dom/element.c:836:2
    #5 0x55dbf1e93ac2 in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER /tmp/php-asan/Zend/zend_vm_execute.h:1919:4
    #6 0x55dbf1da602d in execute_ex /tmp/php-asan/Zend/zend_vm_execute.h:58565:7
    #7 0x55dbf1da6857 in zend_execute /tmp/php-asan/Zend/zend_vm_execute.h:64217:2
    #8 0x55dbf21da9d0 in zend_execute_script /tmp/php-asan/Zend/zend.c:1928:3
    #9 0x55dbf19f961b in php_execute_script_ex /tmp/php-asan/main/main.c:2574:13
    #10 0x55dbf19f9b18 in php_execute_script /tmp/php-asan/main/main.c:2614:9
    #11 0x55dbf21e2479 in do_cli /tmp/php-asan/sapi/cli/php_cli.c:935:5
    #12 0x55dbf21df49c in main /tmp/php-asan/sapi/cli/php_cli.c:1310:18
    #13 0x7f5e67629d8f  (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f) (BuildId: 490fef8403240c91833978d494d39e537409b92e)
    #14 0x7f5e67629e3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f) (BuildId: 490fef8403240c91833978d494d39e537409b92e)
    #15 0x55dbf0c02dc4 in _start (/workspaces/TriFuzz/targets/php-asan/bin/php+0x402dc4)

0x602000003f95 is located 0 bytes to the right of 5-byte region [0x602000003f90,0x602000003f95)
allocated by thread T0 here:
    #0 0x55dbf0c8798e in malloc /opt/llvm-15-build/llvm-15.x/final/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:69:3
    #1 0x55dbf1c3a543 in __zend_malloc /tmp/php-asan/Zend/zend_alloc.c:3280:14
    #2 0x55dbf1c39ed0 in _emalloc /tmp/php-asan/Zend/zend_alloc.c:2737:10
    #3 0x55dbf1c3a7eb in _estrdup /tmp/php-asan/Zend/zend_alloc.c:2818:15
    #4 0x55dbf0fce2ba in dom_namednode_iter /tmp/php-asan/ext/dom/php_dom.c:1484:34
    #5 0x55dbf0f3dfe3 in dom_element_get_elements_by_tag_name /tmp/php-asan/ext/dom/element.c:831:2
    #6 0x55dbf0f3db5e in zim_DOMElement_getElementsByTagName /tmp/php-asan/ext/dom/element.c:836:2
    #7 0x55dbf1e93ac2 in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER /tmp/php-asan/Zend/zend_vm_execute.h:1919:4
    #8 0x55dbf1da602d in execute_ex /tmp/php-asan/Zend/zend_vm_execute.h:58565:7
    #9 0x55dbf1da6857 in zend_execute /tmp/php-asan/Zend/zend_vm_execute.h:64217:2
    #10 0x55dbf21da9d0 in zend_execute_script /tmp/php-asan/Zend/zend.c:1928:3
    #11 0x55dbf19f961b in php_execute_script_ex /tmp/php-asan/main/main.c:2574:13
    #12 0x55dbf19f9b18 in php_execute_script /tmp/php-asan/main/main.c:2614:9
    #13 0x55dbf21e2479 in do_cli /tmp/php-asan/sapi/cli/php_cli.c:935:5
    #14 0x55dbf21df49c in main /tmp/php-asan/sapi/cli/php_cli.c:1310:18
    #15 0x7f5e67629d8f  (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f) (BuildId: 490fef8403240c91833978d494d39e537409b92e)

SUMMARY: AddressSanitizer: heap-buffer-overflow /tmp/php-asan/Zend/zend_operators.c:2946:10 in zend_str_tolower_impl
Shadow bytes around the buggy address:
  0x0c047fff87a0: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd
  0x0c047fff87b0: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd
  0x0c047fff87c0: fa fa fd fd fa fa fd fd fa fa fd fd fa fa 00 04
  0x0c047fff87d0: fa fa 00 05 fa fa 00 05 fa fa 04 fa fa fa 00 fa
  0x0c047fff87e0: fa fa fd fd fa fa 00 04 fa fa 02 fa fa fa 00 07
=>0x0c047fff87f0: fa fa[05]fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8810: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8820: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8830: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8840: 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
==1323436==ABORTING

PHP Version

PHP 8.5.0-dev

Operating System

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions