cd ~/blog

~/vulns/ffmpeg-hls-local-file-read-cve-2016-1897.md

FFmpeg HLS Local File Read (CVE-2016-1897)

web 20-06-2026
FFmpegSSRFLFImedia

~2 min de lectura


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 .avi que 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

  1. Un servicio que pasa archivos controlados por el usuario a FFmpeg.
  2. Una versión de FFmpeg sin restringir los protocolos (-protocol_whitelist no configurado).
  3. 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 .avi generado con el PoC apuntando a un archivo conocido (/etc/passwd).

6. Mitigación

  1. Actualizar FFmpeg a una versión moderna.
  2. Restringir protocolos con -protocol_whitelist file,crypto (o el mínimo necesario) y deshabilitar file:/http:/concat: si no se requieren.
  3. 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 datos

8. 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).

// relacionados