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

Hydra zakázala v konfiguraci šedesát čtyři citlivých jmen včetně os.system

Funkce instantiate() v knihovně Hydra zavolá to, co v konfiguraci stojí pod klíčem _target_. Vydání 1.3.4 proti tomu postavilo seznam 64 zakázaných jmen, jenže upozornění zveřejněné 21. srpna u něj samo uvádí, že je to opatření navíc, ne bezpečnostní hranice. Vývojová větev slibuje výchozí odmítání cizích cílů až ve verzi 1.5.

Optický turniket se skleněnými křídly a čtečkou kódů u vstupu do budovy
Optický turniket u vstupu do budovy propustí toho, kdo projde kontrolou u čtečky. Foto: McGov1258, Wikimedia Commons (CC BY-SA 4.0)

Knihovna Hydra skládá pythonovým programům konfiguraci z několika souborů YAML a v okolí strojového učení je všude – za poslední měsíc má balíček hydra-core podle služby pypistats 23,6 milionu stažení. Její funkce hydra.utils.instantiate() vezme z konfigurace klíč _target_, dohledá pod tím jménem pythonový objekt a zavolá ho. Kdo tedy určuje konfiguraci, určuje i to, co se zavolá.

Vydání 1.3.4 proti tomu postavilo seznam jmen, která projít nesmějí. Bezpečnostní upozornění GHSA-2cp2-2r3c-7p7rzáznam CVE-2026-68508, obojí z 21. srpna, u toho seznamu ale rovnou stojí, že úplná ochrana to není: jméno, které na něm nestojí, projde dál.

Konfigurace, ze které se vybírá funkce

Zápis, na kterém je celá věc postavená, vypadá v YAML takhle:

component:
  _target_: package.module.Class
  arg: value

Autor aplikace tím říká, kterou třídu má Hydra vyrobit a s jakými parametry. Potíž nastane tam, kde _target_ neurčuje on. Upozornění to popisuje bez příkras: Hydra sama žádnou síťovou službou není a ke zneužití je potřeba aplikace, knihovna nebo pracovní postup, který do instantiate() pustí cizí konfiguraci, přepis z příkazové řádky nebo metadata modelu. Známka podle CVSS 3.1 je 7,8 z 10 a vektor počítá s místním přístupem i se součinností uživatele. V katalogu CWE nese chyba dvě čísla: 94 pro vpravení kódu a 470 pro výběr třídy podle vstupu.

Šedesát čtyři jmen, jedno z nich dvakrát

Seznam leží v souboru hydra/_internal/instantiate/_instantiate2.py a dá se přečíst. Vlastní počet nad tímhle souborem ve značce v1.3.4: konstanta má 65 řádků, ale jen 64 různých jmen, protože os.fchdir je v ní dvakrát. Vedle nich stojí ještě dvě předpony, os.execos.spawn, které zaberou celou rodinu funkcí naráz.

Na seznamu jsou builtins.execbuiltins.eval, subprocess.runsubprocess.Popen, os.system, os.popen, runpy.run_path nebo ctypes.CDLL a další cesty k načtení systémové knihovny. Jsou tam ale i položky, které nic nespouštějí: os.getcwd jenom vrátí pracovní adresář. Je to ruční výčet, ne obecné pravidlo.

Kdo některé z těch jmen v konfiguraci opravdu potřebuje, vypíše je do proměnné prostředí HYDRA_INSTANTIATE_ALLOWLIST_OVERRIDE oddělené dvojtečkou; Hydra je pak pustí. Text chybové hlášky ten postup rovnou nabízí.

Co dostane ten, kdo upozornění poslechne

Upozornění radí přejít z hydra-core 1.3.3 a starších na 1.3.4 nebo novější. Příkaz pip install hydra-core dnes nainstaluje 1.3.5 z 5. srpna a ta seznam obsahuje také; jediná změna proti předchozí verzi je varování pro ty, kdo v řadě 1.3 spoléhají na chování Hydry 1.1.

Samotná oprava je přitom o sedm týdnů starší než upozornění na ni. Úkol číslo 3259 vznikl 4. července ve 14:17 UTC, návrh změny 3261 o dvacet minut později a sloučený byl v 15:30. Balíček se na PyPI objevil v 16:25 a vydání na GitHubu v 16:38. Záznam v databázi hlášení GitHubu přibyl až 21. srpna ve 20:57 UTC – je označený jako prověřený a má u sebe dotčený balíček, takže z něj vycházejí i automatická upozornění na závislosti.

