CVE-2026-80104: Kritisk sårbarhed i DB-GPT
CVE-2026-80104 i DB-GPT lader uautoriserede angribere uploade filer og køre kode på serveren. Isolér adgangen i dag.
Hvad er det?
DB-GPT er en open source platform til AI-agenter og dataanalyse, som virksomheder selv installerer og drifter på egne servere. Fejlen ligger i funktionen skill_upload, der modtager en fil og gemmer den under et filnavn, som brugeren selv bestemmer. Systemet bygger destinationsstien direkte ud fra dette filnavn uden at tjekke, om resultatet stadig ligger inde i den tilsigtede upload-mappe. Det betyder, at et filnavn som ../../../tmp/x eller en absolut sti kan placere filen et helt andet sted på serveren, blandt andet inde i applikationens egen kodemappe. Samtidig returnerer det tilhørende godkendelsestjek altid administratorrettigheder, uanset om der medsendes et brugernavn i forespørgslen. Endpointet kan derfor kaldes helt uden konto eller login.
Hvem rammer det?
Sårbarheden rammer organisationer, der selv har installeret og drifter DB-GPT, typisk som intern platform til AI-understøttet dataanalyse eller agentbaseret automatisering. Det gælder specifikt installationer, hvor endpointet skill_upload i agentic_data_api.py er tilgængeligt, enten internt på netværket eller eksponeret mod internettet. NVD-data angiver ikke konkrete versionsnumre, så I bør selv tjekke jeres installerede version mod leverandørens changelog.
Hvad kan ske?
En angriber uden konto kan uploade en fil og bestemme, hvor på serveren den skal lægges. I praksis kan angriberen placere en ny Python-fil inde i applikationens egen kodebase eller overskrive en fil, som applikationen allerede indlæser. Næste gang den fil bliver importeret af serveren, kører angriberens kode med de samme rettigheder som selve DB-GPT-processen. Det giver fuld kontrol over serveren, adgang til data, mulighed for at installere ransomware eller bruge serveren som springbræt videre ind i netværket.
Hvor alvorligt er det?
CVSS-scoren er 9,8 ud af 10, kritisk. Angrebet kræver ingen login (PR:N) og ingen handling fra en bruger (UI:N), og det kan udføres over netværket (AV:N) med lav teknisk kompleksitet (AC:L). Konsekvensen er høj for fortrolighed, integritet og tilgængelighed, fordi en uautoriseret angriber kan skrive filer og få dem eksekveret som kode. Der er ikke oplysninger om, at sårbarheden er udnyttet i praksis endnu, men den tekniske beskrivelse er detaljeret nok til, at et fungerende angreb kan bygges hurtigt.
Hvad gør jeg nu?
Følgende trin lukker hullet og begrænser skaden, mens I venter på en officiel rettelse.
- Tjek om leverandøren har udgivet en opdateret version af DB-GPT, og opdatér til den, hvis den findes.
- Findes der endnu ingen rettelse, så afskær adgangen til skill_upload-endpointet fra internettet, og placér installationen bag VPN eller firewall, så kun betroede medarbejdere kan nå den.
- Gennemgå og ret godkendelsestjekket, så administratorrettigheder ikke tildeles uden en gyldig bruger-id.
- Gennemgå upload-mappen og applikationens kodemappe for uventede eller nyligt ændrede filer, især .py-filer, og fjern dem.
- Gennemgå logfiler for uventede filnavne med ../ eller absolutte stier i uploadanmodninger.
- Kontakt en ekstern sikkerhedsrådgiver, hvis I finder tegn på kompromittering, eller hvis I ikke selv kan afgøre, om systemet er sikkert.
Isolér adgangen i dag
Vi anbefaler, at I straks fjerner offentlig adgang til DB-GPT’s upload-endpoint og verificerer, om der findes en opdateret version fra leverandøren. Det er ikke forsvarligt at vente, fordi angrebet kan udføres uden konto og uden brugerinteraktion. Det er kun i orden at vente, hvis installationen allerede er fuldstændig isoleret fra internettet og eksterne netværk, og ingen uautoriserede har adgang til det interne netværk, hvor den kører.
Tidslinje
Konkrete eksempler
Intern AI-platform eksponeret ved en fejl
En dansk kommune bruger DB-GPT internt til at lade sagsbehandlere stille spørgsmål til egne datasæt. Platformen er ved en netværksfejl tilgængelig fra internettet uden ekstra beskyttelse. En angriber finder skill_upload-endpointet, uploader en fil, der lander inde i applikationens kodemappe, og får kode kørt på serveren med adgang til kommunens interne data.
Ofte stillede spørgsmål
Er vi ramt af denne sårbarhed?
I er ramt, hvis I selv har installeret og driver DB-GPT, og endpointet skill_upload er tilgængeligt på netværket. Tjek jeres installerede version, og se om upload-funktionen kan nås uden login.
Hvordan tjekker vi, om vi er sårbare?
Se om jeres DB-GPT-installation eksponerer skill_upload uden krav om gyldig brugerheader, og gennemgå upload-mappen samt applikationens kodemapper for uventede filer eller ændringer.
Kan vi vente til weekenden med at rette det?
Nej, ikke hvis installationen er tilgængelig fra internettet eller et ubetroet netværk. Angrebet kræver ingen konto og ingen brugerhandling, så I bør afskære adgangen samme dag, I læser dette.
Findes der en officiel opdatering?
NVD-data angiver ikke et konkret patch-tidspunkt. Tjek leverandørens GitHub-repository og changelog for en rettet version, og opdatér, så snart den er tilgængelig.
Skal vi anmelde noget til Datatilsynet?
Hvis I finder tegn på, at data er blevet tilgået eller ændret uautoriseret, og der er tale om persondata, skal I vurdere anmeldelsespligten efter databeskyttelsesreglerne som ved enhver anden datalæk.
Hvad er DB-GPT egentlig?
DB-GPT er en open source platform, som virksomheder bruger til at bygge AI-agenter og automatiseret dataanalyse ovenpå egne datakilder, typisk driftet internt på egen infrastruktur.
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)
DB-GPT builds the destination path for an uploaded skill from the multipart filename without constraining it to the upload directory. skill_upload in packages/dbgpt-app/src/dbgpt_app/openapi/api_v1/agentic_data_api.py takes file.filename as given and writes the request body to upload_dir / filename. A path composed with that operator discards the left operand when the right one is absolute and follows parent references otherwise, so a filename such as ../../../tmp/x or /tmp/x resolves outside the intended directory; nothing canonicalises the result, checks that it remains under the upload root, or prevents a .py suffix. The route’s only dependency is get_user_from_headers in dbgpt_serve/utils/auth.py, which returns a request carrying the admin role whether or not a user_id header is supplied, so the endpoint is reachable without credentials. A remote attacker holding no account can therefore write attacker-controlled bytes to any path the server process can write, place a new Python module inside the application package or replace one the application already imports, and obtain code execution in the server process when that module is next imported.
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.