abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-magick-unsigned
类别: 文件写入 可达性: 远程
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
当 plugin.config 中没有 RSA 密钥时,实验性 magick 会从 ?magick=(percent+base64 编码的 convert argv)运行 ImageMagick 的 ConvertImageCommand。verified = nullptr == key_。README 指出该密钥的存在是为了避免被利用。不带参数加载 magick.so 是该插件的默认行为。
在 plugin.config 上配置 RSA 公钥的已签名 CONTROL 返回 403,且不生成见证文件。类别仍为文件写入。发行版的 policy.xml 通常会禁用 URL/shell 委托。不要将其夸大为 RCE。
| ID | 暂无 CVE |
| 类别 | 文件写入(未签名的 convert argv) |
| 可达性 | 远程(未认证 HTTP ?magick= 经由无密钥的 magick.so) |
| CWE | CWE-347, CWE-73 |
| CVSS | 高危: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) 实验性 magick 未签名 convert |
| 认证 | 无 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:18800 |
我锁定了公开标签 10.2.0 对应的提交 b1df7334。实验环境是在回环地址上源码构建的 ats-10.2.0-lab:local 反向代理。未签名 convert -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS。见证文件 161 字节,属主为 nobody。已签名 CONTROL 返回 403。
在加载了 magick.so 且无 RSA 密钥的情况下,对具有兼容 Content-Type 的源站图片发起未认证的 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 字节见证文件,属主为 nobody。日志记录 ImageMagick's syntax。HTTP 200。 |
在 plugin.config 上配置 RSA 密钥的相同查询 | EVP_DigestVerify | 已关闭(实验环境已证实): 403 签名验证失败。无见证文件。 |
| 超大源站 blob | 无界的 blob_ | 可用性(推断): 进程内存压力。与 CVE-2026-58186 上限问题同源。不属于本高危行。 |
| IM URL / shell 委托 | policy.xml | 本实验环境中已关闭: HTTP/HTTPS/URL/MVG/shell 委托均无。不要称其为 RCE。 |
实验环境已证实 vs 推断: 以 nobody 身份进行未签名文件写入、已签名 403、语法日志均为实验环境证实。无界 blob DoS 为推断。未声称 RCE。
前提条件: 实验性 magick.so 且无验证密钥,加上 ImageMagick policy.xml 仍允许 convert 路径写入。默认 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(在第二个监听器上签名的 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 时采用失败关闭(fail closed)策略。在没有经过验证的 magickSig 的情况下,不要对客户端的 ?magick= 执行 ConvertImageCommand。将缺失密钥视为“插件配置错误”,而不是“未签名的转换没问题”。像 webp_transform 那样对 blob_ 设置上限。
在此之前,如果没有生产规模的 RSA 公钥,不要加载 magick.so。发行版的 policy.xml 不能替代签名。
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/magick/magick.cc verified = nullptr == key_plugins/experimental/magick/README