Kde se to potkává s modely

Konfigurace nemusí být soubor od vývojáře. Může přijít v modelu, a přesně tohle popsal výzkum jednotky Unit 42 společnosti Palo Alto Networks zveřejněný 13. ledna 2026. Našel tři knihovny, které do instantiate() posílaly metadata staženého modelu: NeMo od NVIDIE, Uni2TS od Salesforce a ml-flextok, na které se podíleli výzkumníci Applu a švýcarské vysoké školy technické.

U NeMa je ta cesta vidět nejlíp. Soubor .nemo je obyčejný archiv TAR a uvnitř leží model_config.yaml s metadaty modelu; volání from_pretrained() se jménem modelu na Hugging Face jde touž cestou, protože se soubor nejdřív stáhne. K lednu 2026 bylo podle Unit 42 na Hugging Face přes 700 modelů ve formátu NeMo. A z více než sta pythonových knihoven, které jednotka u tamních modelů napočítala v říjnu 2025, jich Hydru nějak používá skoro padesát. Podobnou cestou šla i chyba v serveru Xinference, kde do funkce eval() mířil rovnou výstup modelu.

Dodavatele Unit 42 upozornil v dubnu 2025 a do prosince 2025 nenašel jediný případ, kdy by toho někdo zneužil. NVIDIA vydala opravu v NeMo 2.3.2 a sáhla po tom, co Hydra tehdy neměla: po bílé listině předpon, ke které navíc kontroluje, co se pod jménem opravdu naimportovalo. Salesforce nasadil opravu 31. července 2025, autoři knihovny FlexTok svůj kód upravili v červnu 2025. Blokovací seznam v Hydře v té době existoval, jenže v žádném vydání knihovny nebyl – do balíčku se dostal až o skoro půl roku později.

Bílá listina, kterou musí dodat aplikace

Celou třídu problémů má podle upozornění řešit až nevydaná řada 1.4. Ta staví na bílé listině, kterou musí předat důvěryhodný kód aplikace, ne konfigurace sama. Ve vývojové verzi 1.4.0.dev9, kterou má repozitář na větvi main, to vypadá takhle: instantiate() má nový parametr _target_whitelist_ a konfigurace si ho nastavit nemůže, protože Hydra volání odmítne, jakmile ten klíč uvnitř konfigurace najde.

Když ale volající kód parametr nepředá, platí dál stará cesta i s černou listinou a Hydra na to jen upozorní. V textu toho upozornění stojí, že se z varování stane chyba až v Hydře 1.5. Vydaná verze tedy dává seznam jmen, chystaná 1.4 parametr, který si musí každý projekt doplnit sám, a výchozí odmítání teprve verze po ní. Pro toho, kdo do instantiate() pouští metadata staženého modelu, z toho plyne jediné: kontrolu si musí napsat jeho vlastní knihovna, tak jako to udělalo NeMo.

Zdroje: bezpečnostní upozornění GHSA-2cp2-2r3c-7p7r, záznam CVE-2026-68508, opravný commit, vydání Hydra 1.3.4, balíček hydra-core na PyPIrozbor Unit 42 o spouštění kódu z metadat modelů.

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

    SGLang omezuje vzdálená média na 64 MiB

    Inference server SGLang 0.5.18 nově omezuje jeden vzdálený obrázek, video nebo zvuk na 64 MiB. Pro servery přístupné nedůvěryhodným klientům přidal také volitelný seznam…

  2. Bezpečnost

    Xinference spouštěl odpověď modelu jako kód

    Při zpracování volání nástrojů pro Llama 3 posílal Xinference výstup modelu do pythonové funkce eval(). Nově zveřejněná chyba CVE-2026-61539 tak v testovaném výchozím…

  3. Bezpečnost

    Spring AI 2.0.1 nastavila strop na 100 000 relací serveru MCP

    Spring AI 2.0.0 dovolovala vzdálenému klientovi bez přihlášení opakovanými inicializacemi postupně vyčerpat paměť serveru. Oprava z 21. srpna omezuje počet relací, ale…

  4. Bezpečnost

    Knihovna Transformers čte podle indexu i soubory mimo složku modelu a opravu nemá

    Když Transformers načítá model rozdělený do víc souborů, vezme jejich jména z indexu ležícího vedle vah a připojí je ke složce modelu bez jediné kontroly. Jméno, které…