1. Descripción técnica
CVE-2022-28368 afecta a dompdf 1.2.1 y permite que un documento HTML controlado provoque ejecución de PHP mediante una fuente declarada con @font-face. El límite de confianza se rompe cuando el renderizador descarga una fuente remota, la guarda con una extensión peligrosa y la deja dentro de una ruta que el servidor web interpreta como código.
1.1. Mecanismo
La hoja CSS define una URL de fuente controlada. dompdf descarga el recurso y construye un nombre de caché a partir de la familia tipográfica, el estilo y un hash de la URL. Si el archivo remoto conserva contenido PHP y termina como .php, el atacante puede predecir la ruta almacenada. La ejecución no ocurre durante el renderizado: aparece después, cuando una petición HTTP alcanza el archivo cacheado y el servidor lo entrega al intérprete PHP.
Por eso la cadena requiere dos componentes distintos: una escritura controlada por dompdf y una configuración web que ejecute PHP en el directorio de fuentes.
// renderizando diagrama…
2. Impacto
El atacante ejecuta código con la identidad del proceso que atiende PHP. El fallo no concede privilegios de root por sí solo y su alcance depende de los permisos del servicio.
3. Condiciones necesarias
- La aplicación debe procesar HTML o CSS controlado con una versión afectada de dompdf.
- La carga de recursos remotos debe permitir recuperar la fuente controlada.
- El archivo debe quedar en una ubicación servida por la aplicación.
- El servidor debe interpretar como PHP la extensión y ruta resultantes.
- El atacante debe poder calcular o descubrir el nombre cacheado.
4. Validación y detección
La detección debe correlacionar solicitudes de conversión que incluyan @font-face, conexiones salientes del renderizador hacia orígenes no confiables y archivos PHP creados en la caché de fuentes. Ver únicamente dompdf 1.2.1 orienta la investigación, pero no confirma que todas las condiciones de ejecución estén presentes.
5. Explotación documentada
5.1. Converter
El conversor descargó una fuente con PHP añadido, la guardó bajo dompdf/lib/fonts con un nombre derivado del MD5 de la URL y ejecutó el archivo al solicitar la ruta calculada. La shell resultante pertenecía a eva.
6. Mitigación
- Actualizar dompdf a una versión corregida y revisar los avisos vigentes del proyecto.
- Deshabilitar recursos remotos cuando no sean necesarios.
- Impedir la ejecución de PHP en directorios de caché y de archivos generados.
- Mantener las cachés fuera del document root y aplicar una lista permitida de tipos y extensiones.