abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-esi-unix-recvport
クラス: SSRF 到達範囲: リモート
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
ESI FetchSM PluginVC が宛先ポート 0 を報告する。Remap はポート 0 を UDS として扱い、インクルードのスキームを http+unix に書き換えるため、UDS リスナー専用の map_with_recv_port http+unix:// ルールに一致してしまう。すると一見公開されているように見える http://www.example.com/secret の esi:include が unix ソケットのオリジンに到達する。TCP の GET /secret は TCP マップのままである。unix recv-port マップを伴わない CONTROL では TCP オリジンがインライン化される(witness なし)。インクルードスキーム http+unix 自体は 2026 年 7 月のバリデータでは BAD_SCHEME となる。
典型的な esi.so と 1 つの map だけではこれは発生しない。ESI に加えて少なくとも 1 行の map_with_recv_port http+unix:// が必要である。デフォルトは remap_required: 1 および number_of_redirections: 0。
これは CVE-2026-58178(プライベートリテラル、file://、ネストされたコメント、深さ上限はクローズ済み)ではない。
| ID | CVE 未割当 |
| クラス | SSRF |
| 到達範囲 | リモート(ESI vhost への未認証 HTTP) |
| CWE | CWE-918 |
| CVSS | High: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 製品 | Apache Traffic Server |
| 影響を受けるバージョン | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) ESI と map_with_recv_port http+unix |
| 認証 | なし。ESI プラグイン。recv-port unix マップ。 |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18750 / 18751 のみ。イメージ ats-10.2.0-lab:local。 |
タグ 10.2.0、コミット b1df7334b39a878971c376da849e8da4984918b6 を固定した。ソースからビルドしたイメージ。
リマップに map_with_recv_port http+unix:// がある ESI vhost への未認証 HTTP。攻撃者が影響を与えられるインクルード src(侵害されたオリジン、保存された ESI、または $(HTTP_HEADER{...}))。
| 手法 | シンク | 権限 |
|---|---|---|
未認証 GET /page の ESI インクルード http://www.example.com/secret | FetchSM の宛先ポート 0 が map_with_recv_port http+unix://www.example.com/ に一致(RemapProcessor.cc:87-114、PluginVC.h:274-278) | 偵察 / SSRF(ラボで実証済み): クライアントボディに UDS オリジンからの ATS-ESI-UNIX-RECVPORT-WITNESS がインライン化された。 |
| 同上 | 一次書き込み / シェル | 完全性: なし。 一次書き込みなし。シェルなし。 |
unix recv-port マップなしの CONTROL GET /page | TCP オリジンのインクルード | クローズ(ラボで実証済み): TCP-ORIGIN-OK をインライン化、witness なし。 |
poc vhost 上の TCP クライアント GET /secret | TCP マップ | クローズ(ラボで実証済み): TCP-ORIGIN-OK、witness なし。 |
ラボで実証済み vs 推測: コントロールで witness なし、poc ページで witness あり、poc の TCP /secret で witness なし: ラボ。保存された ESI やヘッダー展開を介して src に影響を与えることは、文書化された ESI の信頼モデルであり、ここでは再実証していない。ラボのインクルードは /page 上の静的な http://www.example.com/secret である。
必要条件: ESI プラグインと map_with_recv_port http+unix。デフォルトは remap_required: 1。number_of_redirections: 0。
| サーフェス | ラボ |
|---|---|
| unix recv-port マップなしの CONTROL | control-no-witness=yes、TCP-ORIGIN-OK をインライン化 |
TCP クライアント GET /secret | poc-tcp-secret-no-witness=yes |
スキーム http+unix を含める | バリデータ BAD_SCHEME |
file://、プライベートリテラル、ネストされたコメント、深さ上限 | CVE-2026-58178 クローズ済み |
| DNS なしのホスト名デナイリスト | 文書化済み。remap_required: 1 で無効 |
remap_required: 1 のミス | 404 |
number_of_redirections: 0 | Location フォローオフ |
PluginVCCore は passive_addr_struct をゼロで初期化します。PluginHttpConnectInternal は active_addr(元のクライアント)のみを設定します。FetchSM の HttpSM はパッシブな PluginVC 上で動作します。attach_client_session は netvc->get_local_addr() を client_info.dst_addr にコピーします。パッシブなローカルアドレスはゼロ初期化された構造体です。host_order_port() は 0 になります。
リマップ検索(RemapProcessor.cc:87-114):ポート 0 は UDS を意味します。スキームは http -> http+unix に書き換えられるため、map_with_recv_port http+unix:// がマッチします。ユニットテスト test_RemapRules.cc:237-240 がそのことを文書化しています。
7 月のバリデータは、インクルードスキーム http+unix を拒否します。しかし、宛先ポートが 0 であったために内部リマップホップが unix になった http:// インクルードは拒否しません。
誤った方向性:典型的な esi.so + 単一の map をこの残存物とみなすこと(CONTROL がそうでないことを証明しています);DNS なしのホスト名デナイリストを報告すること(文書化済みで、remap_required=1 では無効);file:// がまだ機能すると主張すること;TCP の /secret が unix マップに従うと期待すること。
茶番:リバースシェル。オラクルは UDS オリジンからのインライン化されたウィットネスであり、TCP の /secret は依然として TCP です。
python3 ats-esi-unix-recvport-Abraxas-Labs.py
または
cd lab
./run.sh
ループバック PoC 127.0.0.1:18750、コントロール 127.0.0.1:18751。Compose プロジェクト ats-esi-unix-recvport。イメージ ats-10.2.0-lab:local。ウィットネス ATS-ESI-UNIX-RECVPORT-WITNESS。最終行:
SUCCESS ats-esi-unix-recvport control-no-witness=yes poc-page-witness=yes poc-tcp-secret-no-witness=yes ATS-ESI-UNIX-RECVPORT-WITNESS
FetchSM PluginVC の宛先ポート 0 を UDS 受信ポートの一致として扱わないでください。実際の UDS リスナーには map_with_recv_port http+unix:// を維持します。http://host/ の ESI インクルードは、そのホストに対して http+unix 受信ポートルールが存在する場合でも、TCP マップ上に留まるべきです。
b1df7334b39a878971c376da849e8da4984918b6)PluginVC.h ゼロ化されたパッシブアドレスPluginHttpConnect.ccRemapProcessor.cc ポート 0 -> http+unixtest_RemapRules.cc