
Лаборатория proof-of-concept и эксплойт-клиент для CVE-2026-59358, демонстрирующий повторное использование в Cloud Foundry UAA пользовательского PKCE-токена в качестве Bearer для client_credentials с целью выпуска привилегированных клиентских токенов.
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. Loopback-лаборатория. Клиент — CVE-2026-59358-Abraxas-Labs.py.
Публичный пользовательский access-токен PKCE принимается как Bearer-аутентификация клиента при grant_type=client_credentials для того же клиента с двойным grant. UAA выпускает токен только для клиента с полномочиями этого клиента (clients.write в этой лаборатории). Сам пользовательский токен получает 403 на POST /oauth/clients. Оставшийся токен создаёт нового OAuth-клиента. Независимая лаборатория по опубликованной CVE. Благодарность: Minseong Kim (mak3bread).
| CVE | CVE-2026-59358 · CVE.org |
| Класс | Остаточные привилегии (пользовательский токен переиспользуется как client_credentials Bearer; не RCE) |
| Доступ | Удалённый (собственный пользовательский access-токен атакующего) |
| CWE | CWE-287 |
| CVSS | High: 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-клиентов с выбранными атакующим полномочиями. Секрет клиента не требуется.
Пользовательский токен сам по себе не может администрировать клиентов. Остаток — это проверка на token-endpoint, которая трактует любой валидный access-токен с совпадающим client_id как аутентификацию клиента.
Влияние масштабируется с полномочиями этого клиента. Комбинация (публичный пользовательский поток плюс client_credentials на одном client_id) не является конфигурацией по умолчанию.
Cloud Foundry опубликовала CVE-2026-59358 5 октября 2026 года. Я зафиксировал последнюю затронутую версию cfidentity/uaa:v79.6.0, поднял выделенный публичный клиент с двойным grant 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 в issuer и redirect; использование штатного клиента login (без clients.write); password grant вместо 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
Это выполняет chdir в lab/ и запускает run.sh (compose up, ожидание /uaa/info, затем poc.py).
Свидетельство: выпущенный client_credentials JWT несёт clients.write, и POST /oauth/clients возвращает 201 для labwit-CVE-2026-59358-WITNESS. Пользовательский токен на том же endpoint даёт 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. До этого не размещайте публичный пользовательский grant и 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]