abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-jsonrpc-unrestricted
分類: 権限の残存 (偵察) 到達範囲: ローカル
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
JSON-RPC unix ソケットはデフォルトで restricted_api が false になる。同梱の jsonrpc.yaml はコメントのみであるため、C++ の初期化子が優先される。Linux の SO_PEERCRED バインドモードは 0777 である。rundir の inode に到達できる任意のローカル uid が、トークンなしで接続し、ライブレコード (SSL の キーパス を含む) および接続トラッカーの 5 タプルをダンプできる。書き込みは SO_PEERCRED (euid == 0 または ATS の euid) の背後に留まる。ドキュメントの表には true / 0700 と記載されているが、コードとコメントアウトされた例は false / 0777 である。
これは CVE-2026-58159 (HTTP UDS リスナーの ACL) ではない。TCP/HTTP の JSON-RPC は存在しない。プラグインのロードと設定の書き込みは、外部の uid に対しては引き続き拒否される。
| ID | CVE 未割当 |
| 分類 | 権限の残存 (偵察) |
| 到達範囲 | ローカル (ATS ホスト上の非特権 uid) |
| CWE | CWE-276, CWE-284 |
| CVSS | High: 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| 製品 | Apache Traffic Server |
| 影響を受けるバージョン | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) のデフォルト JSON-RPC unix |
| 認証 | 無制限メソッドには不要。rundir へのローカルファイルシステム到達性。 |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18720 のみ。イメージ ats-10.2.0-lab:local。 |
タグ 10.2.0、コミット b1df7334b39a878971c376da849e8da4984918b6 に固定した。ソースからビルドしたイメージである。
ATS ホスト上のローカル uid (root でも ATS の euid でもない)。RPC 有効。JSON-RPC unix 有効。典型的な rundir は 0755 で ATS 所有。ソケットは $RUNTIMEDIR/jsonrpc20.sock。
| メソッド | シンク | 権限 |
|---|---|---|
uid 10000 で 0777 の jsonrpc20.sock に対して admin_lookup_records | 無制限 JSON-RPC (RpcAdminPubHandlers.cc) | 偵察 (ラボで実証): ライブの proxy.config.proxy_name=ATS-JSONRPC-UNRESTRICTED-WITNESS、SSL キーの パス etc/trafficserver、proxy.config.admin.user_id=nobody。キーのバイト列はレコードに含まれない。 |
get_connection_tracker_info | 同じソケット | 偵察 (ラボで実証): インバウンド/アウトバウンドのトラッカーテーブル (無負荷時は空)。 |
get_server_status、admin_host_get_status、admin_storage_get_device_status、filemanager.get_files_registry | 同じ無制限ビット | 偵察 (推測): ドレイン状態、ホストのマークダウン、キャッシュディスクのパス、絶対設定パス。 |
uid 10000 で admin_config_set_records | SO_PEERCRED で制限 | 完全性: 遮断済み (ラボで実証)。 JSON-RPC エラー 10 Unauthorized、Denied privileged API access for uid=10000。ウィットネスレコードは変更されない。 |
| drain / キャッシュクリア / ストレージオフライン | 制限付きメソッド | 可用性: 遮断済み (外部 uid に対して、ソースより)。 |
ラボで実証 vs 推測: 0777 ソケット、uid 10000 による proxy_name / SSL キーパスの参照、トラッカーテーブル、書き込み拒否、TCP JSON-RPC の不在: ラボ。その他の無制限読み取りメソッド: 同じゲートからの推測。
必要条件: ATS ホスト上のローカル uid。JSON-RPC unix 有効 (デフォルト)。Linux SO_PEERCRED により無制限バインドが 0777 になる。rundir に到達可能 (典型的には 0755)。
| サーフェス | ラボ |
|---|---|
uid 10000 としての admin_config_set_records | 未認可、witness レコードは不変 |
| TCP / HTTP JSON-RPC | 存在せず、HTTP 8080 / 18080 のみ |
RPC 経由のプラグイン .so ロード | SO_PEERCRED |
同一 uid の traffic_ctl | 意図された管理者 |
restricted_api が true の場合のアトミックな umask+bind | 0700、CHANGELOG の修正は維持 |
| CVE-2026-58159 HTTP UDS リスナー ACL | このソケットではない |
rpc.enabled: false でない限り RPC は有効です。存在するのは CommType::UNIX のみです。同梱の jsonrpc.yaml.default はコメントのみです。YAML デコードはキーが存在する場合にのみ restrictedAccessApi を書き込みます。それ以外の場合は次のようになります:
bool restrictedAccessApi{
NON_RESTRICTED_API}; // ... 0700(default) or 0777
NON_RESTRICTED_API は false です(IPCSocketServer.h:128-129)。コメントには 0700 がデフォルトと書かれています。初期化子は無制限の定数です。
バインド(IPCSocketServer.cc:310-342): restricted_api が false かつ SO_PEERCRED の場合 -> モード 0777。ドキュメントの表の最後の文にはデフォルトで true と書かれています。コードとコメントアウトされた例は false に従っています。
誤った方向性: ドキュメントの true をデフォルトとみなすこと。これを RCE と呼ぶこと(書き込みは拒否されます)。CVE-2026-58159 が mgmt JSON-RPC をカバーしているとみなすこと。古い traffic_manager XMLRPC の TCP 残存物を探すこと。
シアター: uid 10000 としての書き込み。オラクルは仕込まれた proxy_name と SSL キーパスの文字列、そして拒否されたセットです。
python3 ats-jsonrpc-unrestricted-Abraxas-Labs.py
または
cd lab
./run.sh
ループバック 127.0.0.1:18720。Compose プロジェクト ats-jsonrpc-unrestricted。イメージ ats-10.2.0-lab:local。ラボ uid 10000。ソケットモード 0777。ウィットネス ATS-JSONRPC-UNRESTRICTED-WITNESS。最終行:
SUCCESS ats-jsonrpc-unrestricted how=uds-0777-unrestricted-jsonrpc uid=10000 sock-mode=0777 lookup-proxy_name=ATS-JSONRPC-UNRESTRICTED-WITNESS ssl-key-path=etc/trafficserver tracker=ok write=unauthorized tcp-jsonrpc=absent ATS-JSONRPC-UNRESTRICTED-WITNESS
restricted_api をデフォルトで true にし、0700 でバインドして、ドキュメントの表と一致させます。コメント化された jsonrpc.yaml の例を整合させます。無制限の読み取りは明示的なオプトインの背後に留めます。書き込みはすでに SO_PEERCRED を要求しているため、開放しません。
b1df7334b39a878971c376da849e8da4984918b6)IPCSocketServer.h restrictedAccessApiIPCSocketServer.cc バインドモード 0777RpcAdminPubHandlers.ccjsonrpc.yaml.default