
Laboratório proof-of-concept e cliente de exploit para CVE-2026-59358, demonstrando o reuso do UAA do Cloud Foundry de um token PKCE de usuário como Bearer client_credentials para emitir tokens de cliente privilegiados.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-59358
Classe: Privilégio remanescente Alcance: Remoto
Cloud Foundry UAA v79.6.0 - VMware by Broadcom / Cloud Foundry Foundation
Sou @abraxas_null. Laboratório em loopback. O cliente é CVE-2026-59358-Abraxas-Labs.py.
Um token de acesso de usuário PKCE público é aceito como autenticação de cliente Bearer em grant_type=client_credentials para o mesmo cliente de concessão dupla. O UAA emite um token somente de cliente com as autoridades desse cliente (clients.write neste laboratório). O próprio token de usuário retorna 403 em POST /oauth/clients. O token remanescente cria um novo cliente OAuth. Laboratório independente da CVE publicada. Crédito: Minseong Kim (mak3bread).
| CVE | CVE-2026-59358 · CVE.org |
| Classe | Privilégio remanescente (token de usuário reutilizado como Bearer de client_credentials; não é RCE) |
| Alcance | Remoto (token de acesso de usuário do próprio atacante) |
| 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 |
| Produto | Cloud Foundry UAA |
| Afetado | UAA v3.7.0 até v79.6.0; cf-deployment até v60.4.0 |
| Corrigido | UAA v79.7.0; cf-deployment v60.5.0 |
| Autenticação | autenticado (token PKCE de usuário do próprio atacante) |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | somente 127.0.0.1 |
Faça login por meio de um cliente OAuth público que também liste client_credentials. Reenvie esse JWT de usuário como Authorization: Bearer em POST /oauth/token com grant_type=client_credentials. O UAA retorna um token somente de cliente com as autoridades do cliente. Se essas incluírem clients.write, crie novos clientes OAuth com autoridades escolhidas pelo atacante. Nenhum segredo de cliente é necessário.
O token de usuário não consegue administrar clientes por si só. O remanescente é a verificação do endpoint de token tratando qualquer token de acesso válido cujo client_id corresponda como autenticação de cliente.
O impacto escala com as autoridades desse cliente. A combinação (fluxo público de usuário mais client_credentials em um mesmo client_id) não é padrão.
A Cloud Foundry publicou a CVE-2026-59358 em 5 de outubro de 2026. Fixei a última versão afetada cfidentity/uaa:v79.6.0, levantei um cliente público dedicado de concessão dupla labpub e percorri o PKCE como o usuário padrão marissa. Controle negativo: token de usuário em POST /oauth/clients retorna 403. Ataque: o mesmo Bearer em client_credentials retorna 200, depois 201 criando labwit-CVE-2026-59358-WITNESS.
Caminhos errados já registrados: fixar a v79.7.0 (corrigida); acessar /oauth/token sem o caminho de contexto /uaa; misturar localhost e 127.0.0.1 no issuer e no redirect; usar o cliente padrão login (sem clients.write); concessão por senha em vez de PKCE; enviar Basic client_id:secret mais o Bearer de usuário (isso é autenticação de cliente legítima).
HTTP 18258 em loopback. Imagem docker.io/cfidentity/uaa:v79.6.0 (linux/amd64). Projeto Compose cve-2026-59358. ./run.sh.
Alvo somente 127.0.0.1:18258 (ou o loopback que você vinculou).
python3 CVE-2026-59358-Abraxas-Labs.py
Isso faz chdir para lab/ e executa run.sh (compose up, aguarda /uaa/info, depois poc.py).
Testemunha: o JWT client_credentials emitido carrega clients.write e POST /oauth/clients retorna 201 para labwit-CVE-2026-59358-WITNESS. O token de usuário no mesmo endpoint retorna 403.
SUCCESS CVE-2026-59358 grant=client_credentials clients.write create-http=201 id=labwit-CVE-2026-59358-WITNESS CVE-2026-59358-WITNESS
Formas de perder sem aprender nada:
v79.7.0 ou posteriorAtualize o UAA para v79.7.0 ou mais recente, ou o cf-deployment para v60.5.0. Até então, não coloque uma concessão pública voltada ao usuário e client_credentials no mesmo client_id, e mantenha clients.write em clientes dedicados não públicos.
Execute novamente CVE-2026-59358-Abraxas-Labs.py contra a build corrigida: o Bearer de usuário em client_credentials deve permanecer não-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. Consulte LICENSE.
O cliente se comunica com o loopback. Usá-lo contra sistemas que você não possui não é autorizado pela Abraxas Labs. Sem garantia.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]