vLLM 0.31.0 odmítá multimodální volby z požadavku, dokud je server výslovně nepovolí
Vydání 0.31.0 z 5. října 2026 odmítne pole mm_processor_kwargs a media_io_kwargs, pokud je klient pošle v požadavku. Dala se jimi předepsat práce s obrázky a videem a u dvou backendů stačilo pár desítek bajtů JSONu na několikanásobek paměti serveru. Kdo ta pole potřebuje, spustí server s přepínačem --trust-request-mm-kwargs.
Projekt vLLM, tedy engine pro inferenci a obsluhu velkých jazykových modelů, vydal 5. října 2026 verzi 0.31.0. V seznamu změn, které rozbíjejí zpětnou kompatibilitu, stojí hned první řádka o multimodálních parametrech: server nově odmítne každý požadavek, který nese pole mm_processor_kwargs nebo media_io_kwargs. Kdo je potřebuje, musí server spustit s novým přepínačem --trust-request-mm-kwargs.

Co ta dvě pole uměla
Obě nesou nastavení pro práci s obrázky, videem a zvukem. media_io_kwargs rozhoduje o tom, čím se médium načte a kolik snímků se z videa vezme; mm_processor_kwargs sahá na přípravu vstupu pro model, tedy třeba na rozměry obrázku. Do verze 0.31.0 se obojí dalo poslat v těle požadavku a hodnota z požadavku přebila to, co měl nastavené provozovatel serveru.
Na papíře je to pohodlné: jeden klient chce z videa hustší vzorkování než druhý. V praxi to znamená, že si volající sám určuje, kolik práce po serveru bude chtít.
Sedmdesát čtyři bajtů navíc
Jak to dopadá, popisuje záznam CVE-2026-105758, který americká databáze NVD vede od 5. října jako analyzovaný se známkou 5,3 ze stupnice CVSS 3.1, kterou do ní dodal GitHub. Týká se nasazení s modely Qwen2-VL a Qwen3-VL: ta část vLLM, která z videa vybírá snímky, se u nich řídí poli max_frames a fps z požadavku a žádný strop nad nimi nestál. Podle hlášení v evidenci GitHubu zvedlo 74 bajtů JSONu navíc špičkovou rezidentní paměť serveru z 2 271 MiB na 13 629 MiB, tedy zhruba šestkrát, a šlo to přes nepřihlášené volání POST /tokenize.
Druhý záznam, CVE-2026-105760, má stejnou známku a jiný mechanismus. U backendu GLMGA si server z hodnot v požadavku nejdřív postaví seznam indexů snímků a teprve pak z něj vyhází duplicity – a dělá to dřív, než se na video vůbec podívá. Stačí dvousnímkové video a čtyři volby v JSONu. Práce navíc probíhá tam, kudy procházejí i ostatní požadavky na média, takže je zdrží.
Jednotlivé záplaty na další backendy nedosáhly
Obě díry přitom byly zalepené už dřív. Verze 0.30.0 z 22. září má v oddílu Security jedinou větu: vzorkování videa řízené požadavkem je omezené pro backendy GLMGA a Qwen-VL. Obě hlášení proto uvádějí 0.30.0 jako opravenou verzi, zveřejnila se ale až 5. října, tedy dva týdny po opravě.
Zajímavější je, proč se to opravovalo dvakrát. Strop pro GLMGA přibyl na začátku září, jenže k Qwenu nedosáhl – každý backend si čte vlastní pole. Souběžný návrh opravy mířil na pole num_frames, jenže backendy Qwenu to pole vůbec nečtou; vlastní docstring jednoho z nich to říká na rovinu. Opravovalo se tedy pole, které u těchhle dvou backendů nerozhoduje o ničem.
Změna v 0.31.0 jde na to z druhé strany. Místo stropu u každého backendu zvlášť zavírá celou třídu: parametry z požadavku se neberou vůbec, dokud je provozovatel nepovolí. Funkce validate_request_mm_kwargs vrátí chybu s odůvodněním, že tyhle volby mění spotřebu zdrojů při přípravě multimodálního vstupu. Hlídá přitom obojí – jak chat a doplňování textu, tak skórování –, a dohromady je to sedmnáct souborů a 203 přidaných řádků.
Koho se změna dotkne
Serverová nastavení --mm-processor-kwargs a --media-io-kwargs zůstávají, kde byla, a běh modelu v knihovně bez HTTP serveru se nemění vůbec. Změna míří jen na pole poslaná jednotlivým požadavkem, a kdo je posílá, dostane místo odpovědi chybu.
Dokumentace k tomu dostala vlastní oddíl o bezpečnosti, který nový přepínač rovnou drží zkrátka. V překladu: server s --trust-request-mm-kwargs mají spouštět jen nasazení, jejichž klientům provozovatel věří, a na koncový bod vystavený nedůvěryhodným klientům se ta volba zapínat nemá.
Pro veřejné rozhraní je to tedy jednosměrka: buď si volající přestanou předepisovat, jak se jejich video načte, nebo si provozovatel vědomě nechá otevřené to, co dvě hlášení CVE popisují jako cestu k zahlcení serveru. Seznam podporovaných backendů přitom poroste dál a strop u každého nového by se musel hlídat zvlášť.