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 jejich automatické ukončení po nečinnosti zůstává ve výchozím nastavení vypnuté.

Každá inicializace založila další relaci
Server MCP používá požadavek initialize jako úvodní podání ruky. Ve Spring AI 2.0.0 po něm vytvořil relaci, přidělil jí identifikátor a uložil ji do mapy v paměti. Počet položek neměl žádný strop. Klient navíc ve výchozím nastavení nemusel být přihlášený.
Vzdálenému klientovi proto stačilo posílat nové inicializace. Server pro každou držel další stav a paměť postupně ubývala, až služba přestala obsluhovat i běžné uživatele. Problém se týkal obou variant přenosu Streamable HTTP, tedy reaktivního WebFluxu i klasického WebMVC. Nešlo o čtení dat ani změnu obsahu; dopad mířil na dostupnost.
CVE-2026-59279 má podle výpočtu Springu známku 7,5 z deseti. Vektor počítá s útokem po síti, nízkou složitostí, nulovým oprávněním a bez zásahu uživatele. Bezpečnostní upozornění Springu uvádí jako dotčenou pouze verzi 2.0.0.
Nové relace nad limit dostanou odpověď 503
Opravující commit přidal do obou serverových transportů hodnotu maxSessions. Pokud ji vývojář nenastaví, platí 100 000. Jakmile mapa relací tohoto počtu dosáhne, další požadavek initialize skončí stavem 503 Service Unavailable a server novou relaci nevytvoří.
Změna řeší i opakovanou inicializaci uvnitř už založené relace. Nese-li požadavek na inicializaci hlavičku Mcp-Session-Id, server ho nově odmítne stavem 400. Běžné požadavky GET a POST naopak zaznamenají nový čas posledního použití relace.
Strop mění neomezený růst na konečné číslo, neříká však, kolik paměti smí server relacím skutečně dát. Podklady neuvádějí velikost jedné relace ani měření spotřeby při výchozích 100 000 položkách. Z toho nelze poctivě vypočítat, zda je výchozí limit bezpečný pro malou haldu paměti.
Úklid nečinných relací je ve výchozím stavu vypnutý
Druhá nová volba se jmenuje sessionIdleTimeout. Po jejím nastavení server pravidelně hledá relace, které se déle nepoužily, odstraní je z mapy a korektně je zavře. Každý platný požadavek čas posledního použití posune.
Výchozí hodnota je ale null, takže se tento úklid sám nezapne. Opuštěné relace mohou dál zůstat v paměti až do jejich výslovného smazání nebo ukončení serveru. Po dosažení limitu dostanou stav 503 i legitimní klienti, dokud se místo neuvolní. Verze 2.0.1 tedy brání nekonečnému přidávání položek, sama od sebe však nepozná, které z nich už nikdo nepotřebuje.
Spring hlídá ještě vztah ke zprávám keep-alive, jimiž server ověřuje živé klienty. Pokud vývojář zapne oba mechanismy, doba nečinnosti musí být delší než interval keep-alive. Jinak sestavení transportu skončí chybou, protože aktivní klient by mohl být odstraněn dřív, než stačí odpovědět.
Záplata vyšla hodinu a 44 minut před záznamem CVE
Spring AI 2.0.1 vyšla 21. srpna v 10:23 UTC. Záznam CVE byl zveřejněn ve 12:07 UTC téhož dne, tedy o hodinu a 44 minut později; stránka bezpečnostního upozornění nese datum 20. srpna. Poznámky k vydání opravu jmenují v oddílu chyb jako „Introduce maxSessions and sessionIdleTimeout“ a odkazují na hlášení číslo 6760.
CISA ve svém doplnění záznamu z 21. srpna neuváděla známé aktivní zneužívání. Útok ale označila za automatizovatelný a technický dopad za částečný. To odpovídá mechanismu: jednotlivé inicializace nevyžadují ruční práci, ale chyba nezasahuje důvěrnost ani správnost dat.
Aktualizace zastaví růst, limit má odpovídat serveru
Spring doporučuje přejít z verze 2.0.0 na otevřenou verzi 2.0.1; zákazníkům placené podpory nabízí také větev 2.0.0.1. Další náhradní opatření v upozornění nepožaduje. Provozovatel má přesto důvod zkontrolovat nastavení konkrétního transportu: výchozích 100 000 relací je obecná hodnota, nikoli číslo odvozené od velikosti jeho paměti a běžného počtu klientů.
U veřejně dostupného serveru dává smysl zvolit limit podle skutečné kapacity a zapnout dobu nečinnosti, která opuštěné relace vrátí do volné kapacity. Přihlášení před vstupem na server navíc zmenší okruh lidí, kteří mohou nové relace zakládat. Samotná aktualizace je nutný první krok; až vlastní limit rozhoduje, kolik rozpracovaných relací bude nasazení ochotné držet.