A heap-based out-of-bounds read was observed in OracleJavaRuntimeEnvironment version 8u202 (latest at the time of this writing)while fuzz-testing the processing of TrueTypefonts. It manifests itself in the form of the following (or similar) crash:--- cut ---
$ bin/java -cp . DisplaySfntFont test.ttf
Iteration(0,0)
#
# A fatal error has been detected by the JavaRuntimeEnvironment:
#
#SIGSEGV(0xb) at pc=0x00007f42e9a30f79, pid=43119, tid=0x00007f431d7fc700
#
# JRE version:Java(TM)SERuntimeEnvironment(8.0_202-b08)(build 1.8.0_202-b08)
# JavaVM:JavaHotSpot(TM)64-BitServerVM(25.202-b08 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C[libfontmanager.so+0x7f79]AlternateSubstitutionSubtable::process(LEReferenceTo<AlternateSubstitutionSubtable>const&,GlyphIterator*,LEErrorCode&,LEGlyphFilterconst*)const+0xe9
#
# Failedtowrite core dump. Core dumps have been disabled. To enable core dumping,try"ulimit -c unlimited" before starting Java again
#
# An error report file withmore information is saved as:
# jre/8u202/hs_err_pid43119.log
#
# If you would like tosubmit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the JavaVirtualMachine in native code.
# See problematic frame for where toreport the bug.
#
Aborted--- cut ---Under gdb, we can find out that the AlternateSubstitutionSubtable::process function attempts toaccess an invalid memory region:--- cut ---
gdb$ c
Continuing.
Iteration(0,0)Thread2"java" received signal SIGSEGV,Segmentation fault.[----------------------------------registers-----------------------------------]RAX:0x0RBX:0x7ffff7fbbc34-->0x0RCX:0xfff6RDX:0x8066[...]R12:0x7ffff0237946-->0x100f6ff26000100[...][-------------------------------------code-------------------------------------]0x7fffcc1aaf72<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+226>:
movzxecx,cx
0x7fffcc1aaf75<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+229>:
cmpecx,edx
0x7fffcc1aaf77<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+231>:
jle0x7fffcc1aaf3e <_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+174>=>0x7fffcc1aaf79<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+233>:
movzxeax,WORDPTR[r12+rdx*2+0x6]0x7fffcc1aaf7f<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+239>:
xoredx,edx
0x7fffcc1aaf81<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+241>:
rolax,0x80x7fffcc1aaf85<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+245>:
movzxeax,ax
0x7fffcc1aaf88<_ZNK29AlternateSubstitutionSubtable7processERK13LEReferenceToIS_EP13GlyphIteratorR11LEErrorCodePK13LEGlyphFilter+248>:
addr12,rax
[------------------------------------stack-------------------------------------][...][------------------------------------------------------------------------------]Legend: code, data, rodata, value
Stopped reason:SIGSEGV0x00007fffcc1aaf79 in AlternateSubstitutionSubtable::process(LEReferenceTo<AlternateSubstitutionSubtable>const&,GlyphIterator*,LEErrorCode&,LEGlyphFilterconst*)const() from jre/8u202/lib/amd64/libfontmanager.so
--- cut ---The crash reproduces on both Windows and Linuxplatforms. OnWindows, the crash manifests in the following way:--- cut ---(5ae8.5c58):Access violation - code c0000005 (first chance)First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
fontmanager+0x11a9:00007ffa`0d6211a9 0fb74c4306movzx ecx,word ptr [rbx+rax*2+6] ds:00000000`4484a028=????0:004>? rbx
Evaluate expression:1149476694=00000000`44839f560:004>? rax
Evaluate expression:32870=00000000`00008066--- cut ---Attachedwiththis report is the mutated testcase, and a simple Java program used toreproduce the vulnerability by loading TrueType fonts specified through a command-line parameter.
Proof of Concept:
https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/46412.zip