abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-magick-unsigned
クラス: ファイル書き込み 到達範囲: リモート
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
experimental magick は、plugin.config に RSA キーがない場合、?magick= (percent+base64 の convert argv) から ImageMagick の ConvertImageCommand を実行します。verified = nullptr == key_ です。README には、悪用を避けるためにキーが存在すると記載されています。引数なしで magick.so をロードするのがプラグインのデフォルトです。
plugin.config に RSA 公開鍵を設定した署名付き CONTROL は 403 となり、witness ファイルは生成されません。クラスはファイル書き込みのままです。ディストリビューションの policy.xml は URL/shell デリゲートを無効化していることがよくあります。RCE に誇張しないでください。
| ID | CVE 未割当 |
| クラス | ファイル書き込み (署名なし convert argv) |
| 到達範囲 | リモート (キーなしの magick.so 経由で未認証 HTTP ?magick=) |
| CWE | CWE-347, CWE-73 |
| CVSS | High: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| 製品 | Apache Traffic Server |
| 影響範囲 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) experimental magick 署名なし convert |
| 認証 | なし |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18800 のみ |
公開タグ 10.2.0 の peel b1df7334 に固定しました。ラボはループバック上のソースビルド ats-10.2.0-lab:local リバースプロキシです。署名なし convert -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS。witness ファイルは 161 バイト、所有者は nobody。署名付き CONTROL は 403。
互換性のある Content-Type のオリジン画像に対して、magick.so がロードされ RSA キーがない状態で、未認証の GET /img.png?magick= を実行できます。
| 手法 | シンク | 権限 |
|---|---|---|
未認証 GET /img.png?magick= 署名なし convert -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS | verified = nullptr == key_ (magick.cc:593-609) の後 ConvertImageCommand | 整合性 / ファイル (ラボ実証): 161 バイトの witness ファイル、所有者 nobody。ログに ImageMagick's syntax。HTTP 200。 |
plugin.config に RSA キーを設定した同じクエリ | EVP_DigestVerify | クローズ (ラボ実証): 403 署名検証失敗。witness ファイルなし。 |
| 巨大なオリジンブロブ | 無制限の blob_ | 可用性 (推測): プロセスメモリの圧迫。CVE-2026-58186 の上限設定の類似ケース。この High 行とは別。 |
| IM の URL / shell デリゲート | policy.xml | このラボではクローズ: HTTP/HTTPS/URL/MVG/shell デリゲートはなし。RCE とは呼ばないこと。 |
ラボ実証と推測の区別: nobody としての署名なしファイル書き込み、署名付き 403、構文ログはラボ実証です。無制限 blob の DoS は推測です。RCE は主張していません。
必要条件: 検証キーなしの experimental magick.so、および convert パスの書き込みを許可する ImageMagick policy.xml。デフォルトの plugin.config ではロードされません。
| 面 | ラボ |
|---|---|
| magick が RSA 公開鍵付きでロードされている | CONTROL 403、control-sigfail=yes、ファイルなし |
| magick がロードされていない | クエリ magick は無効 |
wasm WASI path_open | NOENT |
| リクエストボディを IM 入力とする | オリジンレスポンスの blob が入力 |
| webp_transform の境界付きデコード | CVE-2026-58186 はクローズ済み。magick の blob は境界が設定されていなかった類似ケース |
CVE-2026-58186ではない。MagickのREADMEには、悪用を避けるためにキーが存在するとすでに記載されていた。残っているのは、そのキーなしでプラグインを読み込むことだ。
python3 ats-magick-unsigned-Abraxas-Labs.py
または
cd lab
./run.sh
ループバック 127.0.0.1:18800(2番目のリスナー上で署名付き CONTROL)。Compose プロジェクト ats-magick-unsigned。イメージ ats-10.2.0-lab:local。ウィットネス ATS-MAGICK-UNSIGNED-WITNESS。最終行:
SUCCESS ats-magick-unsigned unsigned-http=200 file-write=yes uid=nobody syntax-log=true control-http=403 control-sigfail=yes ATS-MAGICK-UNSIGNED-WITNESS
key_ が null の場合はフェイルクローズしてください。検証済みの magickSig がない限り、クライアントからの ?magick= に対して ConvertImageCommand を実行しないでください。キーの欠落は「プラグインの設定ミス」として扱い、「署名なしの変換は問題ない」とは見なさないでください。blob_ は webp_transform で上限が設けられたのと同様に上限を設けてください。
それまでの間は、本番サイズの RSA 公開鍵なしで magick.so をロードしないでください。ディストリビューションの policy.xml は署名の代替にはなりません。
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/magick/magick.cc verified = nullptr == key_plugins/experimental/magick/README