
Laboratorio proof-of-concept e client di exploit per CVE-2026-59358, che dimostra il riutilizzo da parte di Cloud Foundry UAA di un token PKCE utente come Bearer client_credentials per generare token client privilegiati.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-59358
Classe: Privilegio residuo Portata: Remota
Cloud Foundry UAA v79.6.0 - VMware by Broadcom / Cloud Foundry Foundation
Sono @abraxas_null. Laboratorio su loopback. Il client è CVE-2026-59358-Abraxas-Labs.py.
Un token di accesso utente PKCE pubblico viene accettato come autenticazione client Bearer su grant_type=client_credentials per lo stesso client a doppia concessione. UAA conia un token solo-client con le autorità di quel client (clients.write in questo laboratorio). Il token utente stesso restituisce 403 su POST /oauth/clients. Il token residuo crea un nuovo client OAuth. Laboratorio indipendente della CVE pubblicata. Credito: Minseong Kim (mak3bread).
| CVE | CVE-2026-59358 · CVE.org |
| Classe | Privilegio residuo (token utente riutilizzato come Bearer client_credentials; non RCE) |
| Portata | Remota (token di accesso utente dell'attaccante) |
| CWE | CWE-287 |
| CVSS | Alto: 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 |
| Prodotto | Cloud Foundry UAA |
| Affetto | UAA dalla v3.7.0 alla v79.6.0; cf-deployment fino alla v60.4.0 |
| Corretto | UAA v79.7.0; cf-deployment v60.5.0 |
| Auth | autenticato (token PKCE utente dell'attaccante) |
| Licenza | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
Accedi tramite un client OAuth pubblico che elenca anche client_credentials. Riproduci quel JWT utente come Authorization: Bearer su POST /oauth/token con grant_type=client_credentials. UAA restituisce un token solo-client con le autorità del client. Se queste includono clients.write, crea nuovi client OAuth con autorità scelte dall'attaccante. Nessun client secret richiesto.
Il token utente non può amministrare i client da solo. Il residuo è il controllo dell'endpoint token che tratta qualsiasi token di accesso valido il cui client_id corrisponda come autenticazione client.
L'impatto scala con le autorità di quel client. La combinazione (flusso utente pubblico più client_credentials su un unico client_id) non è predefinita.
Cloud Foundry ha pubblicato CVE-2026-59358 il 5 ottobre 2026. Ho fissato l'ultima versione affetta cfidentity/uaa:v79.6.0, ho avviato un client pubblico dedicato a doppia concessione labpub e ho eseguito il flusso PKCE come l'utente standard marissa. Controllo negativo: il token utente su POST /oauth/clients restituisce 403. Attacco: lo stesso Bearer su client_credentials restituisce 200, poi 201 creando labwit-CVE-2026-59358-WITNESS.
Vicoli ciechi già registrati: fissare la v79.7.0 (corretta); raggiungere /oauth/token senza il context path /uaa; mescolare localhost e 127.0.0.1 in issuer e redirect; usare il client standard login (senza clients.write); password grant invece di PKCE; inviare Basic client_id:secret più il Bearer utente (quella è autenticazione client legittima).
HTTP 18258 su loopback. Immagine docker.io/cfidentity/uaa:v79.6.0 (linux/amd64). Progetto Compose cve-2026-59358. ./run.sh.
Target solo 127.0.0.1:18258 (o il loopback su cui hai fatto il bind).
python3 CVE-2026-59358-Abraxas-Labs.py
Questo esegue il chdir in lab/ e lancia run.sh (compose up, attesa di /uaa/info, poi poc.py).
Witness: il JWT client_credentials coniato porta clients.write e POST /oauth/clients restituisce 201 per labwit-CVE-2026-59358-WITNESS. Il token utente sullo stesso endpoint restituisce 403.
SUCCESS CVE-2026-59358 grant=client_credentials clients.write create-http=201 id=labwit-CVE-2026-59358-WITNESS CVE-2026-59358-WITNESS
Modi per perdere tempo senza imparare nulla:
v79.7.0 o successivaAggiorna UAA alla v79.7.0 o successiva, oppure cf-deployment alla v60.5.0. Fino ad allora, non mettere una concessione pubblica rivolta all'utente e client_credentials sullo stesso client_id, e mantieni clients.write su client dedicati non pubblici.
Riesegui CVE-2026-59358-Abraxas-Labs.py contro la build corretta: il Bearer utente su client_credentials deve rimanere 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. Vedi LICENSE.
Il client comunica con il loopback. Usarlo contro sistemi che non possiedi non è autorizzato da Abraxas Labs. Nessuna garanzia.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]