Libsass: Débordement de pile dans sassc

Créé le 7 oct. 2019  ·  4Commentaires  ·  Source: sass/libsass

Nous avons trouvé Stack Overflow dans le binaire sassc et sassc est conforme à clang permettant l'ASAN.

Configuration de la machine

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

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

Sortie 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

Commentaire le plus utile

@NicoleG25 , non, nous ne traitons pas vraiment actuellement les débordements de pile, car avec un système d'exploitation décent, cela entraînera un plantage. Si vous pouvez me dire comment éviter cela avec un analyseur récursif sur tous les env, je suis tout ouïe. Ceci est similaire lorsque vous envoyez un fichier source trop volumineux à GCC/Clang ou à tout autre compilateur. LibSass n'est pas différent à cet égard et dépend de l'espace de pile que vous lui accordez lors de la compilation. Nous pourrions améliorer cela sur certains systèmes d'exploitation, par exemple. en attrapant Structured Execption sur Windows ou en définissant rlimit, ou SIGSEGV sur Linux. Mais nous ne serons jamais totalement épargnés sur tous les systèmes.

Tous les 4 commentaires

Suivi en tant que CVE-2019-18797 .

Cela fonctionne bien pour moi, quelle taille de pile avez-vous donnée à sassc ?

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

Je vais le garder ouvert car je ne l'ai pas entièrement testé sous ASAN.
Mais il semble bien que la taille de votre pile soit tout simplement trop petite.

@mgreter ce problème a-t-il déjà été résolu ?
Je vois plus haut que vous avez dit que ce n'est pas reproductible mais pourtant il y a toujours un CVE actif sur ce problème.
Envisagez-vous de le contester ?
Merci d'avance !

@NicoleG25 , non, nous ne traitons pas vraiment actuellement les débordements de pile, car avec un système d'exploitation décent, cela entraînera un plantage. Si vous pouvez me dire comment éviter cela avec un analyseur récursif sur tous les env, je suis tout ouïe. Ceci est similaire lorsque vous envoyez un fichier source trop volumineux à GCC/Clang ou à tout autre compilateur. LibSass n'est pas différent à cet égard et dépend de l'espace de pile que vous lui accordez lors de la compilation. Nous pourrions améliorer cela sur certains systèmes d'exploitation, par exemple. en attrapant Structured Execption sur Windows ou en définissant rlimit, ou SIGSEGV sur Linux. Mais nous ne serons jamais totalement épargnés sur tous les systèmes.

Cette page vous a été utile?
0 / 5 - 0 notes