Libsass: ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка Π² sassc

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 7 ΠΎΠΊΡ‚. 2019  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: sass/libsass

ΠœΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ 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$
Fuzzy Invalid - Not Reproducible

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, @NicoleG25 , Π½Π΅Ρ‚, Π² настоящСС врСмя ΠΌΡ‹ Π½Π΅ занимаСмся ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ стСка, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ с ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎΠΉ ОБ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ сбою. Если Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ½Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсивного парсСра Π½Π° всСх Π»ΡŽΠ±Ρ‹Ρ… env, я вСсь Π² ΡƒΡˆΠ°Ρ…. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ слишком большой исходный Ρ„Π°ΠΉΠ» Π² GCC/Clang ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ компилятор. LibSass Π½Π΅ отличаСтся Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΈ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько мСста Π² стСкС Π²Ρ‹ выдСляСтС Π΅ΠΌΡƒ Π²ΠΎ врСмя компиляции. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ это Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ОБ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° Structured Execption Π² Windows ΠΈΠ»ΠΈ установки rlimit ΠΈΠ»ΠΈ SIGSEGV Π² Linux. Но ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π° всСх систСмах.

ВсС 4 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ 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. Но ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π° всСх систСмах.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