
مختبر إثبات مفهوم يوضح SSRF مُصادَق عليه في قائمة السماح الخاصة بـ hostmatcher في Gitea، حيث يصل webhook إلى http://0.0.0.1 إلى خدمات loopback التي لا يمكن لـ 127.0.0.1 الوصول إليها.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-hostmatcher-0000-ssrf
Gitea 1.27.3 - Gitea
CVE-2026-22874 أضاف reservedIPNets. CGNAT، TEST-NET، NAT64، Teredo، Azure WireServer. نطاقات حقيقية. ليس RFC 6890 0.0.0.0/8، كتلة "هذه الشبكة" القديمة. IANA لا تزال تنشرها. Go IsGlobalUnicast تكون true لـ 0.0.0.1. ليست IsLoopback (127.0.0.0/8). ليست IsPrivate. قائمة السماح الخارجية الافتراضية تعاملها كالإنترنت العام. Linux ستوصل 0.0.0.1 إلى مقبس محلي إذا كان هذا العنوان على lo. نفس المستمع، اسمان.
يمكن لمستخدم مسجّل الدخول أن يوجّه webhook إلى http://0.0.0.1 ويقرأ جسم HTTP من سجل الـ hook. 127.0.0.1 على نفس المنفذ مرفوض.
| ID | لا يوجد CVE بعد |
| CWE | CWE-918 |
| CVSS | High: 7.7 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| Product | Gitea |
| Affected | حتى v1.27.3 (146cc3e)؛ بقايا CVE-2026-22874 |
| Auth | مستخدم مسجّل الدخول يمكنه إنشاء webhook لمستودع |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 فقط |
التسجيل (التسجيل المفتوح الافتراضي)، إنشاء مستودع، توجيه webhook إلى http://0.0.0.1:<local-port>/، اختباره، وقراءة جسم الاستجابة من سجل الـ hook. هذا HTTP عبر loopback لا يمكن لـ 127.0.0.1 على نفس المنفذ الوصول إليه: أي شيء يستمع في netns الخاص بـ Gitea وربط نفسه بشكل أوسع من loopback، بما في ذلك الخدمات التي ظنّ المشغّل أنها "localhost فقط" لأنها حجبت 127.0.0.0/8.
لا يضبط X-Gitea-Internal-Auth. ليس RCE بحد ذاته. إنه جسم HTTP كامل من عنوان لا تزال قائمة السماح تسميه خارجيًا.
v1.27.3 هو البناء الذي أغلق موجة GHSA لعام 2026. جلست على هذا الوسم على أي حال. التصحيحات التي تضيف قائمة سماح أو قائمة حظر هي هدية: تقرأ القائمة، ثم تسأل ما الذي لا تزال IANA تملكه وقد نسيته القائمة. بالفعل كان لبقيتين مختبرات على هذه الشجرة (keys IDOR وgit-redirect SSRF). جدول البقايا في ذلك المنشور أدرج webhook إلى http://0.0.0.1/ كخريطة. هذا هو SUCCESS.
تسليم الـ webhook يخزّن جسم HTTP في سجل الـ hook. هذا oracle أفضل من git clone، الذي يكون في الغالب "هل نجح الجلب." وضعت oracle في netns الخاص بـ Gitea على المنفذ 8080، وأضفت 0.0.0.1/8 على lo باستخدام NET_ADMIN، وأنشأت اثنين من webhooks. الضبط السلبي أولاً.
المنعطفات الخاطئة المسجّلة بالفعل: اعتبار إنشاء webhook HTTP 201 كـ oracle (السجل هو الـ oracle)؛ نجاح تسليم 127.0.0.1 (سيكون ذلك خطأً مختلفًا - المختبر يتطلب رفضه)؛ ضرب /api/internal بـ X-Gitea-Internal-Auth؛ reverse shell. مسرح. الشاهد هو GITEA-0000-SSRF في سجل الـ hook.
cd lab
./run.sh
الهدف فقط http://127.0.0.1:18131. الـ oracle يتشارك netns الخاص بـ Gitea على المنفذ 8080. run.sh يضيف 0.0.0.1/8 على lo.
create-hook name=neg-loopback status=201
negative-control 127.0.0.1 blocked
create-hook name=hit-0000 status=201
poll id=2 witness=True
SUCCESS GITEA-HOSTMATCHER-0000
أضف 0.0.0.0/8 إلى reservedIPNets، أو توقف عن معاملة IsGlobalUnicast كـ "آمن للاتصال." يجب رفض 0.0.0.1 بنفس طريقة رفض 127.0.0.1.
hostmatcher.goGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.