Přeskočit na obsah
Bezpečnost 3 min čtení

Keras opravil čtení cizích souborů přes odkazy v HDF5 už potřetí za půl roku

Soubor s váhami pro Keras nemusí obsahovat žádná data – stačí, když ukáže na jiný soubor HDF5 na disku oběti, a knihovna ho poslušně načte do modelu. Hlášení CVE-2026-9335 vyšlo 2. srpna 2026, opravená vydání byla přitom ke stažení už od konce června. Je to třetí zranitelnost téhož druhu od února a pokaždé za ní stojí jiný odkazovací mechanismus téhož formátu.

Otevřená zásuvka lístkového katalogu plná kartotéčních lístků
Zásuvka lístkového katalogu autorských práv v Kongresové knihovně ve Washingtonu. Odkaz uvnitř souboru HDF5 se chová podobně jako takový lístek: sám žádná data nenese, jen ukazuje jinam. Foto: Michael Holley Swtpc6800, Wikimedia Commons (volné dílo)

Model se v knihovně Keras ukládá do souboru .keras, .h5 nebo .weights.h5 a uvnitř všech tří je formát HDF5. Ten umí proti obyčejnému archivu jednu věc navíc: místo dat může uložit odkaz do jiného souboru na disku. Knihovna h5py takový odkaz při běžném přístupu k položce tiše následuje, a přesně na tom stojí zranitelnost CVE-2026-9335, zveřejněná 2. srpna 2026.

Necelý kilobajt, ve kterém není ani řádek kódu

Keras má pomocné funkce safe_get_h5_groupsafe_get_h5_dataset, jejichž jediným úkolem je odkazy typu ExternalLinkSoftLink odmítnout. Dvě místa je obcházela: veřejná utilita KerasFileEditor na prohlížení a úpravu souborů s váhami a větev pro staré soubory .h5 ve funkci load_weights. Obě sahaly do stromu HDF5 přímo, takže odkaz následovaly.

V popisu opravy (návrh změny 22899) stojí, že podvržený soubor stačí velký zhruba 944 bajtů a neobsahuje žádný kód v Pythonu, takže projde jakoukoli obranou postavenou na statické analýze. To je na celé věci podstatné: nástroje, které soubory s modelem prověřují, hledají hlavně nebezpečný pickle a spustitelný kód. Tady žádný není.

Co se dá takhle přečíst, má svou hranici – cílem odkazu musí být zase soubor HDF5, ne libovolný soubor na disku. Autor opravy jmenuje dva případy, kdy to i tak bolí: cizí uložený stav učení na sdíleném výpočetním clusteru a model stažený do mezipaměti ~/.cache/huggingface. Když si oběť soubor otevře v editoru a uloží, zapíšou se přečtené tenzory ven jako obyčejné datové sady, takže z editoru je rovnou nástroj na odnesení dat.

GitHub dal zranitelnosti známku 6,5 z deseti podle metodiky CVSS 3.0, mimo jiné proto, že se bez součinnosti oběti využít nedá: někdo ten soubor musí načíst. Americká databáze NVD měla svůj záznam 9. srpna 2026 pořád ve stavu „Received“, tedy bez vlastního rozboru a bez vlastní známky.

Bezpečný režim na tohle nedosáhne

Kdo načítá cizí modely, obvykle spoléhá na přepínač safe_mode. Dokumentace funkce load_model ho ale popisuje úzce: rozhoduje o tom, „jestli se zakáže nebezpečná deserializace lambdy“, a výslovně dodává, že „tento argument se týká pouze formátu modelu Keras v3“ (přeloženo). Načítání vah ze starého souboru .h5 tedy nekryje ani zapnutý.

Potřetí od února, pokaždé jiným mechanismem

Odkazovací prvky formátu HDF5 nejsou v Kerasu problém poprvé. Za posledního půl roku vyšla tři hlášení a všechna popisují totéž chování, jen jinou cestou:

  • CVE-2026-1669 (18. února 2026, známka 7,1) – takzvané externí úložiště dat. Soubor s váhami směroval čtení na libovolný čitelný soubor na disku a jeho bajty skončily jako hodnoty v modelu.
  • CVE-2026-12480 (1. července 2026, známka 5,5) – virtuální datové sady. Hlášení samo o sobě píše, že jde o neúplnou opravu předchozího případu.
  • CVE-2026-9335 (2. srpna 2026, známka 6,5) – odkazy ExternalLinkSoftLink.

