Záznam CVE popsal chybu FaceFusionu až dva měsíce po její opravě
FaceFusion do verze 3.6.1 skládal cestu k souboru úlohy přímo z názvu, který přijalo rozhraní Gradio bez přihlášení. Cizí klient tak mohl zapsat JSON mimo pracovní adresář. Verze 3.7.0 přidala kontrolu 30. června, ale CVE-2026-84702 vyšlo až 2. září a poznámky k vydání bezpečnostní změnu neuvádějí.

FaceFusion je nástroj na výměnu a další úpravy tváří ve snímcích a videu. Práci si ukládá jako úlohy v souborech JSON. Do verze 3.6.1 odvozoval jméno každého takového souboru přímo z identifikátoru, který mu poslal uživatel.
Nově zveřejněný záznam CVE-2026-84702 popisuje důsledek: podstrčený identifikátor mohl obsahovat části cesty a zápis pak skončil mimo adresář úloh. Útočník tím nezískal možnost uložit libovolný program. Zapisoval platný JSON, jeho obsah však mohl ovlivnit dalšími kroky úlohy. Dosáhl přitom kamkoli, kam směl zapisovat proces FaceFusionu.
Jméno souboru bylo zároveň cestou
Původní funkce get_job_file_name() dělala jedinou věc: připojila k identifikátoru příponu .json. Nadřazená funkce pak výsledek spojila s adresářem a stavem úlohy. Oddělovače adresářů ani části cesty mířící o úroveň výš nikdo neodmítl.
Nezávislý nálezce George Chen ve svém technickém zápisu popisuje i cestu od webového formuláře k zápisu. Rozhraní postavené na Gradiu předávalo hodnotu z textového pole rovnou správci úloh. Příkazová řádka přitom stejný identifikátor kontrolovala už tehdy. Ochrana tedy existovala, jen ne na společné hranici, kterou používají oba vstupy.
Oprava ve verzi 3.7.0 přesunula kontrolu do funkce, která tvoří jméno souboru. Běžný alfanumerický identifikátor a spojovníky nechá beze změny. Jakmile narazí na jiný znak, nahradí celý řetězec otiskem SHA-1. Výsledek už neobsahuje oddělovač adresářů, takže z vyhrazené složky neuteče.
Bez hesla neznamená automaticky z internetu
Záznam CVE hodnotí útok jako síťový, bez oprávnění a bez součinnosti uživatele. To odpovídá instanci, jejíž webové rozhraní je dostupné z cizího počítače. Výchozí spuštění FaceFusionu však síťový dosah omezuje víc, než z krátkého popisu CVE vypadá.
Čtyři rozvržení rozhraní ve verzi 3.6.1 volají launch() bez parametru auth, ale také bez server_name. Gradio 5.44.1 v takovém případě používá 127.0.0.1. Na celou místní síť se rozhraní otevře až hodnotou 0.0.0.0 nebo proměnnou GRADIO_SERVER_NAME. Chyba je tedy vzdáleně dosažitelná u instalací vystavených přes síť, proxy či změněné nastavení, ne u každého výchozího spuštění na jednom počítači.
Oprava byla veřejná, její účel ne
Časová osa má dvě různé prodlevy. Chen uvádí, že chybu ohlásil projektu 2. června 2026 a projekt ji tentýž den přijal. Opravný kód se objevil v obřím souhrnném commitu pro vydání 3.7.0. GitHub datuje commit i vydání 30. červnem. Chenův zápis mluví o 27. červnu; veřejná data projektu tedy jeho datum nepotvrzují.
Poznámky k vydání 3.7.0 jmenují výkon CoreML, nový režim výběru tváře, změny instalátoru i odstraněný limit operační paměti. Kontrola identifikátoru úlohy v nich není. Správce, který četl jen poznámky, tak neměl důvod chápat přechod z 3.6.1 jako bezpečnostní aktualizaci.
Veřejný záznam CVE nese datum 2. září, tedy 64 dní po vydání opravy. Mezitím vyšly verze 3.7.1, 3.8.0, 3.8.1, 3.8.2 a 1. září také 3.8.3. Kdo používá některou z nich, opravu už má. Dotčené jsou podle záznamu všechny verze před 3.7.0.
Prodleva sama neznamená, že oprava chyběla. Znamená něco praktičtějšího: databáze zranitelností dva měsíce nevarovala a poznámky k vydání účel změny zamlčely. Bez porovnání kódu nebylo z veřejných materiálů projektu poznat, že aktualizace zavírá cestu k zápisu souborů mimo pracovní adresář.