Libsass: مكدس الفائض في sassc

تم إنشاؤها على ٧ أكتوبر ٢٠١٩  ·  4تعليقات  ·  مصدر: sass/libsass

وجدنا Stack Overflow في sassc binary و 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

إخراج 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

التعليق الأكثر فائدة

مرحبًا @ NicoleG25 ، لا ، نحن لا نتعامل حاليًا مع تجاوزات المكدس ، لأنه مع نظام تشغيل لائق ، سيؤدي ذلك إلى تعطل. إذا كان بإمكانك إخباري بكيفية تجنب ذلك باستخدام محلل تكراري على أي بيئة ، فأنا جميعًا آذان صاغية. هذا مشابه عندما تقوم بتغذية ملف مصدر كبير جدًا إلى GCC / Clang أو أي مترجم آخر. لا تختلف LibSass في هذا الصدد وتعتمد على مقدار مساحة المكدس التي تمنحها لها أثناء التجميع. قد نقوم بتحسين هذا على أنظمة تشغيل معينة ، على سبيل المثال. عن طريق التقاط "الإعفاء المهيكل" على النوافذ أو ضبط rlimit أو SIGSEGV على نظام التشغيل Linux. لكننا لن نحفظ بالكامل على جميع الأنظمة.

ال 4 كومينتر

يتم تتبعها كـ CVE-2019-18797 .

هذا يعمل بشكل جيد بالنسبة لي ، ما هو حجم المكدس الذي أعطيته ساسك؟

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

سأبقيها مفتوحة لأنني لم أختبرها بالكامل تحت ASAN.
ولكن يبدو من المؤكد أن حجم مكدس الخاص بك هو ببساطة صغير.

mgreter هل تم تناول هذه المشكلة من قبل؟
أرى أعلاه أنك قلت إنه غير قابل للتكرار ولكن مع ذلك لا يزال هناك CVE نشطًا بشأن هذه المشكلة.
هل تفكر في الخلاف عليها؟
شكرا مقدما !

مرحبًا @ NicoleG25 ، لا ، نحن لا نتعامل حاليًا مع تجاوزات المكدس ، لأنه مع نظام تشغيل لائق ، سيؤدي ذلك إلى تعطل. إذا كان بإمكانك إخباري بكيفية تجنب ذلك باستخدام محلل تكراري على أي بيئة ، فأنا جميعًا آذان صاغية. هذا مشابه عندما تقوم بتغذية ملف مصدر كبير جدًا إلى GCC / Clang أو أي مترجم آخر. لا تختلف LibSass في هذا الصدد وتعتمد على مقدار مساحة المكدس التي تمنحها لها أثناء التجميع. قد نقوم بتحسين هذا على أنظمة تشغيل معينة ، على سبيل المثال. عن طريق التقاط "الإعفاء المهيكل" على النوافذ أو ضبط rlimit أو SIGSEGV على نظام التشغيل Linux. لكننا لن نحفظ بالكامل على جميع الأنظمة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات