
针对 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 by Broadcom / Cloud Foundry Foundation
我是 @abraxas_null。回环实验环境。客户端为 CVE-2026-59358-Abraxas-Labs.py。
对于同一个双授权客户端,一个公开的 PKCE 用户访问令牌被接受为 grant_type=client_credentials 上的 Bearer 客户端认证。UAA 会使用该客户端的权限(本实验环境中为 clients.write)签发一个仅客户端令牌。用户令牌本身在 POST /oauth/clients 上返回 403。这个残留令牌创建了一个新的 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 |
通过一个同时列出 client_credentials 的公开 OAuth 客户端登录。将该用户 JWT 作为 Authorization: Bearer 重放到 POST /oauth/token,并带上 grant_type=client_credentials。UAA 会返回一个带有该客户端权限的仅客户端令牌。如果这些权限包含 clients.write,就可以创建具有攻击者所选权限的新 OAuth 客户端。无需客户端密钥。
用户令牌本身无法管理客户端。这个残留问题在于令牌端点检查将任何 client_id 匹配的有效访问令牌视为客户端认证。
影响范围随该客户端的权限而扩大。这种组合(公开用户流程加上同一 client_id 上的 client_credentials)并非默认配置。
Cloud Foundry 于 2026 年 10 月 5 日发布了 CVE-2026-59358。我固定了最后一个受影响版本 cfidentity/uaa:v79.6.0,搭建了一个专用的双授权公开客户端 labpub,并以默认用户 marissa 走完 PKCE 流程。阴性对照:用户令牌在 POST /oauth/clients 上返回 403。攻击:同一个 Bearer 在 client_credentials 上返回 200,随后创建 labwit-CVE-2026-59358-WITNESS 返回 201。
已记录的弯路:固定 v79.7.0(已修复);访问 /oauth/token 时缺少 /uaa 上下文路径;在 issuer 和 redirect 中混用 localhost 与 127.0.0.1;使用默认的 login 客户端(没有 clients.write);使用密码授权而非 PKCE;同时发送 Basic client_id:secret 和用户 Bearer(那是合法的客户端认证)。
回环上的 HTTP 18258。镜像 docker.io/cfidentity/uaa:v79.6.0(linux/amd64)。Compose 项目 cve-2026-59358。./run.sh。
目标仅限 127.0.0.1:18258(或你绑定的回环地址)。
python3 CVE-2026-59358-Abraxas-Labs.py
该命令会切换到 lab/ 目录并运行 run.sh(compose up,等待 /uaa/info,然后运行 poc.py)。
见证:签发的 client_credentials JWT 带有 clients.write,并且 POST /oauth/clients 为 labwit-CVE-2026-59358-WITNESS 返回 201。用户令牌在同一端点上返回 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。
该客户端仅与回环通信。将其用于你并不拥有的系统不在 Abraxas Labs 的授权范围内。不提供任何担保。
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected]