
إثبات المفهوم الذي يوضح تجاوزًا للترخيص في مزود بوابة Kubernetes الخاص بـ Traefik (CVE-2026-54761) عبر ثغرة crossProviderNamespaces، مما يؤدي إلى كشف الخدمات الداخلية مثل api@internal.
هذا المستودع هو إثبات المفهوم (PoC) لإعادة إنتاج الثغرة الأمنية عالية الخطورة CVE-2026-54761 الموجودة في مزود Kubernetes Gateway الخاص بـ Traefik في بيئة محلية.
تؤثر هذه الثغرة على قائمة السماح crossProviderNamespaces. في قواعد HTTPRoute التي تعلن عن مراجع خلفية متعددة ذات أوزان، يتحقق Traefik من قائمة السماح مقابل backendRef.namespace للمرجع المستهدف، وليس مقابل مساحة الاسم الخاصة بالتوجيه نفسه. نتيجة لذلك، حتى إذا كان HTTPRoute موجودًا في مساحة اسم غير مسموح بها، يمكن كشف خدمات Traefik الداخلية مثل api@internal إذا كان المرجع الخلفي يشير إلى مساحة اسم مسموح بها ويوجد ReferenceGrant مناسب من Gateway API.
المبلغون: saku0512 (https://github.com/Saku0512), vvvvvvvvvvel (https://github.com/vvvvvvvvvvel)
هذا المشروع مخصص للأغراض التعليمية واختبارات الأمان المصرح بها فقط.
لا تقم بتشغيل هذا الإثبات على أنظمة لا تملكها أو لا تديرها. تم تصميم هذا الإثبات لإنشاء كتلة kind محلية قابلة للتجاهل وإظهار المشكلة في بيئة معزولة.
api@internal عبر مستوى البيانات العاديخيار crossProviderNamespaces مصمم لتقييد مساحات أسماء توجيهات Gateway API التي يمكنها إعلان مراجع خلفية TraefikService تحتوي على مراجع لخدمة @internal.
في مسار معالجة الخلفية الموزونة الضعيفة، يتحقق Traefik من قائمة السماح مقابل backendRef.namespace. ولكن، الحدود الأمنية هي مساحة اسم HTTPRoute الذي يعلن المرجع، لذا فإن هذا التحقق خاطئ.
السلوك المتوقع:
providers:
kubernetesGateway:
crossProviderNamespaces:
- trusted
يجب فقط للتوجيهات التي تكون مساحة اسمها trusted أن تعلن مراجع خلفية TraefikService عبر المزود.
السلوك الضعيف:
backendRefs:
- group: traefik.io
kind: TraefikService
name: api@internal
namespace: trusted
إذا كان التوجيه يحتوي على مراجع خلفية متعددة وتم تعيين backendRef.namespace إلى مساحة اسم trusted المسموح بها، فقد يتم قبول HTTPRoute في مساحة اسم attacker.
يقوم هذا الإثبات بإنشاء كتلة kind محلية قابلة للتجاهل بالتكوين التالي:
providers.kubernetesGateway.crossProviderNamespaces=trustedReferenceGrant عادي من Gateway API من trustedcd external-repro-kind
./run-kind-repro.sh
يقوم البرنامج النصي تلقائيًا بحذف الكتلة عند الانتهاء.
للحفاظ على الكتلة للفحص اليدوي:
KEEP_CLUSTER=1 ./run-kind-repro.sh
يستخدم توجيه التحكم مرجعًا خلفيًا واحدًا محظورًا api@internal من مساحة اسم attacker. في هذه الحالة، لا ينبغي كشف API.
control status: 404
يستخدم توجيه الاستغلال مرجعين خلفيين، مما يجعل Traefik يقوم ببناء خدمة موزونة. في الإصدار الضعيف، يؤدي طلب /api/http/services إلى إرجاع JSON من Traefik API.
exploit returned Traefik API JSON
api@internal status: enabled
weighted members:
api@internal 1000000
attacker-whoami-http-80 1
النقطة المهمة هي أن كلا التوجيهين تم إنشاؤهما من نفس مساحة اسم `attacker` غير الموثوقة. يتم رفض توجيه التحكم ذو الخلفية الواحدة، بينما يتم حل توجيه الخلفية الموزونة المختلطة بنجاح وكشف `api@internal`.
---
## الملفات
- `external-repro-kind/kind-config.yaml` - تكوين كتلة kind محلية تكشف Traefik على `127.0.0.1:18080`
- `external-repro-kind/traefik-v371.yaml` - نشر Traefik الضعيف و GatewayClass
- `external-repro-kind/gateway-exploit.yaml` - مساحة الاسم و Gateway و ReferenceGrant وتوجيه التحكم وتوجيه التجاوز
- `external-repro-kind/run-kind-repro.sh` - نص إعادة الإنتاج الشامل محليًا
---
## الإجراءات التصحيحية
قم بترقية Traefik إلى الإصدار المصحح.
- في السلسلة v3.6: v3.6.21 أو ما بعده
- في السلسلة v3.7: v3.7.5 أو ما بعده
يجب على المشغلين أيضًا مراجعة موارد `ReferenceGrant` الحالية من Gateway API. لا تمنح مساحات أسماء غير موثوقة إمكانية الوصول إلى مراجع `TraefikService` عبر المزود إلا إذا كان التفويض مقصودًا صراحةً.
---
## معلومات مرجعية
- [استشارة أمان Traefik GHSA-3g6v-2r68-prfc](https://github.com/traefik/traefik/security/advisories/GHSA-3g6v-2r68-prfc)
- [إصدار Traefik v3.6.21](https://github.com/traefik/traefik/releases/tag/v3.6.21)
- [إصدار Traefik v3.7.5](https://github.com/traefik/traefik/releases/tag/v3.7.5)