
Gitea diffpatch RCE (CVE-2026-60004) PoC - repo-write to RCE as Gitea service account
دليل إثبات المفهوم (PoC) لثغرة تنفيذ التعليمات البرمجية عن بُعد في نقطة النهاية diffpatch في Gitea. أي حساب يملك صلاحية كتابة على مستودعٍ ما (يكفي إنشاء حساب على الحالات ذات التسجيل المفتوح) يمكنه تنفيذ أوامر shell عشوائية على الخادم بصفة حساب خدمة Gitea.
نقطة النهاية POST /api/v1/repos/{owner}/{repo}/diffpatch تطبّق تصحيحًا يتحكم فيه المهاجم على مستودع استنساخ مؤقت مشترك من نوع bare:
git apply --index --recount --cached --binary # Git ≥ 2.32 时追加 -3 三路合并回退
سلسلة الهجوم: تطبيق التصحيح نفسه مرتين ← تعارض add/add ← تراجع الدمج الثلاثي يقوم بعمل checkout لمسار الفهرس (حتى مع --cached) ← في مستودع bare يكون root = $GIT_DIR، فيصبح hooks/post-index-change (100755) الذي جرى له checkout بمثابة hook نشط لـ Git ← يُنفَّذ تلقائيًا عند كتابة Git للفهرس ← RCE.
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H470d34b1)-3)diffpatch# 设置账户密码
export GITEA_PASSWORD='account-password'
python3 gitea_diffpatch_rce_poc.py \
https://<gitea-base-url> \
<username> \
'id; uname -srm; pwd'
| المعامل | الوصف |
|---|---|
url | عنوان Gitea الأساسي |
username | اسم مستخدم Gitea موجود مسبقًا (التوفّر: التسجيل المفتوح افتراضيًا) |
المتطلبات: Python 3 + عميل git محلي.
سير عمل الـ PoC: المصادقة ← إنشاء مستودع خاص مُهيأ ← بناء تصحيح hooks/post-index-change ← تسليمه إلى diffpatch مرتين متتاليتين (لإثارة تعارض add/add) ← ينفّذ Git الـ hook ← استرجاع مخرجات الأمر عبر Smart HTTP مُصادَق عليه. لا توجد استدعاءات صادرة (callback)، بل تُعاد المخرجات داخل النطاق (in-band).
مخصص للبحث الأمني والتحقق من الثغرات والاختبارات الدفاعية فقط. يعمل هذا الـ PoC على إنشاء مستودعات في الحالة المستهدفة، وإرسال تصحيحات، وتشغيل أوامر على الخادم — يُرجى تشغيله على مثيل اختبار تستضيفه بنفسك فقط، ولا تستخدمه ضد بيئات غير مصرَّح بها أو بيئات الإنتاج.
command | أمر shell المطلوب تنفيذه على الهدف |
GITEA_PASSWORD | كلمة مرور الحساب (متغير بيئة، أو إدخال تفاعلي) |