์ฐ๋ฆฌ๋ sassc ๋ฐ์ด๋๋ฆฌ์์ ์คํ ์ค๋ฒํ๋ก๋ฅผ ๋ฐ๊ฒฌํ์ผ๋ฉฐ sassc๋ ASAN์ ํ์ฑํํ๋ clang์ ์ค์ํฉ๋๋ค.
๊ธฐ๊ณ ์ค์
Machine : Ubuntu 16.04.3 LTS
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
Commit : 4da7c4b
Command : sassc POC
์ปดํ์ผ: CC=afl-clang-fast CXX=afl-clang-fast++ AFL_USE_ASAN =1 make -C sassc -j4
POC : POC.scss.zip
์์ฐ ์ถ๋ ฅ
fuzzer<strong i="17">@fuzzer</strong>:~/victim/libsass/sassc/bin$ ./sassc -v
sassc: 3.6.1-5-g507f0
libsass: 3.6.2
sass2scss: 1.1.1
sass: 3.5
fuzzer<strong i="18">@fuzzer</strong>:~/victim/libsass/sassc/bin$
fuzzer<strong i="19">@fuzzer</strong>:~/victim/libsass/sassc/bin$ ./sassc in/POC.scss
ASAN:DEADLYSIGNAL
=================================================================
==23322==ERROR: AddressSanitizer: stack-overflow on address 0x7ffdfae50e58 (pc 0x00000049382c bp 0x7ffdfae516b0 sp 0x7ffdfae50e30 T0)
#0 0x49382b in __interceptor_strcmp.part.24 (/home/fuzzer/victim/libsass/sassc/bin/sassc+0x49382b)
#1 0x9d6aed in std::type_info::operator==(std::type_info const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/typeinfo:124:5
#2 0x9d6aed in Sass::Variable* Sass::Cast<Sass::Variable>(Sass::AST_Node*) /home/fuzzer/victim/libsass/src/ast.hpp:114
#3 0x9d6aed in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:570
#4 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
#5 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
#6 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
#7 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
#8 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
// SNIPPED //
#252 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
#253 0x9d7a5e in Sass::Eval::operator()(Sass::Binary_Expression*) /home/fuzzer/victim/libsass/src/eval.cpp:582:13
SUMMARY: AddressSanitizer: stack-overflow (/home/fuzzer/victim/libsass/sassc/bin/sassc+0x49382b) in __interceptor_strcmp.part.24
==23322==ABORTING
fuzzer<strong i="20">@fuzzer</strong>:~/victim/libsass/sassc/bin$
CVE-2019-18797 ๋ก ์ถ์ ์ค์ ๋๋ค.
์ด๊ฒ์ ๋์๊ฒ ์ ์๋ํฉ๋๋ค. sassc์ ์ด๋ค ์คํ ํฌ๊ธฐ๋ฅผ ์ฃผ์์ต๋๊น?
Error: Stack depth exceeded max of 1024
on line 1:23494 of test.scss
ASAN์์ ์์ ํ ํ
์คํธํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด์ด ๋๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ ์คํ ํฌ๊ธฐ๊ฐ ๋จ์ํ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@mgreter ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ์ ์ด ์์ต๋๊น?
์์์ ์ฌํํ ์ ์๋ค๊ณ ๋ง์ํ์
จ์ง๋ง ์์ง ์ด ๋ฌธ์ ์ ๋ํด CVE๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ ๋ํด ๋
ผ์ํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์ต๋๊น?
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@NicoleG25๋ , ํ์ฌ ์คํ ์ค๋ฒํ๋ก๋ฅผ ํด๊ฒฐํ์ง ์์ต๋๋ค. ๊ด์ฐฎ์ OS์์๋ ์ถฉ๋์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ํ๊ฒฝ์์ ์ฌ๊ท ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ํผํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์ค ์ ์๋ค๋ฉด ์ ๋ ๊ท๋ฅผ ๊ธฐ์ธ์ด๊ฒ ์ต๋๋ค. ์ด๋ ๋๋ฌด ํฐ ์์ค ํ์ผ์ GCC/Clang ๋๋ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ์ ์ ๊ณตํ ๋์ ์ ์ฌํฉ๋๋ค. LibSass๋ ๊ทธ๋ฐ ์ ์์ ๋ค๋ฅด์ง ์์ผ๋ฉฐ ์ปดํ์ผํ๋ ๋์ ์ ๊ณตํ๋ ์คํ ๊ณต๊ฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ํน์ OS์์ ์ด๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค. Windows์์ ๊ตฌ์กฐ์ ์์ธ๋ฅผ ์ก๊ฑฐ๋ Linux์์ rlimit ๋๋ SIGSEGV๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ์์คํ ์ ์์ ํ ์ ์ฅํ์ง๋ ์์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@NicoleG25๋ , ํ์ฌ ์คํ ์ค๋ฒํ๋ก๋ฅผ ํด๊ฒฐํ์ง ์์ต๋๋ค. ๊ด์ฐฎ์ OS์์๋ ์ถฉ๋์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ํ๊ฒฝ์์ ์ฌ๊ท ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ํผํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์ค ์ ์๋ค๋ฉด ์ ๋ ๊ท๋ฅผ ๊ธฐ์ธ์ด๊ฒ ์ต๋๋ค. ์ด๋ ๋๋ฌด ํฐ ์์ค ํ์ผ์ GCC/Clang ๋๋ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ์ ์ ๊ณตํ ๋์ ์ ์ฌํฉ๋๋ค. LibSass๋ ๊ทธ๋ฐ ์ ์์ ๋ค๋ฅด์ง ์์ผ๋ฉฐ ์ปดํ์ผํ๋ ๋์ ์ ๊ณตํ๋ ์คํ ๊ณต๊ฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ํน์ OS์์ ์ด๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค. Windows์์ ๊ตฌ์กฐ์ ์์ธ๋ฅผ ์ก๊ฑฐ๋ Linux์์ rlimit ๋๋ SIGSEGV๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ์์คํ ์ ์์ ํ ์ ์ฅํ์ง๋ ์์ ๊ฒ์ ๋๋ค.