
Apache Traffic Server 10.2.0 - Alta - Remota - Escritura de archivos - magick convert sin firmar escribe como nobody
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-magick-unsigned
Clase: Escritura de archivos Alcance: Remoto
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
El magick experimental ejecuta ConvertImageCommand de ImageMagick desde ?magick= (argv de convert en porcentaje+base64) cuando plugin.config no tiene clave RSA. verified = nullptr == key_. El README indica que la clave existe para evitar ser explotado. Cargar magick.so sin argumentos es el comportamiento predeterminado del plugin.
CONTROL firmado con una clave pública RSA en plugin.config devuelve 403, sin archivo testigo. La clase sigue siendo Escritura de archivos. El policy.xml de la distro a menudo desactiva los delegados de URL/shell. No lo eleve a RCE.
| ID | aún sin CVE |
| Clase | Escritura de archivos (argv de convert sin firmar) |
| Alcance | Remoto (?magick= HTTP sin autenticación a través de magick.so sin clave) |
| 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 |
| Producto | Apache Traffic Server |
| Afectado | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) convert sin firmar de magick experimental |
| Autenticación | ninguna |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1:18800 |
Fijé la etiqueta pública 10.2.0 peel b1df7334. El laboratorio es un proxy inverso ats-10.2.0-lab:local compilado desde código fuente en loopback. Convert sin firmar -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS. Archivo testigo de 161 bytes con propietario nobody. CONTROL firmado 403.
GET /img.png?magick= sin autenticación contra una imagen de origen con un Content-Type compatible, con magick.so cargado y sin clave RSA.
| Método | Sumidero | Privilegio |
|---|---|---|
GET /img.png?magick= sin autenticación convert sin firmar -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS | verified = nullptr == key_ (magick.cc:593-609) luego ConvertImageCommand | Integridad / Archivo (probado en laboratorio): archivo testigo de 161 bytes con propietario nobody. Registros ImageMagick's syntax. HTTP 200. |
Misma consulta con clave RSA en plugin.config | EVP_DigestVerify | Cerrado (probado en laboratorio): 403 falló la verificación de firma. Sin archivo testigo. |
| Blob de origen enorme | blob_ sin límite | Disponibilidad (inferido): presión de memoria del proceso. Hermano del límite de CVE-2026-58186. No es esta fila Alta. |
| Delegados URL / shell de IM | policy.xml | Cerrado en este laboratorio: delegados HTTP/HTTPS/URL/MVG/shell ninguno. No lo llame RCE. |
Probado en laboratorio vs inferido: escritura de archivos sin firmar como nobody, 403 firmado, registro de sintaxis son de laboratorio. El DoS por blob sin límite es inferido. No se afirma RCE.
Requiere: magick.so experimental sin clave de verificación, más un policy.xml de ImageMagick que aún permita la escritura de la ruta de convert. No se carga en el plugin.config predeterminado.
| Superficie | Laboratorio |
|---|---|
| magick cargado con una clave pública RSA | CONTROL 403, control-sigfail=yes, sin archivo |
| magick no cargado | la consulta magick es inerte |
wasm WASI path_open | NOENT |
| Cuerpo de la solicitud como entrada de IM | el blob de respuesta del origen es la entrada |
| decodificación acotada de webp_transform | CVE-2026-58186 cerrado; el blob de magick es el hermano que no fue acotado |
No es CVE-2026-58186. El README de Magick ya indicaba que la clave existe para evitar ser explotado. Lo que queda es cargar el plugin sin esa clave.
python3 ats-magick-unsigned-Abraxas-Labs.py
o
cd lab
./run.sh
Loopback 127.0.0.1:18800 (CONTROL firmado en un segundo listener). Proyecto de Compose ats-magick-unsigned. Imagen ats-10.2.0-lab:local. Testigo ATS-MAGICK-UNSIGNED-WITNESS. Última línea:
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
Cerrar por defecto cuando key_ es null. No ejecutar ConvertImageCommand en el ?magick= del cliente sin un magickSig verificado. Tratar una clave ausente como "plugin mal configurado", no como "la conversión sin firma está bien". Limitar blob_ de la misma forma en que se limitó webp_transform.
Hasta entonces, no cargar magick.so sin una clave pública RSA de tamaño de producción. El policy.xml de la distro no sustituye a la firma.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/magick/magick.cc verified = nullptr == key_plugins/experimental/magick/README