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

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 nasazení otevírala cestu ke spuštění příkazů na serveru bez přihlášení. Oprava je součástí verze 2.7.0 už od dubna.

Mapa datových center a síťové infrastruktury ve Spojených státech
Mapa datových center, optických sítí a přenosových linek ve Spojených státech v roce 2025. Foto: DOE / National Renewable Energy Laboratory (NREL), Wikimedia Commons (Public domain)

Bezpečnostní upozornění na kritickou chybu CVE-2026-61539 vyšlo 21. srpna. Oprava přitom leží ve veřejném repozitáři od 14. dubna a do vydání Xinference 2.7.0 se dostala 25. dubna. Kdo zůstal u verze 2.5.0 nebo starší, dozvěděl se o důvodu k aktualizaci až o čtyři měsíce později.

Požadavek prošel až k funkci eval()

Xinference zpřístupňuje místně provozované jazykové, obrazové a další modely přes rozhraní podobné API od OpenAI. Dotčená cesta začínala u neproudového požadavku na /v1/chat/completions, který obsahoval seznam nástrojů. Při použití backendu Transformers se odpověď dostala do dodatečného zpracování a u formátu pro Llama 3 skončila v parseru volání nástrojů.

Parser očekával text připomínající pythonový slovník: jméno nástroje a jeho parametry. Místo prostého načtení dat ale volal eval(model_output, {}, {}). Python tím text nečetl jako data, nýbrž jako výraz. Prázdné slovníky pro globální a místní proměnné z toho bezpečné pískoviště neudělají; běžící proces má stále přístup k objektům jazyka a přes ně lze dojít ke spuštění kódu.

Útočník nemusel ovládat model ani nástroj

Slabé místo nebylo ve vahách Llamy 3. Podstatné bylo, že text, který model vytvořil, Xinference následně vyhodnotil jako program. Podle upozornění mohl vzdálený útočník ovlivnit výstup vhodně sestaveným vstupem do chatu a požadavkem s nástroji. Když model vrátil výraz místo očekávaných dat, server ho provedl pod účtem procesu Xinference.

Autoři hlášení ověřovali výchozí nasazení bez zapnutého přihlašování. V něm stačil síťový přístup k API, nebyla nutná žádná práva ani akce dalšího uživatele. Právě z těchto podmínek vychází známka 10,0 podle CVSS 3.1: útok po síti, nízká složitost, žádné přihlášení a vysoký dopad na důvěrnost, integritu i dostupnost. Neznamená to, že každá instalace byla automaticky dosažitelná z internetu; rozhoduje její síťové vystavení a nastavení přístupu.

Oprava zachovala oba očekávané formáty

Opravný commit nahradil eval() na dvou místech. Parser nejdřív zkusí json.loads(), tedy běžný formát JSON, který modely pro volání nástrojů vracejí. Když text používá pythonový zápis s jednoduchými uvozovkami nebo hodnotami True, FalseNone, přejde na ast.literal_eval(). Ten přijímá literály, ale odmítá volání funkcí a další spustitelné výrazy.

Změna přidala také 25 testů. Pokrývají platný JSON, vnořené parametry, pythonové literály, poškozený vstup i několik tříd výrazů, které se nesmějí provést. Vývojář při opravě prošel i šest dalších parserů nástrojů; ty už používaly json.loads(). Chyba tak nebyla obecným problémem všech modelů podporovaných Xinference, ale dvou cest určených pro formát Llamy 3.

Opravená verze vyšla před veřejným upozorněním

První veřejné hlášení v repozitáři vzniklo 18. února. Po měsíci ho automat zavřel jako neaktivní, aniž by se nebezpečný kód změnil. Druhé hlášení číslo 4769 ze 6. dubna ukázalo na stejná dvě místa. O osm dní později projekt opravu přijal.

poznámkách k vydání 2.7.0 stojí změna mezi opravami chyb a výslovně mluví o nahrazení eval() bezpečnými postupy kvůli vzdálenému spuštění kódu. Samostatné bezpečnostní upozornění a identifikátor CVE ale přibyly teprve 21. srpna. Časová osa vysvětluje nezvyklou situaci: záplata není nová, nové je přesné vymezení dopadu a kritická známka.

Rozhoduje skutečně nainstalovaná verze

Databáze GitHubu uvádí jako dotčený balíček xinference z PyPI ve verzi 2.5.0 a starší; první opravená je 2.7.0. Stejnou cílovou verzi uvádí také nezávislá databáze GitLabu. Provozovatel tedy potřebuje zkontrolovat verzi v prostředí, ze kterého server opravdu startuje, ne jen číslo v instalačním souboru nebo značku obrazu.

Aktualizace na 2.7.0 či novější odstraňuje oba nebezpečné průchody. Do té doby snižuje riziko omezení API na důvěryhodnou síť a zapnutí ověřování přístupu, ale samo chybu v parseru neopraví. Jestli je starší server dosažitelný pro cizí vstupy a zpracovává volání nástrojů pro Llamu 3, je odstavení této funkce bezpečnější než spoléhat na to, že model závadný výraz nevytvoří.

Zdroje: bezpečnostní upozornění GHSA-x2rj-828p-hx9m, hlášení chyby číslo 4769, opravný commit, vydání Xinference 2.7.0, záznam CVE-2026-61539 v NVDGitLab Advisory Database.

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

    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…

  2. 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é…

  3. Bezpečnost

    Servery MCP rodiny faf mají opravu, tři jejich kopie na npm ji nemají

    Databáze GitHubu vydala 19. srpna 2026 tři bezpečnostní hlášení k balíčkům faf-mcp, claude-faf-mcp a grok-faf-mcp: jejich nástroje si nechaly podstrčit cestu k…

  4. Bezpečnost

    Databáze GitHubu vedla chybu v MONAI jako opravenou ve verzi, která vyšla před hlášením

    Hlášení GHSA-89gg-p5r5-q6r4 o spuštění cizího kódu v knihovně MONAI uvádělo od 7. dubna do 31. července 2026 jako opravenou verzi 1.5.2. Ta přitom vyšla 29. ledna a…