
Apache Traffic Server 10.2.0 - Alta - Remoto - Escrita de arquivo - magick convert sem assinatura grava como nobody
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-magick-unsigned
Classe: Escrita de arquivo Alcance: Remoto
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
O magick experimental executa ConvertImageCommand do ImageMagick a partir de ?magick= (argv de conversão em percent+base64) quando plugin.config não tem chave RSA. verified = nullptr == key_. O README afirma que a chave existe para evitar ser explorado. Carregar magick.so sem argumentos é o padrão do plugin.
CONTROL assinado com uma chave pública RSA em plugin.config retorna 403, sem arquivo testemunha. A classe permanece Escrita de arquivo. O policy.xml da distro frequentemente desabilita delegates de URL/shell. Não eleve para RCE.
| ID | ainda sem CVE |
| Classe | Escrita de arquivo (argv de conversão não assinado) |
| Alcance | Remoto (?magick= HTTP não autenticado através de magick.so sem chave) |
| CWE | CWE-347, CWE-73 |
| CVSS | Alto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| Produto | Apache Traffic Server |
| Afetado | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) magick experimental conversão não assinada |
| Autenticação | nenhuma |
| Licença | GNU Affero GPL v3.0 |
| Lab | apenas 127.0.0.1:18800 |
Fixe a tag pública 10.2.0 peel b1df7334. O lab é um proxy reverso ats-10.2.0-lab:local compilado a partir do código-fonte em loopback. Conversão não assinada -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS. Arquivo testemunha de 161 bytes com proprietário nobody. CONTROL assinado 403.
GET /img.png?magick= não autenticado contra uma imagem de origem com Content-Type compatível, com magick.so carregado e sem chave RSA.
| Método | Sink | Privilégio |
|---|---|---|
GET /img.png?magick= não autenticado conversão não assinada -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS | verified = nullptr == key_ (magick.cc:593-609) e então ConvertImageCommand | Integridade / Arquivo (comprovado em lab): arquivo testemunha de 161 bytes com proprietário nobody. Logs ImageMagick's syntax. HTTP 200. |
Mesma consulta com chave RSA em plugin.config | EVP_DigestVerify | Fechado (comprovado em lab): 403 falha na verificação de assinatura. Sem arquivo testemunha. |
| Blob de origem enorme | blob_ sem limite | Disponibilidade (inferido): pressão de memória do processo. Irmão do limite do CVE-2026-58186. Não é esta linha Alto. |
| Delegates de URL / shell do IM | policy.xml | Fechado neste lab: delegates HTTP/HTTPS/URL/MVG/shell nenhum. Não chame de RCE. |
Comprovado em lab vs inferido: escrita de arquivo não assinada como nobody, 403 assinado, log de sintaxe são de lab. DoS por blob sem limite é inferido. RCE não é alegado.
Requer: magick.so experimental sem chave de verificação, além de policy.xml do ImageMagick que ainda permita a escrita do caminho de conversão. Não é carregado no plugin.config padrão.
| Superfície | Lab |
|---|---|
| magick carregado com uma chave pública RSA | CONTROL 403, control-sigfail=yes, sem arquivo |
| magick não carregado | consulta magick é inerte |
wasm WASI path_open | NOENT |
| Corpo da requisição como entrada do IM | o blob da resposta de origem é a entrada |
| decodificação limitada do webp_transform | CVE-2026-58186 fechado; o blob do magick é o irmão que não foi limitado |
Não é CVE-2026-58186. O README do Magick já dizia que a chave existe para evitar ser explorada. O que resta é carregar o plugin sem essa chave.
python3 ats-magick-unsigned-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback 127.0.0.1:18800 (CONTROL assinado em um segundo listener). Projeto Compose ats-magick-unsigned. Imagem ats-10.2.0-lab:local. Witness ATS-MAGICK-UNSIGNED-WITNESS. Última linha:
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
Falhe de forma segura (fail closed) quando key_ for nulo. Não execute ConvertImageCommand no ?magick= do cliente sem um magickSig verificado. Trate uma chave ausente como "plugin mal configurado", não como "conversão sem assinatura está tudo bem". Limite blob_ da mesma forma que o webp_transform foi limitado.
Até então, não carregue magick.so sem uma chave pública RSA de tamanho de produção. O policy.xml da distro não substitui a assinatura.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/magick/magick.cc verified = nullptr == key_plugins/experimental/magick/README