CVE-2026-76850: Kritisk RCE-fejl i LMDeploy uden login
Kritisk fejl i LMDeploy giver angribere kodeudførelse uden login. Aktivér api_keys eller sluk distserve-funktionen nu.
Hvad er det?
CVE-2026-76850 er en sårbarhed i LMDeploy, et open source-værktøj til at køre store sprogmodeller i produktion. Fejlen sidder i funktionen til disaggregeret servering (distserve), hvor en engine henter data fra en anden server via ZMQ, en beskedprotokol til hurtig kommunikation mellem processer. Modtagne data pakkes ud med pickle, et Python-format der kan indeholde kørbar kode, før programmet kontrollerer om dataene er gyldige. Endepunkterne der styrer denne forbindelse kræver ingen godkendelse, med mindre serveren er startet med en nøgle sat op, hvilket ikke sker som standard. En angriber kan derfor pege engine’en mod sin egen server og få den til at køre vilkårlig kode.
Hvem rammer det?
Sårbarheden rammer organisationer der kører LMDeploy med funktionen disaggregeret servering (distserve) aktiveret, typisk til at skalere store sprogmodeller over flere servere. Er distserve ikke aktiveret, er systemet ikke berørt, fordi modtagelsesløkken først starter når en forbindelse er accepteret. Rammer især danske virksomheder og institutioner der selv drifter AI-infrastruktur internt eller i skyen, hvor api_keys ikke er sat op.
Hvad kan ske?
En angriber uden adgangskode kan overtage den proces der kører sprogmodellen og køre sin egen kode på serveren. Herfra kan angriberen læse data, installere skadelig software eller bruge serveren som springbræl videre ind i virksomhedens netværk. For en virksomhed der bruger AI-tjenesten til at behandle kundedata eller interne dokumenter, betyder det risiko for datalæk og kompromitteret infrastruktur.
Hvor alvorligt er det?
CVSS-scoren er 9,8 ud af 10, kritisk. Angrebet kræver ingen login, ingen brugerhandling og kan udføres over netværket med lav teknisk kompleksitet. Konsekvensen er fuld: angriberen kan læse data, ændre data og stoppe systemet. Der er ikke oplyst om aktiv udnyttelse i det åbne, men opskriften er velkendt og kræver ikke avancerede værktøjer.
Hvad gør jeg nu?
Der er ikke oplyst en rettet version endnu, så I skal lukke hullet med konfiguration:
- Start LMDeploy-serveren med api_keys sat, så p2p_initialize og p2p_connect kræver godkendelse.
- Er distserve-funktionen ikke i brug, deaktivér den helt, så ZMQ-modtagelsen aldrig starter.
- Bloker adgang til ZMQ-portene fra internettet og eksterne netværk med firewall, kun betroede engine-servere skal kunne nå dem.
- Gennemgå logs for opkald til distserve-endepunkterne fra ukendte IP-adresser.
- Følg LMDeploy-projektet for en fremtidig opdatering og opgradér så snart den er tilgængelig.
- Er I i tvivl om jeres opsætning kører med distserve aktiveret, så få en ekstern gennemgang af jeres AI-infrastruktur.
Luk hullet inden for 24 timer
Vi anbefaler at I straks kontrollerer om distserve-funktionen er aktiveret i jeres LMDeploy-opsætning, og hvis den er, sætter api_keys op eller slukker funktionen. Der findes ingen rettet version at opgradere til, så konfigurationen er jeres eneste beskyttelse indtil videre. Det er ikke i orden at vente, da angrebet kræver hverken login eller brugerinteraktion og kan udføres direkte fra internettet.
Tidslinje
Konkrete eksempler
AI-tjeneste med skaleret inferens
En dansk virksomhed kører en intern AI-chatbot på LMDeploy og har aktiveret distserve for at fordele belastningen over flere servere ved høj trafik. API-serveren er sat op uden api_keys, fordi den kun skulle bruges internt. En angriber udenfor netværket finder det åbne endepunkt, peger engine’en mod sin egen ZMQ-server og får kørt kode på virksomhedens AI-server, hvorfra angriberen får adgang til interne dokumenter behandlet af chatbotten.
Ofte stillede spørgsmål
Er vi ramt af denne sårbarhed?
I er kun ramt, hvis jeres LMDeploy-installation har disaggregeret servering, distserve, aktiveret. Kør uden denne funktion, er I ikke berørt af selve fejlen.
Hvordan tjekker vi om distserve er aktiveret?
Gennemgå jeres opstartskonfiguration for LMDeploy og se om distserve-relaterede indstillinger og engine-forbindelser er sat op. Kontrollér samtidig om api_keys er konfigureret på API-serveren.
Kan vi vente til weekenden med at rette det?
Nej. Angrebet kræver ingen login og ingen brugerhandling, og det kan udføres direkte over netværket. Aktivér api_keys eller sluk distserve så hurtigt som muligt.
Findes der en opdatering, vi kan installere?
Der er ikke oplyst en rettet version på offentliggørelsestidspunktet. Beskyttelsen består derfor i konfiguration: godkendelse via api_keys eller deaktivering af distserve.
Skal vi anmelde dette som et sikkerhedsbrud?
Kun hvis I finder tegn på at sårbarheden faktisk er udnyttet, for eksempel ukendte forbindelser til jeres distserve-endepunkter eller uventet kode kørt på engine-serveren. Er der ingen tegn på misbrug, er der ikke krav om anmeldelse.
Hvem har typisk denne opsætning kørende?
Virksomheder og institutioner der selv drifter store sprogmodeller i produktion og bruger distserve til at fordele belastningen over flere servere. Almindelig brug af LMDeploy uden denne skaleringsfunktion er ikke berørt.
CVSS-detaljer
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE-svaghedstyper
Original NVD-beskrivelse (engelsk)
LMDeploy deserializes disaggregated-serving peer messages with pickle. The handle_zmq_recv coroutine in lmdeploy/pytorch/disagg/conn/engine_conn.py reads peer-to-peer cache-free requests with recv_pyobj(), which deserializes the received bytes with pickle.loads(), and the isinstance check against DistServeCacheFreeRequest runs only after deserialization has already completed. The peer that supplies those bytes is caller-controlled: p2p_connect passes remote_engine_endpoint_info.zmq_address from the request body to connect() on the ZMQ PULL socket, and the POST /distserve/p2p_initialize and /distserve/p2p_connect endpoints in lmdeploy/serve/openai/api_server.py apply no authentication unless the server is started with api_keys, which defaults to None. A remote attacker can direct an engine to pull from a ZMQ endpoint under their control and execute arbitrary code in the engine process. Deployments that do not enable disaggregated serving are not affected, because the receive loop is only started once the migration backend accepts the connection.
Referencer & kilder
Eksterne kilder
Brug for hjælp med jeres sikkerhed?
Vi hjælper SMV’er med at omsætte trusler som denne til konkrete handlingsplaner.