
🫖 أداة اكتشاف مرتبطة بالعقود والتحقق المصرح به لثغرة Gitea CVE-2026-60004
أداة مستقلة للاكتشاف والتقييم والتحقق المترابط بالعقود لثغرة تنفيذ الأوامر عن بُعد في خطاف Git الخاص بـ Gitea
diffpatch.
يوفر scanner.py لمختبري الاختراق والمدافعين وباحثي الأمن أداة واحدة خالية من التبعيات من أجل:
يُقدَّم هذا المشروع فقط لاختبارات الأمن المصرح بها، والتحقق الدفاعي، والبحث، والتعليم. شغّل الأوضاع النشطة فقط ضد أنظمة تملكها أو لديك إذن كتابي صريح لتقييمها. أنت مسؤول عن الامتثال لجميع القوانين والعقود وقواعد الاشتباك ومتطلبات الإفصاح المعمول بها.
المؤلفون والمساهمون غير مسؤولين عن سوء الاستخدام أو الضرر أو انقطاع الخدمة أو فقدان البيانات أو العواقب القانونية. ينفذ إثبات المفهوم النشط أمرًا كمستخدم نظام تشغيل Gitea ويغيّر حالة الخادم عن طريق إنشاء مستودع خاص. تعامل معه مثل أي أداة تحقق أخرى من RCE.
تؤثر CVE-2026-60004 على سير عمل diffpatch في مستودع Gitea. يمكن للكاتب في المستودع إرسال محتوى تصحيح مُتحكم به يثبّت خطاف Git في استنساخ مؤقت عاري مشترك. يؤدي تطبيق التصحيح المُصمم مرتين إلى تصادم إضافة/إضافة ويتسبب في تنفيذ الخطاف كحساب خدمة Gitea.
لا يتم تصنيف Forgejo والفروع الأخرى تلقائيًا كمتأثرة. يجب مراجعة تنفيذها بشكل مستقل.
لا تقبل الأوضاع النشطة قوائم أهداف أو أحرف بدل.
PATHdiscoverيستخدم الماسح الضوئي مكتبة Python القياسية فقط. لا حاجة إلى pip install.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
اكتشاف الإصدار هو إشارة تقييم، وليس دليلًا على قابلية الاستغلال. قد تتطلب التصحيحات المُعاد نقلها والبنيات المخصصة والوكلاء العكسيون والفروع مراجعة يدوية.
أبقِ كلمة المرور خارج سجل الأوامر بوضعها في البيئة للأمر:
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
ما لم يتم توفير --yes-i-am-authorized للأتمتة، يطلب confirm منك كتابة عبارة التأكيد المرتبطة بالعقد. الأمر الافتراضي عن بُعد هو id.
استخدم هذا فقط عندما يُسمح بإنشاء الحساب بموجب قواعد الاشتباك:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
تُخزَّن كلمة المرور فقط في سجل بيانات الاعتماد الخاص، ولا تُكرر في أدلة JSON أو لوحة النتائج الطرفية.
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test هو أمر نشط ملائم. على هدف متأثر مع تمكين التسجيل، ينشئ تلقائيًا حسابًا ومستودعًا خاصًا، ويكتب علامة العقد، ويشغّل id، ويحفظ النتائج تحت afterdark-results/. لا يحتوي عمدًا على أي موجه تفاعلي إضافي، لذا فإن استدعاءه هو إقرار التفويض.
للتحقق المصرح به صراحةً وضيق النطاق، يقبل confirm وtest الخيار --cmd. فضّل ملف id الافتراضي كلما كان كافيًا.
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='replace-with-your-key'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
لفحص سجلات LeakIX لمضيف معروف واحد دون الاتصال بهذا المضيف:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
نتائج الاكتشاف هي مؤشرات، وليست تفويضًا لفحص أو استغلال الأنظمة المدرجة.
hooks/post-index-change قابلًا للتنفيذ.diffpatch في المستودع.0600 ويرفض الكتابة فوق الأدلة الموجودة.تقتصر عمليات إعادة التوجيه HTTP المصادق عليها على أصل الهدف المحدد. كما يعطل استرجاع مخرجات Git عمليات إعادة التوجيه أثناء نشاط رأس التفويض.
قد تنتج عمليات التشغيل النشطة:
confirmation.json — طوابع زمنية، هدف، اسم حساب، تقييم إصدار، رمز إرجاع، ومخرجات ملتقطةconfirmation.command-output.txt — مخرجات الأوامر الكاملة عن بُعدcredentials.txt — كلمة مرور الحساب المؤقت المُنشأ، عند الطلبembedded-result.txt محفوظ داخل أدلة JSONقد تحتوي هذه الملفات على بيانات اشتباك حساسة. يتم تجاهلها بواسطة .gitignore المرفق، وتُنشأ بوضع 0600، ويجب تشفيرها أثناء التخزين وفقًا لسياسة معالجة الأدلة الخاصة بك.
تتجنب الأداة عمدًا الحذف التلقائي حتى تظل الأدلة متاحة للمراجعة. بعد الاختبار، يجب على مسؤول الهدف:
audit-* المُنشأ، إذا تم إنشاؤهafterdark-* المُنشأ/tmp/gitea-validation-*/client.txt الاختيارية1.27.1 أو أحدثيُظهر تنفيذ إثبات المفهوم الناجح تنفيذ أوامر كحساب خدمة Gitea. لا يثبت بحد ذاته وصول الجذر أو الاستمرارية أو الحركة الجانبية أو اختراق المضيف الأساسي.
id أو whoami--execute-poc صريح لـ confirmالاختبارات المرفقة محلية ولا تُصدر أي طلبات شبكة:
python3 -m unittest discover -s tests -v
التحسينات المسؤولة مرحب بها—خاصة إصلاحات التوافق، وتقليل النتائج الإيجابية الخاطئة، وتحسينات جودة الأدلة، وسير عمل تنظيف أكثر أمانًا. يرجى عدم إرسال تفاصيل أهداف حقيقية أو بيانات اعتماد أو أدلة خاصة أو حمولات مسلحة.
للمشكلات الأمنية في هذه الأداة نفسها، اتبع SECURITY.md.
صُنعت للباحثين الدقيقين الذين يؤمنون أن إثبات المفهوم الجيد يجب أن يكون قابلاً لإعادة الإنتاج، ومنسوبًا، ومملًا في التنظيف. 🛡️
| العنصر | التفاصيل |
|---|
| المنتج | Gitea |
| الإصدارات المتأثرة | >= 1.17.0, < 1.27.1 |
| الإصدار المُصحح | 1.27.1 |
| التأثير | تنفيذ أوامر عن بُعد كمستخدم نظام تشغيل Gitea |
| الوصول المطلوب | وصول كتابة إلى المستودع؛ قد يسمح التسجيل المفتوح للمهاجم بإنشائه |
| الاستشارة | GHSA-rcr6-4jqh-j84m |
| الوضع | سلوك الشبكة | يغيّر حالة الهدف؟ | الغرض |
|---|
discover | يستعلم LeakIX فقط | لا | يبحث في فهرس طرف ثالث موجود؛ لا يتصل بالمضيفات المكتشفة |
recon | هدف واحد محدد | لا | يجرد المسارات العامة الثابتة ووثيقة Swagger المنشورة من الهدف |
verify | هدف واحد محدد | لا | يقرأ /api/v1/version ويصنف إصدار Gitea المُبلغ عنه |
test | هدف واحد محدد | نعم | تدفق ملائم: بوابة إصدار، فحص تسجيل، حساب مؤقت، علامة، id، وأدلة |
confirm | هدف واحد محدد | نعم | تأكيد مُتحكم به بحساب معتمد أو تسجيل مؤقت صريح |