Libsass: Desbordamiento de pila en sassc

Creado en 7 oct. 2019  ·  4Comentarios  ·  Fuente: sass/libsass

Encontramos Stack Overflow en sassc binary y sassc cumple con Clang que permite ASAN.

Configuración de la máquina

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

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

Salida 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

Comentario más útil

Hola @NicoleG25 , no, actualmente no abordamos los desbordamientos de pila, ya que con un sistema operativo decente, esto provocará un bloqueo. Si puede decirme cómo evitar esto con un analizador recursivo en todos los entornos, soy todo oídos. Esto es similar a cuando envía un archivo fuente demasiado grande a GCC/Clang o cualquier otro compilador. LibSass no es diferente en ese sentido y depende de cuánto espacio de pila le des durante la compilación. Podríamos mejorar esto en ciertos sistemas operativos, por ejemplo. capturando la excepción estructurada en Windows o configurando rlimit, o SIGSEGV en Linux. Pero nunca seremos completamente salvos en todos los sistemas.

Todos 4 comentarios

Siendo rastreado como CVE-2019-18797 .

Esto funciona bien para mí, ¿qué tamaño de pila le diste a sassc?

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

Lo mantendré abierto ya que no lo he probado completamente bajo ASAN.
Pero seguro que parece que el tamaño de tu pila es demasiado pequeño.

@mgreter ¿Se abordó alguna vez este problema?
Veo arriba que dijiste que no es reproducible, pero todavía hay un CVE activo en este problema.
¿Estás pensando en impugnarlo?
Gracias por adelantado !

Hola @NicoleG25 , no, actualmente no abordamos los desbordamientos de pila, ya que con un sistema operativo decente, esto provocará un bloqueo. Si puede decirme cómo evitar esto con un analizador recursivo en todos los entornos, soy todo oídos. Esto es similar a cuando envía un archivo fuente demasiado grande a GCC/Clang o cualquier otro compilador. LibSass no es diferente en ese sentido y depende de cuánto espacio de pila le des durante la compilación. Podríamos mejorar esto en ciertos sistemas operativos, por ejemplo. capturando la excepción estructurada en Windows o configurando rlimit, o SIGSEGV en Linux. Pero nunca seremos completamente salvos en todos los sistemas.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

JohnMica picture JohnMica  ·  3Comentarios

Hint-ru picture Hint-ru  ·  5Comentarios

xzyfer picture xzyfer  ·  9Comentarios

schneems picture schneems  ·  9Comentarios

sgbeal picture sgbeal  ·  13Comentarios