
Apache Traffic Server 10.2.0 — высокий уровень — удалённо — падение — UAF в Cripts From/To URL
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-cripts-rri-uaf
Класс: Crash Доступ: Удалённый
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
Cripts Remap::From / To URL по-прежнему повторно читают стековый TSRemapRequestInfo после возврата TSRemapDoRemap. RemapPlugins размещает rri в стеке. Контекст сохраняет указатель. reset() уничтожает unique_ptr; последующий Get() / Host::GetSV передаёт мёртвый RRI в TSUrlHostGet. Fatal: sdk_sanity_check_mbuffer, затем SIGABRT.
Client::URL был исправлен так, чтобы этого не делать. Lua очищал rri после remap. Cripts From/To этого не делали. По умолчанию ENABLE_CRIPTS выключен. На стандартном remap cripts отсутствуют.
| ID | CVE пока нет |
| Класс | Crash (UAF стекового RRI) |
| Доступ | Удалённый (неаутентифицированный HTTP через cript From/To после remap) |
| CWE | CWE-416 |
| CVSS | High: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| Продукт | Apache Traffic Server |
| Затронуто | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) Cripts From/To URL после DoRemap |
| Аутентификация | нет |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1:18780 |
Я зафиксировал публичный тег 10.2.0 peel b1df7334. Лаборатория — это сборка из исходников RelWithDebInfo с включёнными Cripts. CONTROL Client::URL 200, процесс остался жив. POC Host ats-poc SIGABRT, код выхода 134.
Вызвать remap cript, который обращается к From/To URL после do_remap (do_send_response в лаборатории). Достаточно неаутентифицированного GET.
| Метод | Точка сбоя | Привилегия |
|---|---|---|
Неаутентифицированный GET Host ats-poc через cript do_send_response, который вызывает Remap::From::URL::Get / To::URL::Get | стековый TSRemapRequestInfo (RemapPlugins.cc:41-65); разыменование в rriValid() (Context.hpp:70-73); _initialize (Urls.cc:525-561) | Доступность (доказано в лаборатории): SIGABRT, код выхода 134, сброс соединения. traffic_server завершается. |
| То же | Фатальный abort в SDK | Целостность: не контроль RIP. Класс остаётся Crash. Лаборатория. |
Доказано в лаборатории vs предполагается: завершение процесса — лаборатория (RelWithDebInfo SIGABRT). Повреждение памяти до RIP не заявляется.
Требуется: собранные Cripts (ENABLE_CRIPTS=ON) и remap cript, который обращается к From/To URL после DoRemap. По умолчанию: нет.
| Поверхность | Лаборатория |
|---|---|
| Только CONTROL Client::URL | 200, процесс остался жив |
| Изоляция File::Path::Rebase | закрыта на этой фиксации (CVE-2026-58177 issue 32) |
| Geo IPEndpoint sockaddr | закрыта |
| Abort по ключу запроса | закрыт (отсутствующий хеш пропускается) |
| Глобальные cripts | rri == nullptr; rriValid() безопасно завершается без разыменования |
| OOB экземпляра / DoRemap-after-Release | закрыто (CVE-2026-58177) |
Стандартный remap / ENABLE_CRIPTS выключен | остаточная проблема не применима |
Не CVE-2026-58177 в раскрытом виде. Lua очищал rri после remap; Cripts From/To этого не делали.
python3 ats-cripts-rri-uaf-Abraxas-Labs.py
или
cd lab
./run.sh
Loopback 127.0.0.1:18780. Проект Compose ats-cripts-rri-uaf. Образ RelWithDebInfo. Свидетель ATS-CRIPTS-RRI-UAF-WITNESS. Последняя строка:
SUCCESS ats-cripts-rri-uaf control-http=200 control-alive=yes poc-crash=sigabrt poc-http=None reset=1 ATS-CRIPTS-RRI-UAF-WITNESS
Обнуляйте rri в Context при возврате TSRemapDoRemap, как это делает Lua. Или обрабатывайте From/To URL как Client::URL: не выполняйте повторную инициализацию из RRI в последующих хуках. rriValid() не должен разыменовывать мёртвую структуру. Копируйте mapFromUrl / mapToUrl в собственные MLoc во время do_remap, если From/To после remap является функциональностью.
До тех пор не вычисляйте %{FROM-URL:...} / %{TO-URL:...} (и не заимствуйте эти объекты URL) в do_post_remap / do_send_request / do_read_response / do_send_response / do_cache_lookup.
b1df7334b39a878971c376da849e8da4984918b6)src/proxy/http/remap/RemapPlugins.ccinclude/cripts/Epilogue.hppsrc/cripts/Urls.cc Remap::From::URL / To::URLinclude/cripts/Context.hpp rriValid../, Geo sockaddr, прерывание по ключу запроса, Client::URL MLoc