
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-authproxy-prefix
分類: 権限の残存 到達範囲: リモート
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
authproxy の --forward-header-prefix は、2xx を返した認証ヘルパーからクライアントリクエストへ識別情報フィールドをコピーします。HttpSetMimeHeader はその名前の最初のフィールドのみを検索して上書きします。クライアントによる追加のコピーは残存します。同じヘッダーを last-wins で扱うオリジンは、クライアントの値を識別情報として扱います。
標準の plugin.config は空です。この残存には、プレフィックスオプション付きでリマップにプラグインを読み込む必要があります。クライアントは依然として認証を通過する必要があります (2xx)。認証 403 はオリジンに到達しません。
| ID | CVE 未割当 |
| 分類 | 権限の残存 (識別ヘッダーの植え付け) |
| 到達範囲 | リモート (--forward-header-prefix 付き authproxy 経由の HTTP) |
| CWE | CWE-444, CWE-863 |
| CVSS | High: 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 を得ているクライアント。プラグイン有効。 |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18760 のみ |
公開タグ 10.2.0 のピール b1df7334 を固定しました。ラボはループバック上のソースビルドによる ats-10.2.0-lab:local リバースプロキシです。認証ヘルパーは 2xx と 403 を返します。オリジンは X-Auth-User を last-wins で扱います。
--forward-header-prefix=X-Auth- 付きで authproxy.so を読み込む ATS リマップに到達します。ヘルパーが 2xx として受け入れるリクエストに、2 行の X-Auth-User を送信します。
| 手法 | シンク | 権限 |
|---|---|---|
2xx 認証ヘルパー通過後に X-Auth-User を重複させる | StateAuthorized オーバーレイ、続いて HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102) | 完全性 (ラボ実証済み): オリジンは last-wins。ラボ: X-Auth-User-0: realuser に加えて X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS。CONTROL の none/単一は REALUSER-ONLY のまま。 |
| 同じ植え付け | そのヘッダーをキーとするオリジンの ACL / ユーザー検索 | 偵察 (推測): 植え付けられた識別情報がオリジンで読み取れるものすべて。ヒープダンプではない。ATS 設定でもない。 |
| 同じ重複を伴う認証ヘルパーの 403 | StateUnauthorized、オリジンは再有効化されない | クローズ (ラボ実証済み): オリジンへの到達は変化なし。クライアントは 403。ウィットネスはボディに含まれない。 |
ラボ実証済み vs 推測: 重複の last-wins、単一の上書き、none、および 403 が到達しないことはラボで実証済みです。植え付け後のオリジン権限は last-wins の識別情報から推測したものです。
必要条件: --forward-header-prefix 付きの authproxy.so。クライアントは認証を通過する必要があります (2xx)。オリジンがそれらのプレフィックスヘッダーを識別情報として扱う必要があります (このオプションが存在する理由)。デフォルトの plugin.config では読み込まれません。
| サーフェス | ラボ |
|---|---|
| クライアントプレフィックスヘッダーなし | CONTROL none: オリジン REALUSER-ONLY |
| 単一クライアントプレフィックス | CONTROL single: 最初のフィールドが上書きされる; witness は存続しない |
| 認証ヘルパー 403 | オリジンに到達しない (control-403=yes) |
| プラグイン未ロード | 残存物は適用されない |
ホップバイホップ / @ ヘッダー | プラグインフック前に除去される (CVE-2026-33267) |
| 空の認証レスポンスヘッダーリスト | もはやアサートしない (changelog) |
certifier SNI / url_sig C= | このピンではクローズ済み (CVE-2026-58162 / 58181) |
CVE-2026-58162 ではない。uri_signing では SHA-256/SHA-512 のみ。url_sig C= の区切り文字欠落は依然として拒否される。
python3 ats-authproxy-prefix-Abraxas-Labs.py
または
cd lab
./run.sh
ループバック 127.0.0.1:18760(オリジン 18761、認証ヘルパー 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 が、origin_server_auth の set_header や access_control の setHeader が既に行っているのと同じ方法で、TSMimeHdrFieldNextDup の余分なフィールドを破棄するようにします。
それまでの間は、オリジンが先勝ち(first-wins)でない限り、またはオリジン側で重複するプレフィックス名を拒否しない限り、オリジン ACL を authproxy のプレフィックスヘッダーに向けないでください。
b1df7334b39a878971c376da849e8da4984918b6)plugins/authproxy/authproxy.cc StateAuthorizedplugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeaderorigin_server_auth.cc の set_header は NextDup を走査する