1. Descripción técnica
Muchos servicios web que convierten o procesan vídeo (conversores, generadores de miniaturas, reproductores) delegan el trabajo en FFmpeg. Versiones antiguas de FFmpeg procesan, dentro de ciertos formatos contenedores (AVI, HLS/m3u8, Concat), listas de reproducción que pueden referenciar recursos externos mediante protocolos como file:, http:, concat: o subfile:.
Un atacante puede subir un archivo de vídeo manipulado (típicamente un AVI con una playlist m3u8 embebida) que, al ser procesado por el servidor, lee archivos locales (p. ej. /etc/passwd, config.php, claves SSH) o realiza peticiones a recursos internos (SSRF). El contenido leído se "incrusta" en el vídeo de salida, que el atacante descarga y reproduce para extraer la información.
Este comportamiento está relacionado con CVE-2016-1897 y CVE-2016-1898. Ambos fallos afectan al procesamiento de playlists HLS en versiones vulnerables, aunque sus condiciones y métodos de filtración no son idénticos.
2. Impacto de la vulnerabilidad
- Lectura de archivos arbitrarios del servidor (credenciales, configs, claves privadas).
- SSRF: peticiones a servicios internos no expuestos.
- Suele ser el punto de entrada (foothold) en máquinas que ofrecen "subir/convertir un vídeo".
3. Condiciones necesarias
- Un servicio que pasa archivos controlados por el usuario a FFmpeg.
- Una versión vulnerable de FFmpeg cuyo demuxer HLS puede combinar protocolos y recursos controlados por el archivo procesado.
- Que la salida convertida sea accesible para el atacante.
4. Validación y detección
- Identificar funcionalidad de conversión/procesado de vídeo y, si es posible, la versión de FFmpeg.
- Probar la subida de un
.avigenerado con el PoC apuntando a un archivo conocido (/etc/passwd).
5. Mitigación
- Actualizar FFmpeg a una versión corregida. El proyecto publicó correcciones en las ramas 2.8.5, 2.7.5, 2.6.7 y 2.5.10.
- Restringir los protocolos al conjunto mínimo requerido por el flujo de conversión y rechazar playlists o referencias externas cuando no sean necesarias.
- Procesar el contenido en un entorno aislado (sandbox/contenedor sin acceso a archivos sensibles).
6. Explotación documentada
Lectura de config.php en un conversor de vídeo (máquina Movie de HMV):
❯ python3 gen_xbin_avi.py file:///var/www/html/data/config.php config.avi
# subir config.avi al conversor, descargar el vídeo resultante y reproducirlo
# → revela las credenciales de la base de datos7. Clasificación
- Tipo: Arbitrary File Read / SSRF via media playlist parsing
- CVE: CVE-2016-1897, CVE-2016-1898
- CWE:
- CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
- CWE-918: Server-Side Request Forgery (SSRF)