ΠΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ sassc, ΠΈ sassc ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ clang, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ASAN.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΌΠ°ΡΠΈΠ½Ρ
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 , Π½Π΅Ρ, Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΊΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎΠΉ ΠΠ‘ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠ±ΠΎΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ½Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ° Π½Π° Π²ΡΠ΅Ρ Π»ΡΠ±ΡΡ env, Ρ Π²Π΅ΡΡ Π² ΡΡΠ°Ρ . ΠΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² GCC/Clang ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. LibSass Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ΅ΠΊΠ΅ Π²Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΠ΅ Π΅ΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ»ΡΡΡΠΈΡΡ ΡΡΠΎ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΠ‘, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° Structured Execption Π² Windows ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ rlimit ΠΈΠ»ΠΈ SIGSEGV Π² Linux. ΠΠΎ ΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ .
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ, @NicoleG25 , Π½Π΅Ρ, Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΊΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎΠΉ ΠΠ‘ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠ±ΠΎΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ½Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ° Π½Π° Π²ΡΠ΅Ρ Π»ΡΠ±ΡΡ env, Ρ Π²Π΅ΡΡ Π² ΡΡΠ°Ρ . ΠΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² GCC/Clang ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. LibSass Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ΅ΠΊΠ΅ Π²Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΠ΅ Π΅ΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ»ΡΡΡΠΈΡΡ ΡΡΠΎ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΠ‘, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° Structured Execption Π² Windows ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ rlimit ΠΈΠ»ΠΈ SIGSEGV Π² Linux. ΠΠΎ ΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ .