En enkelt besked, der kører som root

JFrogs sikkerhedsforskning offentliggjorde CVE-2026-105192 den 7. oktober og satte 9,8 og kritisk. Hullet blev fundet af Yuval Moravchick i samme team. Da rådgivningen udkom, fandtes ingen rettet version.

LMCache er det nøgle-værdi-cachelag, som vLLM-installationer bruger til at holde opmærksomhedscacher i live mellem forespørgsler og mellem maskiner. I flerproces-tilstand åbner det en ZeroMQ ROUTER-socket uden CURVE-kryptering, uden ZAP-godkendelse, uden adgangskode og uden nogen form for beskedgodkendelse. Beskeder ankommer som msgpack. Udvidelseskode 1 er registreret til en type ved navn DeviceIPCWrapper, hvis metode Deserialize kalder Pythons pickle.loads.

Det kald sker, mens serveren afkoder argumenterne til en REGISTER_KV_CACHE-forespørgsel — før nogen handlerlogik kører. En enkelt uautentificeret besked kører altså kode som LMCache-processens bruger. De officielle containerbilleder kører den proces som root.

Om du er udsat afgøres af et enkelt flag

Tallet 9,8 er ikke hele billedet, og det siger JFrog selv. Transporten binder til localhost, medmindre operatøren sætter en routbar adresse med --host, og den kritiske score gælder den routbare opsætning. Med rådgivningens ord: “En standardinstallation på en enkelt vært, der beholder standardbindingen, kan ikke nås fra andre maskiner.”

LMCache, der kun bruges inde i en vLLM-proces, åbner slet ikke porten. Den udsatte form er flerknude-installationen — den, man griber til, når én maskine ikke længere slår til, og som også er den, der med størst sandsynlighed kører produktionstrafik.

Netværkskabler sat i portene på en switch
Den sårbare transport lytter på port 5555 og godkender ingenting. Illustrationsbillede. Vladimir Srajber · pexels · Pexels License

Ingen rettelse, så modtrækkene er dine

Version 0.3.9 og senere er berørt. JFrog beder projektet udskifte serialiseringen bag msgpack-udvidelseskode 1 med et sikkert format, holde op med at kalde pickle.loads på data fra uautentificerede modparter, godkende transporten med CURVE eller en HMAC per besked, og afvise en routbar binding uden konfigureret godkendelse.

Indtil en rettet udgave findes, er rådet til driftsansvarlige kort: sæt ikke --host til en routbar adresse, hold port 5555 på localhost eller et betroet klyngenetværk, og sæt en firewall foran. JFrog tilføjer forbeholdet, der tæller — den, der kan forbinde, kan stadig køre kode som LMCache-brugeren.

Samme fejlklasse, to gange på en uge

At afserialisere netværksdata med pickle er en Python-fejl med tyve års papirspor, og den dukker nu op i rørføringen omkring modeltjenester. Ved Pwn2Own i Irland samme uge faldt LiteLLM allerede første dag på mangelfuld inputvalidering kædet sammen med kodeindsprøjtning, til 40.000 dollar, og et andet hold tog det med fire fejl mere.

Det AI-specifikke her er ikke sårbarheden. Det er, at et cachelag mellem en modelserver og dens grafikprocessorer blev bygget med et uautentificeret styringsplan, fordi installationen blev antaget at ligge på et betroet netværk.

Lagerhylder fyldt med mærkede papkasser
LMCache holder opmærksomhedscacher i live mellem forespørgsler og maskiner. Illustrationsbillede. Tima Miroshnichenko · pexels · Pexels License

Hvad du bør tjekke i aften

To spørgsmål afgør det meste: kan port 5555 nås fra andet end værten, og kører containeren som root? Er svaret ja på begge, beskriver rådgivningen en vej fra en enkelt pakke til en shell på en maskine, hvor dine modelvægte ligger.

Det, man skal holde øje med, er den rettede udgave. Indtil da er dette et kendt, scoret og offentligt dokumenteret hul med et rettelsesgab, i en komponent som de fleste hold, der kører vLLM i stor skala, ikke så meget valgte som arvede.