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

Poslední požadavek v dávce dostal ve vLLM odpověď toho prvního

Hlášení CVE-2026-73558 z 8. září popisuje přetečení 32bitového indexu ve výpočetním jádře serveru vLLM. Sejde-li se v jedné dávce dost tokenů, sáhne výpočet pro poslední požadavek na data toho prvního a cizí odpověď skončí v odpovědi útočníka. Opravené vydání je 0.27.0 z 10. srpna; sama oprava leží ve veřejném repozitáři od konce července jako obyčejná oprava chyby.

Řady skříní superpočítače IBM Blue Gene/P v serverovém sále
Skříně superpočítače IBM Blue Gene/P v Argonne National Laboratory. Inferenční server počítá požadavky víc uživatelů v jedné dávce a právě na hranici mezi nimi popisovaná chyba stojí. Foto: Argonne National Laboratory, Wikimedia Commons (CC BY-SA 2.0)

Server vLLM obsluhuje jazykové modely tak, že požadavky víc uživatelů poskládá do jedné dávky a pustí je grafickou kartou naráz. Hlášení CVE-2026-73558, zveřejněné 8. září 2026, popisuje případ, kdy se ta dávka rozpadne špatným směrem: výpočet pro poslední požadavek začne číst data prvního a jeho odpověď se objeví v cizím výstupu. Známka je 5,3 z deseti, tedy střední závažnost, a týká se to všech verzí před 0.27.0.

Ukazatel do paměti se počítá ve 32 bitech

Chyba sedí v jádře act_and_mul_kernel, které počítá aktivační funkci mezi dvěma vrstvami sítě. Každý blok vláken si nejdřív spočítá, kde v paměti jeho data začínají:

const scalar_t* x_ptr = input + blockIdx.x * 2 * d;

blockIdx.x je pořadí tokenu v dávce, d šířka mezivrstvy modelu. Obě čísla jsou 32bitová, takže se i jejich součin počítá ve 32 bitech. Jakmile přeroste 4 294 967 296, začne se počítat znovu od nuly a ukazatel pak míří na začátek dávky místo na její konec.

Kdy k tomu dojde, se dá dopočítat. Model Llama 3.2 s miliardou parametrů, na kterém autor hlášení chybu předvedl, má d rovno 8 192, takže 2 × d je 16 384. Rozsah se vyčerpá po 262 144 tokenech. Dávka v předvedení měla sedmnáct požadavků po 16 384 tokenech, dohromady 278 528 – přesně o jednu sekvenci víc, než se do rozsahu vejde. Poslední požadavek proto nedostal pomíchaná čísla, ale doslovnou kopii odpovědi toho prvního. Vstupní čísla jsou z hlášení, dělení je náš dopočet.

Ve veřejném tiketu chyba ležela od května

Bezpečnostní hlášení není první veřejná zmínka. Tiket #42860 vznikl už 17. května 2026 a popisoval totéž místo v kódu jako numerickou chybu při dlouhých sekvencích. Doložený byl na jiném modelu: royokong/e5-v má podle tiketu d rovno 14 336, a při 7 890 tokenech v devatenácti požadavcích vyjde 149 910 tokenů proti prahu 149 796. Přebytek 114 tokenů zamíchá výsledky, celou cizí odpověď z něj ale nevydoluje nikdo.

Že jde o víc než o pokažená čísla, napsal do téhož tiketu 5. června další čtenář: jeho tým podle něj předvedl, že se tak dá získat odpověď jiného uživatele ze stejné dávky, a požádal o rychlou opravu. Od té věty do vydání opravy uplynulo osm týdnů a do přidělení čísla CVE víc než tři měsíce.

Oprava je jeden datový typ navíc

Návrh #49660 otevřel 24. července nový přispěvatel a sloučený byl o šest dní později. Pořadí tokenu se v něm ukládá do 64bitové proměnné a teprve ta jde do výpočtu:

const int64_t token_idx = blockIdx.x;
const scalar_t* x_ptr = input + token_idx * 2 * d;

Totéž na třech místech souboru, celkem devět přidaných a šest odebraných řádků. Ven se to dostalo ve vLLM 0.27.0 z 10. srpna 2026, tedy v tomtéž vydání, které přeskočilo dvě verze PyTorche. V poznámkách k tomu vydání stojí ten návrh jedině v seznamu nových přispěvatelů; mezi vypsanými změnami není a jeho vlastní nadpis mluví o přetečení celého čísla, ne o úniku dat.

Veřejná oprava před číslem CVE je záměr

Není to opomenutí. Bezpečnostní politika projektu dělí nálezy do čtyř stupňů a u dvou nižších předepisuje opak embarga: oprava se vyvíjí jako běžný veřejný návrh, protože podle ní veřejná viditelnost urychlí kontrolu i nasazení. Soukromá větev a předběžné upozornění provozovatelů jsou vyhrazené vysoké a kritické závažnosti.

Tentýž dokument ovšem popisuje střední stupeň jako nálezy, které nedovolí spuštění cizího kódu ani významný únik dat – a únik dat mezi uživateli tohle je. Známku srazila obtížnost: podle vektoru CVSS musí útočník trefit dávku, ve které je oběť, a potřebuje, aby v tu chvíli sama něco poslala.

Koho se to týká

Rozhoduje, kolik lidí na jednu instanci chodí. Kde běží model pro jednoho uživatele nebo jednu úlohu, zůstává z chyby početní kaz na dlouhých vstupech. Ve víceuživatelském provozu je to únik textu, který nikdo nemusí poznat, protože odpověď dorazí celá, jen patří někomu jinému. Práh závisí na šířce mezivrstvy modelu: čím širší, tím míň tokenů stačí.

Řešení je aktualizace na 0.27.0 nebo novější. Kdo sleduje jen bezpečnostní kanály, měl přitom šanci se o věci dozvědět až se zpožděním: záznam na cve.org je datovaný 13. srpnem a v databázi hlášení GitHubu se objevil 8. září. Stejná mezera provázela i CVE-2026-73557, které vLLM zveřejnil o čtyři dny dřív.

Zdroje

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

    Přihlášený uživatel OpenShift AI může načíst společné klíče NVIDIA

    Red Hat zveřejnil 7. září zranitelnost CVE-2026-86332 se skóre 6,5. Přihlášený uživatel dashboardu OpenShift AI může bez správcovského oprávnění načíst společný klíč…

  2. Bezpečnost

    Hlídač agentů v API OpenAI umí konverzaci zastavit, hotové kroky ale nevrátí zpět

    Spolu s modelem GPT-6 Astra ohlásilo OpenAI 3. září 2026 systém, který na pozadí čte uvažování agenta a při podezření na nezamýšlený přenos dat nebo destruktivní zásah…

  3. Bezpečnost

    Dynamicky sestavený Bifrost mohl bez přihlášení spustit modul z webu

    Správní rozhraní AI brány Bifrost před verzí 2.0.0 přijímalo od nepřihlášeného volajícího internetovou adresu vlastního zásuvného modulu. V dynamickém sestavení mohl…

  4. Bezpečnost

    Souběžné načtení dvou vektorů promptu obešlo ve vLLM pojistku proti loňské díře

    Záznam CVE-2026-73557 popisuje, že pojistka, kterou vLLM přidal v prosinci 2025 proti chybě CVE-2025-62164, stála na přepínači společném pro celý proces. Když server…