1. Descripción técnica del ataque
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.
Esto se conoce genéricamente como "FFmpeg HLS / AVI local file read" y abarca varios CVE relacionados (CVE-2016-1897/1898, y la clase de bugs de playlist).
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. Historia y evolución
- La familia de fallos de playlist de FFmpeg fue divulgada por Eric (neex) y otros alrededor de 2016 (CVE-2016-1897, CVE-2016-1898, etc.).
- El PoC más usado es neex/ffmpeg-avi-m3u-xbin, que genera un
.avique filtra un archivo arbitrario. - Sigue siendo un clásico en CTFs con conversores de vídeo, aunque FFmpeg moderno restringe los protocolos permitidos por defecto.
4. Factores que la hacen posible
- Un servicio que pasa archivos controlados por el usuario a FFmpeg.
- Una versión de FFmpeg sin restringir los protocolos (
-protocol_whitelistno configurado). - Que la salida convertida sea accesible para el atacante.
5. 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).
6. Mitigación
- Actualizar FFmpeg a una versión moderna.
- Restringir protocolos con
-protocol_whitelist file,crypto(o el mínimo necesario) y deshabilitarfile:/http:/concat:si no se requieren. - Procesar el contenido en un entorno aislado (sandbox/contenedor sin acceso a archivos sensibles).
7. Ejemplo de explotación real
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 datos8. Clasificación
- Tipo: Arbitrary File Read / SSRF via media playlist parsing
- CVE: CVE-2016-1897, CVE-2016-1898 (y relacionados)
- CWE:
- CWE-200 – Exposure of Sensitive Information
- CWE-918 – Server-Side Request Forgery (SSRF)
9. Resumen
FFmpeg, al procesar contenedores con playlists (AVI/HLS/concat) y protocolos como file:, permite que un vídeo malicioso lea archivos locales o haga SSRF y filtre el resultado en la salida. Es un foothold habitual en servicios de conversión de vídeo. La defensa es actualizar FFmpeg y limitar los protocolos con -protocol_whitelist. Relacionado con LFI (Local File Inclusion) y SSRF (Server-Side Request Forgery).