Společnost Codean Labs objevila vážnou zranitelnost v prohlížečce PDF integrované ve Firefoxu. Chyba umožňuje útočníkovi spustit libovolný kód v jazyce JavaScript, jakmile je otevřen škodlivý soubor PDF. Chyba se vyskytuje v PDF.js, kterou používá Firefox, ale také dalších nástrojů, které tuto knihovnu volají třeba kvůli náhledům.
Správně připravené PDF je schopno zneužít komplikované podpory fontů k injektáži a spuštění vlastního JavaScriptu. Objevitelé chyby připravili jednoduché PDF demonstrující tuto zranitelnost. V závislosti na aplikaci to může vést k úniku dat, provádění škodlivých akcí jménem oběti nebo dokonce k úplnému převzetí účtu. Pokud je chyba zneužita v aplikaci běžící v Electronu bez řádně sandboxovaného JavaScriptu, je možné spustit nativní kód.
PDF.js má omezená privilegia díky tomu, že se spouští pod vlastním zdrojem resource://pdf.js
. Tím zafunguje Same-origin policy a kód prováděný v rámci této oblasti pak nemá například přístup k místním souborům. V jiných ohledech je ovšem o něco privilegovanější a například je možné v něm vyvolat stahování souborů (prostřednictvím dialogového okna), a dokonce i „stahovat“ libovolné adresy začínající na file://
. Navíc je skutečná cesta k otevřenému souboru PDF uložena v window.PDFViewerApplication.url
, což útočníkovi umožňuje špehovat lidi otevírající soubor PDF a zjistit nejen to, kdy soubor otevřeli a co s ním dělají, ale také to, kde se soubor v jejich počítači nachází.
Chyba je opravena ve Firefoxu 126 a v PDF.js verze 4.2.67. Některé další knihovny také vydávají své opravy, protože obsahují integrovaný prohlížeč PDF. To se týká například react-pdf
, ale i dalších podobných projektů. Je možné také ručně upravit PDF.js a změnit hodnotu isEvalSupported
na false
. Pokud používáte přísné nastavení content-security policy (CSP) a zakážete eval
a konstruktor Function
, není možné zranitelnost zneužít.