Souvislost není naše domněnka. V popisu poslední opravy stojí, že původní záplata na CVE-2026-1669 přidala kontrolu jen na úrovni datové sady, kdežto stejná pojistka pro skupiny se na tohle místo nedostala. Ke cti projektu patří dodat, že vlastní ukládání v Kerasu odkazy tohohle druhu nikdy nevytváří, takže oprava odmítá jen podvržené soubory a na běžné váhy nesahá.

Oprava byla venku dřív než hlášení

Nález přišel přes platformu huntr 4. května 2026. Návrhy změn 22899 a 22900 vznikly 15. května a do hlavní větve se dostaly 20. května, tedy šestnáct dní po ohlášení. Ve vydání 3.15.0 byly 24. června a ve 3.12.3 o dva dny nato. Veřejný záznam vyšel až 2. srpna, tedy devětatřicet dní po vydání 3.15.0.

Kdo se řídí databázemi zranitelností, dozvěděl se o díře skoro šest týdnů poté, co byla záplata ke stažení. Poznámky k vydání 3.12.3 přitom obě opravy jmenují a popisují, takže informace veřejná byla – jen jinde, než se hledá. Podobný odstup jsme popisovali u rozhraní Open WebUI, tam šlo o osm dní.

Která verze je v pořádku

Rozsah zranitelných verzí má dvě části: všechno pod 3.12.3 a pak řada od 3.13.0 výš. Slovní popis hlášení mluví o verzích do 3.14.0 včetně, strojově čitelný rozsah u téhož záznamu ale sahá až pod 3.15.0, takže zahrnuje i vydání 3.14.1. Rozdíl mezi těmi dvěma údaji hlášení nevysvětluje a bezpečnější je držet se toho širšího.

Řada 3.14 opravu nedostala vůbec. Její poslední vydání 3.14.1 je ze 7. května 2026, tedy z doby před sloučením záplaty, a nic novějšího v téhle větvi nevyšlo – kdo na ní stojí, musí přejít na 3.15. Odpověď „mám aktuální verzi“ tu proto nestačí; rozhoduje číslo.

Zatím poslední vydání jsou 3.15.1 a 3.12.4, obě z 29. července 2026, a obě přinesla další bezpečnostní opravy kolem HDF5 – mimo jiné kontrolu všech mezilehlých skupin při procházení souboru.

Zůstává z toho jedna nepohodlná věc. Soubor s váhami stažený od cizího člověka je vstup jako každý jiný, jenže kontroly, které se dnes na modely pouštějí, hledají spustitelný kód. Podvržený odkaz v HDF5 žádný neobsahuje, a přesto stačí.

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

  1. Bezpečnost

    Úložiště LangGraphu vracelo i záznamy z prostoru, jehož jméno začínalo stejně

    Knihovna LangGraph ukládá paměť agentů do jmenných prostorů a aplikace jimi běžně oddělují data jednoho uživatele od druhého. Úložiště pro Postgres a SQLite je ale…

  2. Bezpečnost

    Open WebUI vydalo sedmnáct záznamů CVE až osm dní po opravné verzi

    Rozhraní Open WebUI, které si lidé staví před vlastní modely, vydalo 27. července 2026 verzi 0.11.0 s bezpečnostními opravami a v poznámkách rovnou napsalo, že je zatím…

  3. Bezpečnost

    Codex a Claude Code zpřísnily ochranu tokenů a pravidla sandboxu

    Codex 0.147 začal v zobrazených příkazech a obnovené historii skrývat celé bearer tokeny. Claude Code 2.1.224 opravil obcházení zákazu čtení cestou s koncovým lomítkem a…

  4. Bezpečnost

    GitHub Copilot a Visual Studio Code dostaly najednou šest bezpečnostních záplat

    Microsoft zveřejnil 14. července 2026 během jednoho dne šest záznamů CVE pro dvojici GitHub Copilot a Visual Studio Code – pět pro samotný editor, jeden pro plugin…