
Lab de preuve de concept et client d'exploit pour CVE-2026-59358, démontrant la réutilisation par Cloud Foundry UAA d'un jeton PKCE utilisateur comme Bearer client_credentials pour générer des jetons client privilégiés.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-59358
Classe : Résidu de privilège Portée : Distante
Cloud Foundry UAA v79.6.0 - VMware by Broadcom / Cloud Foundry Foundation
Je suis @abraxas_null. Laboratoire en loopback. Le client est CVE-2026-59358-Abraxas-Labs.py.
Un jeton d'accès utilisateur PKCE public est accepté comme authentification client Bearer sur grant_type=client_credentials pour le même client à double grant. UAA émet un jeton client-only avec les autorités de ce client (clients.write dans ce laboratoire). Le jeton utilisateur lui-même renvoie 403 sur POST /oauth/clients. Le jeton résiduel crée un nouveau client OAuth. Laboratoire indépendant de la CVE publiée. Crédit : Minseong Kim (mak3bread).
| CVE | CVE-2026-59358 · CVE.org |
| Classe | Résidu de privilège (jeton utilisateur réutilisé comme Bearer client_credentials ; pas de RCE) |
| Portée | Distante (jeton d'accès utilisateur de l'attaquant) |
| CWE | CWE-287 |
| CVSS | Élevé : 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 |
| Produit | Cloud Foundry UAA |
| Affecté | UAA v3.7.0 à v79.6.0 ; cf-deployment jusqu'à v60.4.0 |
| Corrigé | UAA v79.7.0 ; cf-deployment v60.5.0 |
| Auth | authentifié (jeton PKCE utilisateur de l'attaquant) |
| Licence | GNU Affero GPL v3.0 |
| Laboratoire | 127.0.0.1 uniquement |
Se connecter via un client OAuth public qui liste également client_credentials. Rejouer ce JWT utilisateur comme Authorization: Bearer sur POST /oauth/token avec grant_type=client_credentials. UAA renvoie un jeton client-only avec les autorités du client. Si celles-ci incluent clients.write, créer de nouveaux clients OAuth avec des autorités choisies par l'attaquant. Aucun secret client requis.
Le jeton utilisateur ne peut pas administrer les clients à lui seul. Le résidu est la vérification du point de terminaison de jeton qui traite tout jeton d'accès valide dont le client_id correspond comme une authentification client.
L'impact dépend des autorités de ce client. La combinaison (flux utilisateur public plus client_credentials sur un même client_id) n'est pas la configuration par défaut.
Cloud Foundry a publié CVE-2026-59358 le 5 octobre 2026. J'ai épinglé la dernière version affectée cfidentity/uaa:v79.6.0, monté un client public dédié à double grant labpub, et parcouru le flux PKCE avec l'utilisateur standard marissa. Contrôle négatif : le jeton utilisateur sur POST /oauth/clients renvoie 403. Attaque : le même Bearer sur client_credentials renvoie 200, puis 201 en créant labwit-CVE-2026-59358-WITNESS.
Fausses pistes déjà consignées : épingler v79.7.0 (corrigée) ; atteindre /oauth/token sans le chemin de contexte /uaa ; mélanger localhost et 127.0.0.1 dans l'issuer et la redirection ; utiliser le client standard login (sans clients.write) ; le grant password au lieu de PKCE ; envoyer Basic client_id:secret plus le Bearer utilisateur (c'est une authentification client légitime).
HTTP 18258 en loopback. Image docker.io/cfidentity/uaa:v79.6.0 (linux/amd64). Projet Compose cve-2026-59358. ./run.sh.
Cible uniquement 127.0.0.1:18258 (ou le loopback que vous avez lié).
python3 CVE-2026-59358-Abraxas-Labs.py
Cela fait un chdir dans lab/ et exécute run.sh (compose up, attente de /uaa/info, puis poc.py).
Preuve : le JWT client_credentials émis porte clients.write et POST /oauth/clients renvoie 201 pour labwit-CVE-2026-59358-WITNESS. Le jeton utilisateur sur le même point de terminaison renvoie 403.
SUCCESS CVE-2026-59358 grant=client_credentials clients.write create-http=201 id=labwit-CVE-2026-59358-WITNESS CVE-2026-59358-WITNESS
Façons d'échouer sans rien apprendre :
v79.7.0 ou ultérieureMettre à niveau UAA vers v79.7.0 ou plus récent, ou cf-deployment vers v60.5.0. En attendant, ne pas placer un grant public destiné aux utilisateurs et client_credentials sur le même client_id, et conserver clients.write sur des clients dédiés non publics.
Relancer CVE-2026-59358-Abraxas-Labs.py contre la version corrigée : le Bearer utilisateur sur client_credentials doit rester non-200.
hub.docker.com/r/cfidentity/uaa tag v79.6.0
Abraxas Labs : abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]
GNU Affero GPL v3.0. Voir LICENSE.
Le client communique en loopback. L'utiliser contre des systèmes que vous ne possédez pas n'est pas autorisé par Abraxas Labs. Aucune garantie.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]