
مختبر إثبات مفهوم وعميل استغلال لـ CVE-2026-59358، يوضح إعادة استخدام Cloud Foundry UAA لرمز PKCE الخاص بالمستخدم كـ client_credentials Bearer لإصدار رموز عميل ذات صلاحيات.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-59358
الفئة: صلاحية متبقية الوصول: عن بُعد
Cloud Foundry UAA v79.6.0 - VMware من Broadcom / Cloud Foundry Foundation
أنا @abraxas_null. مختبر loopback. العميل هو CVE-2026-59358-Abraxas-Labs.py.
يُقبل رمز وصول مستخدم PKCE عام كمصادقة عميل Bearer على grant_type=client_credentials لنفس عميل المنح المزدوج. يُصدر UAA رمزًا خاصًا بالعميل فقط بصلاحيات ذلك العميل (clients.write في هذا المختبر). رمز المستخدم نفسه يُرجع 403 على POST /oauth/clients. الرمز المتبقي يُنشئ عميل OAuth جديدًا. مختبر مستقل لـ CVE المنشور. الفضل: Minseong Kim (mak3bread).
| CVE | CVE-2026-59358 · CVE.org |
| الفئة | صلاحية متبقية (إعادة استخدام رمز المستخدم كـ client_credentials Bearer؛ ليس RCE) |
| الوصول | عن بُعد (رمز وصول المستخدم الخاص بالمهاجم) |
| CWE | CWE-287 |
| CVSS | عالٍ: 7.6 CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N |
| المنتج | Cloud Foundry UAA |
| المتأثر | UAA v3.7.0 حتى v79.6.0؛ cf-deployment حتى v60.4.0 |
| المُرقَّع | UAA v79.7.0؛ cf-deployment v60.5.0 |
| المصادقة | موثَّق (رمز PKCE الخاص بمستخدم المهاجم) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
سجّل الدخول عبر عميل OAuth عام يُدرج أيضًا client_credentials. أعد تشغيل رمز JWT الخاص بالمستخدم كـ Authorization: Bearer على POST /oauth/token مع grant_type=client_credentials. يُرجع UAA رمزًا خاصًا بالعميل فقط بصلاحيات العميل. إذا تضمّنت تلك الصلاحيات clients.write، أنشئ عملاء OAuth جددًا بصلاحيات يختارها المهاجم. لا حاجة إلى سر العميل.
لا يستطيع رمز المستخدم إدارة العملاء بمفرده. المتبقي هو فحص نقطة نهاية الرمز الذي يعامل أي رمز وصول صالح يتطابق client_id الخاص به كمصادقة عميل.
يتدرّج التأثير مع صلاحيات ذلك العميل. التركيبة (تدفق مستخدم عام بالإضافة إلى client_credentials على client_id واحد) ليست افتراضية.
نشرت Cloud Foundry CVE-2026-59358 في 5 أكتوبر 2026. ثبّتُ آخر إصدار متأثر cfidentity/uaa:v79.6.0، وأقمت عميلًا عامًا مخصصًا للمنح المزدوج labpub، وسلكت مسار PKCE كمستخدم جاهز marissa. الضبط السلبي: رمز المستخدم على POST /oauth/clients يُرجع 403. الهجوم: نفس Bearer على client_credentials يُرجع 200، ثم 201 عند إنشاء labwit-CVE-2026-59358-WITNESS.
المنعطفات الخاطئة المسجّلة مسبقًا: تثبيت v79.7.0 (المُرقَّع)؛ الوصول إلى /oauth/token بدون مسار السياق /uaa؛ خلط localhost و127.0.0.1 في المُصدر وإعادة التوجيه؛ استخدام عميل login الجاهز (بدون clients.write)؛ منح كلمة المرور بدلًا من PKCE؛ إرسال Basic client_id:secret بالإضافة إلى Bearer الخاص بالمستخدم (تلك مصادقة عميل مشروعة).
HTTP 18258 على loopback. الصورة docker.io/cfidentity/uaa:v79.6.0 (linux/amd64). مشروع Compose cve-2026-59358. ./run.sh.
استهدف فقط 127.0.0.1:18258 (أو الـ loopback الذي ربطته).
python3 CVE-2026-59358-Abraxas-Labs.py
يقوم ذلك بتغيير الدليل إلى lab/ وتشغيل run.sh (compose up، انتظار /uaa/info، ثم poc.py).
الدليل: رمز JWT المُصدَر عبر client_credentials يحمل clients.write ويُرجع POST /oauth/clients الرمز 201 لـ labwit-CVE-2026-59358-WITNESS. رمز المستخدم على نفس نقطة النهاية يُرجع 403.
SUCCESS CVE-2026-59358 grant=client_credentials clients.write create-http=201 id=labwit-CVE-2026-59358-WITNESS CVE-2026-59358-WITNESS
طرق للفشل دون تعلّم أي شيء:
v79.7.0 أو أحدثقم بترقية UAA إلى v79.7.0 أو أحدث، أو cf-deployment إلى v60.5.0. حتى ذلك الحين، لا تضع منحًا عامًا موجهًا للمستخدم وclient_credentials على نفس client_id، واحتفظ بـ clients.write على عملاء مخصصين غير عامين.
أعد تشغيل CVE-2026-59358-Abraxas-Labs.py مقابل البناء المُرقَّع: يجب أن يبقى Bearer الخاص بالمستخدم على client_credentials غير 200.
hub.docker.com/r/cfidentity/uaa وسم v79.6.0
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]
GNU Affero GPL v3.0. انظر LICENSE.
يتواصل العميل مع loopback. استخدامه ضد أنظمة لا تملكها غير مُصرَّح به من Abraxas Labs. لا ضمان.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]