Libsass: Stack Overflow di sassc

Dibuat pada 7 Okt 2019  ·  4Komentar  ·  Sumber: sass/libsass

Kami menemukan Stack Overflow dalam biner sassc dan sassc sesuai dengan dentang yang memungkinkan ASAN.

Pengaturan mesin

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

Kompilasi : CC= afl -clang-fast CXX=afl-clang-fast++ AFL_USE_ASAN=1 make -C sassc -j4
POC : POC.scss.zip

Keluaran ASAN

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

Komentar yang paling membantu

Hai @NicoleG25 , tidak, saat ini kami tidak benar-benar menangani stack overflow, karena dengan OS yang layak ini akan mengakibatkan crash. Jika Anda dapat memberi tahu saya cara menghindari ini dengan parser rekursif di semua env apa pun, saya siap. Ini mirip dengan ketika Anda memasukkan file sumber yang terlalu besar ke GCC/Dentang atau kompiler lainnya. LibSass tidak berbeda dalam hal itu dan tergantung pada seberapa banyak ruang tumpukan yang Anda berikan selama kompilasi. Kami mungkin meningkatkan ini pada OS tertentu, mis. dengan menangkap Structured Execption di windows atau mengatur rlimit, atau SIGSEGV di linux. Tapi kita tidak akan pernah benar-benar menghemat semua sistem.

Semua 4 komentar

Dilacak sebagai CVE-2019-18797 .

Ini berfungsi baik untuk saya, ukuran tumpukan apa yang Anda berikan sassc?

Error: Stack depth exceeded max of 1024
        on line 1:23494 of test.scss

Saya akan tetap membukanya karena saya belum sepenuhnya mengujinya di bawah ASAN.
Tapi sepertinya ukuran tumpukan Anda terlalu kecil.

@mgreter apakah masalah ini pernah ditangani?
Saya melihat di atas bahwa Anda mengatakan itu tidak dapat direproduksi tetapi masih ada CVE yang aktif dalam masalah ini.
Apakah Anda mempertimbangkan untuk membantahnya?
Terima kasih sebelumnya !

Hai @NicoleG25 , tidak, saat ini kami tidak benar-benar menangani stack overflow, karena dengan OS yang layak ini akan mengakibatkan crash. Jika Anda dapat memberi tahu saya cara menghindari ini dengan parser rekursif di semua env apa pun, saya siap. Ini mirip dengan ketika Anda memasukkan file sumber yang terlalu besar ke GCC/Dentang atau kompiler lainnya. LibSass tidak berbeda dalam hal itu dan tergantung pada seberapa banyak ruang tumpukan yang Anda berikan selama kompilasi. Kami mungkin meningkatkan ini pada OS tertentu, mis. dengan menangkap Structured Execption di windows atau mengatur rlimit, atau SIGSEGV di linux. Tapi kita tidak akan pernah benar-benar menghemat semua sistem.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat