
CVE-2018-18925 के लिए शोषण: सत्र प्रबंधन में निर्देशिका ट्रैवर्सल के माध्यम से Gogs में दूरस्थ कोड निष्पादन, सत्र बाईपास और व्यवस्थापक पहुंच को सक्षम करना और बाद में git हुक के माध्यम से RCE।
CVE-2018-18925 का शोषण - Git स्व-होस्टेड टूल Gogs के विरुद्ध एक रिमोट कोड निष्पादन।
Gogs Macaron फ्रेमवर्क पर आधारित है। सत्र प्रबंधित करने के लिए उपयोग की जाने वाली प्रणाली PHP के समान है। कुकी में सत्र पहचानकर्ता फ़ाइल सिस्टम पर एक फ़ाइल से मैप किया जाता है। जब वेब सर्वर को एक सत्र पहचानकर्ता (कुकी के रूप में) के साथ अनुरोध प्राप्त होता है, तो वह फ़ाइल सिस्टम पर फ़ाइल की खोज करता है।
यह कमजोरी फ़ाइल सिस्टम पर सत्र के लिए उपयोग की जाने वाली फ़ाइल को पुनर्प्राप्त करते समय एक साधारण डायरेक्टरी ट्रैवर्सल है। उदाहरण के लिए, आप i_like_gogits कुकी को ../../../../../../etc/passwd पर सेट कर सकते हैं ताकि सर्वर से एक त्रुटि प्राप्त हो।

सत्र बायपास का शोषण करने के लिए, हमें एक विशेष रूप से तैयार की गई फ़ाइल अपलोड करने का एक तरीका चाहिए, फिर हम इस फ़ाइल को अपने सत्र आईडी के रूप में उपयोग करेंगे, हम https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go के साथ अपनी खुद की तैयार सत्र आईडी फ़ाइल बना सकते हैं।
go run main.go
स्थानीय रूप से रिपॉजिटरी की प्रतिलिपि बनाते समय, Gogs फ़ाइलों को /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME] पर रखता है (यह रिपॉजिटरी केवल तब बनाई जाती है जब आप "फ़ाइल अपलोड करें" सुविधा का उपयोग करते हैं)।

जहाँ [FILENAME] आपके द्वारा अपलोड की गई फ़ाइल का नाम है और [REPO_ID] रिपॉजिटरी पहचानकर्ता है जिसे Fork लिंक का उपयोग करके पाया जा सकता है:

जहाँ 5 रिपॉजिटरी आईडी है।
डिफ़ॉल्ट रूप से, सत्र /data/gogs/data/sessions/ में संग्रहीत होते हैं। इसलिए, आप अपने सत्र आईडी के लिए निम्न सापेक्ष पथ का उपयोग कर सकते हैं: ../tmp/local-repo/[REPO_ID]/[FILENAME]। अपने i_like_gogits कुकी में इस पथ का उपयोग करके, आपको administrator के रूप में लॉग इन होना चाहिए।

RCE प्राप्त करने के लिए, आप किसी दिए गए रिपॉजिटरी में git हुक्स की कार्यक्षमता का उपयोग करके एक शेल स्क्रिप्ट चला सकते हैं।

pre-receive में अपना कोड इंजेक्ट करें:

फिर हुक को निष्पादित करने के लिए git या फ़ाइल बनाएँ फ़ंक्शन के साथ एक पुश अनुरोध करें।