cd ~/blog

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

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

webautor: Jordy Pérez Osorio aviso legal
FFmpegSSRFLFImedia

~2 min de lectura


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

  1. Un servicio que pasa archivos controlados por el usuario a FFmpeg.
  2. Una versión vulnerable de FFmpeg cuyo demuxer HLS puede combinar protocolos y recursos controlados por el archivo procesado.
  3. 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 .avi generado con el PoC apuntando a un archivo conocido (/etc/passwd).

5. Mitigación

  1. 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.
  2. Restringir los protocolos al conjunto mínimo requerido por el flujo de conversión y rechazar playlists o referencias externas cuando no sean necesarias.
  3. 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 datos

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

8. Referencias

// relacionados