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