Skip to content

use-after-free in tidy-html5 5.1.25 #341

Closed
@gaa-cifasis

Description

@gaa-cifasis

Hello,

We found a use-after-free in tidy-html5 (last version: 5.1.25). Find attached a test case to reproduce it here. You can see the ASAN report:

==4395== ERROR: AddressSanitizer: heap-use-after-free on address 0xb5e02210 at pc 0x8095ee0 bp 0xbfffeb68 sp 0xbfffeb5c
READ of size 1 at 0xb5e02210 thread T0
#0 0x8095edf (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8095edf)
#1 0x8230d41 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8230d41)
#2 0x815dee5 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x815dee5)
#3 0x80ef513 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x80ef513)
#4 0x80f04cf (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x80f04cf)
#5 0x80f04cf (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x80f04cf)
#6 0x80fd9fe (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x80fd9fe)
#7 0x8106468 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8106468)
#8 0x8116713 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8116713)
#9 0x8123ae4 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8123ae4)
#10 0x80ac845 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x80ac845)
#11 0x80ad3aa (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x80ad3aa)
#12 0x8052d0b (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8052d0b)
#13 0xb6851a82 (/lib/i386-linux-gnu/libc-2.19.so+0x19a82)
#14 0x8057785 (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x8057785)
0xb5e02210 is located 0 bytes inside of 3-byte region [0xb5e02210,0xb5e02213)
freed by thread T0 here:
#0 0xb69fc774 (/usr/lib/i386-linux-gnu/libasan.so.0.0.0+0x16774)
#1 0x822efcf (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x822efcf)
previously allocated by thread T0 here:
#0 0xb69fc854 (/usr/lib/i386-linux-gnu/libasan.so.0.0.0+0x16854)
#1 0x81f7aac (/home/vagrant/afl-tests/progs/tidy-html5-5.1.25/tidy+0x81f7aac)
Shadow bytes around the buggy address:
0x36bc03f0: fa fa 00 fa fa fa 06 fa fa fa 05 fa fa fa fd fa
0x36bc0400: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x36bc0410: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x36bc0420: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x36bc0430: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fd fa
=>0x36bc0440: fa fa[fd]fa fa fa 03 fa fa fa fd fa fa fa fd fa
0x36bc0450: fa fa 00 03 fa fa 06 fa fa fa 05 fa fa fa fd fa
0x36bc0460: fa fa fd fa fa fa fd fa fa fa 07 fa fa fa 06 fa
0x36bc0470: fa fa 00 fa fa fa 03 fa fa fa 05 fa fa fa 02 fa
0x36bc0480: fa fa 00 fa fa fa 06 fa fa fa 05 fa fa fa 00 04
0x36bc0490: fa fa 03 fa fa fa 02 fa fa fa fd fa fa fa 05 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 righ 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
ASan internal: fe

and the gdb backtrace is here:

(gdb) bt
#0 0xb7fdd428 in __kernel_vsyscall ()
#1 0xb6866607 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#2 0xb6869a33 in __GI_abort () at abort.c:89
#3 0xb6a042e4 in ?? () from /usr/lib/i386-linux-gnu/libasan.so.0
#4 0xb69f858a in ?? () from /usr/lib/i386-linux-gnu/libasan.so.0
#5 0xb6a00f4b in ?? () from /usr/lib/i386-linux-gnu/libasan.so.0
#6 0xb69ffd3a in __asan_report_error () from /usr/lib/i386-linux-gnu/libasan.so.0
#7 0xb69f88ff in __asan_report_load1 () from /usr/lib/i386-linux-gnu/libasan.so.0
#8 0x08095ee0 in prvTidytmbstrlen (str=0xb5e02211 "m") at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/tmbstr.c:98
#9 prvTidytmbstrdup (allocator=0x82c1540 <prvTidyg_default_allocator>, str=str@entry=0xb5e02210 "em")

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/tmbstr.c:18

#10 0x08230d42 in prvTidyInsertedToken (doc=doc@entry=0xb6601d00) at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/istack.c:275
#11 0x0815dee6 in prvTidyGetToken (doc=doc@entry=0xb6601d00, mode=mode@entry=MixedContent)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/lexer.c:2276

#12 0x080ef514 in prvTidyParseInline (doc=0xb6601d00, element=0xb5604690, mode=MixedContent)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:1672

#13 0x080f04d0 in ParseTag (mode=, node=0xb5604690, doc=)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:775

#14 prvTidyParseInline (doc=0xb6601d00, element=, mode=MixedContent)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:2202

#15 0x080f04d0 in ParseTag (mode=, node=0xb5604700, doc=)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:775

#16 prvTidyParseInline (doc=0xb6601d00, element=, mode=MixedContent)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:2202

#17 0x080fd9ff in ParseTag (mode=IgnoreWhitespace, node=0xb5604770, doc=)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:775

#18 prvTidyParseRow (doc=0xb6601d00, row=0xb5601590, mode=IgnoreWhitespace) at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:2689
#19 0x08106469 in ParseTag (mode=IgnoreWhitespace, node=, doc=)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:775

#20 prvTidyParseTableTag (doc=0xb6601d00, table=0xb5601520, mode=IgnoreWhitespace)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:3059

#21 0x08116714 in ParseTag (mode=IgnoreWhitespace, node=0xb5601520, doc=)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:775

#22 prvTidyParseBody (doc=0xb6601d00, body=0xb56017c0, mode=IgnoreWhitespace) at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:4081
#23 0x08123ae5 in prvTidyParseDocument (doc=doc@entry=0xb6601d00) at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/parser.c:4750
#24 0x080ac846 in prvTidyDocParseStream (doc=doc@entry=0xb6601d00, in=in@entry=0xb6003c60)

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/tidylib.c:1233

#25 0x080ad3ab in tidyDocParseFile (filnam=0xbffff81e "use-after-free.html", doc=0xb6601d00)

---Type to continue, or q to quit---
at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/tidylib.c:896
#26 tidyParseFile (tdoc=tdoc@entry=0xb6601d00, filnam=filnam@entry=0xbffff81e "use-after-free.html")

at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/src/tidylib.c:844

#27 0x08052d0c in main (argc=2, argv=0xbffff6b4) at /home/vagrant/afl-tests/progs/tidy-html5-5.1.25/console/tidy.c:1336

Regards,
Gustavo.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions