
Apache Traffic Server 10.2.0 — высокий уровень — удалённо — остаточные привилегии — префикс authproxy
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-authproxy-prefix
Класс: Остаточные привилегии Доступ: Удалённый
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
--forward-header-prefix в authproxy копирует поля идентичности из 2xx-ответа auth-хелпера в клиентский запрос. HttpSetMimeHeader находит и перезаписывает только первое поле с таким именем. Дополнительные клиентские копии сохраняются. Origin, применяющий к одному и тому же заголовку правило «последний побеждает», воспринимает клиентское значение как идентичность.
Штатный plugin.config пуст. Для этой остаточной уязвимости нужен плагин на remap с опцией префикса. Клиент всё равно должен пройти аутентификацию (2xx). Ответ 403 от auth никогда не доходит до origin.
| ID | CVE пока нет |
| Класс | Остаточные привилегии (подмена заголовка идентичности) |
| Доступ | Удалённый (HTTP через authproxy с --forward-header-prefix) |
| CWE | CWE-444, CWE-863 |
| CVSS | Высокий: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Продукт | Apache Traffic Server |
| Затронуто | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) оверлей префикса authproxy |
| Аутентификация | клиент, уже получающий 2xx от auth-хелпера. Плагин включён. |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1:18760 |
Я зафиксировал публичный тег 10.2.0 и коммит b1df7334. Лаборатория — это собранный из исходников обратный прокси ats-10.2.0-lab:local на loopback. Auth-хелпер отвечает 2xx или 403. Origin применяет правило «последний побеждает» к X-Auth-User.
Достучаться до remap в ATS, который загружает authproxy.so с --forward-header-prefix=X-Auth-. Отправить две строки X-Auth-User в запросе, который хелпер принимает как 2xx.
| Метод | Точка сброса | Привилегия |
|---|---|---|
Дублирование X-Auth-User после 2xx-ответа auth-хелпера | оверлей StateAuthorized, затем HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102) | Целостность (доказано в лаборатории): origin применяет «последний побеждает». Лаборатория: X-Auth-User-0: realuser плюс X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS. Контрольные случаи none/single остаются REALUSER-ONLY. |
| Та же подмена | ACL origin / поиск пользователя по этому заголовку | Разведка (предположительно): всё, что подменённая идентичность может прочитать на origin. Не дамп кучи. Не конфигурация ATS. |
| 403 от auth-хелпера с теми же дублями | StateUnauthorized; origin не переоткрывается | Закрыто (доказано в лаборатории): обращения к origin не меняются. Клиент получает 403. Свидетель не попадает в тело. |
Доказано в лаборатории vs предположительно: дублирование с правилом «последний побеждает», одиночная перезапись, отсутствие дублей и недостижение origin при 403 — это лабораторные результаты. Привилегия на origin после подмены выводится из идентичности по правилу «последний побеждает».
Требуется: authproxy.so с --forward-header-prefix. Клиент должен пройти аутентификацию (2xx). Origin должен воспринимать эти заголовки с префиксом как идентичность (именно для этого существует опция). Не загружается в штатном plugin.config.
| Поверхность | Лаборатория |
|---|---|
| Нет заголовка клиентского префикса | CONTROL none: origin REALUSER-ONLY |
| Одиночный клиентский префикс | CONTROL single: первое поле перезаписано; свидетель не сохраняется |
| Auth helper 403 | origin не достигнут (control-403=yes) |
| Плагин не загружен | остаток не применяется |
Hop-by-hop / заголовки @ | удаляются до хуков плагина (CVE-2026-33267) |
| Пустой список заголовков auth-response | больше не утверждает (changelog) |
certifier SNI / url_sig C= | закрыто на этом пине (CVE-2026-58162 / 58181) |
Не CVE-2026-58162. Только SHA-256/SHA-512 на uri_signing. Отсутствующий разделитель url_sig C= по-прежнему запрещает.
python3 ats-authproxy-prefix-Abraxas-Labs.py
или
cd lab
./run.sh
Loopback 127.0.0.1:18760 (origin 18761, auth helper 18762). Проект Compose ats-authproxy-prefix. Образ ats-10.2.0-lab:local. Свидетель ATS-AUTHPROXY-PREFIX-WITNESS. Последняя строка:
SUCCESS ats-authproxy-prefix pin=10.2.0 control-none=REALUSER-ONLY control-single=REALUSER-ONLY control-403=yes dup-last-wins=yes ATS-AUTHPROXY-PREFIX-WITNESS
Удалите каждое клиентское поле, имя которого начинается с --forward-header-prefix, перед наложением. HttpRemoveMimeHeader уже перебирает TSMimeHdrFieldFind, пока не останется ни одного (utils.cc:104-114). Используйте его для клиентского запроса с настроенным префиксом, затем выполните установку. Заставьте HttpSetMimeHeader уничтожать лишние TSMimeHdrFieldNextDup так же, как это уже делают set_header в origin_server_auth и setHeader в access_control.
До тех пор не направляйте origin ACL на префиксные заголовки authproxy, если только origin не применяет правило «первый побеждает», или отклоняйте дублирующиеся имена префиксов на origin.
b1df7334b39a878971c376da849e8da4984918b6)plugins/authproxy/authproxy.cc StateAuthorizedplugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeaderorigin_server_auth.cc set_header перебирает NextDup