CVE-2026-78683: Kritisk sårbarhed i NLTK 3.9.4
Kritisk sårbarhed i NLTK: Ondsindet modelfil kan give angribere fuld kontrol over din server.
Hvad er det?
NLTK (Natural Language Toolkit) er et populært Python-bibliotek til sproganalyse og AI-tekstbehandling. I versioner op til og med 3.9.4 indeholder biblioteket en farlig fejl i den måde, det indlæser modellfiler på.
Fejlen ligger i en metode kaldet TransitionParser.parse(), der bruger en teknologi kaldet pickle (Pythons eget format til at gemme og genindlæse data). Problemet er, at indlæsningen sker uden de nødvendige sikkerhedstjek — og det gør det muligt for en angriber at gemme skadelig kode inde i en modelfil. Når din applikation åbner filen, kører koden automatisk.
Hvem rammer det?
Sårbarheden rammer dig, hvis din virksomhed bruger Python-baserede applikationer eller AI-løsninger, der:
- anvender NLTK-biblioteket i version 3.9.4 eller ældre,
- indlæser maskinlæringsmodeller fra filer — f.eks. parsere til tekstanalyse, chatbots eller dokumentbehandling,
- henter modelfiler fra eksterne kilder, brugere eller tredjeparter.
Det er typisk udviklere, datateams og virksomheder, der bruger NLP (Natural Language Processing, dvs. computerprogrammer der forstår menneskesprog) i deres produkter eller interne systemer.
Hvad kan ske?
Hvis en angriber udnytter fejlen, kan vedkommende få din server eller applikation til at udføre vilkårlig kode — dvs. præcis det kode, angriberen selv bestemmer. I praksis betyder det:
- Datatyveri: Angriberen kan kopiere følsomme data, kunder- og medarbejderoplysninger.
- Ransomware: Systemet kan krypteres og tages som gidsel.
- Bagdør: Angriberen kan installere skjult adgang og vende tilbage, når det passer dem.
- Sabotage: Tjenester og systemer kan lukkes ned eller manipuleres.
Angrebet kræver, at en bruger (eller et automatiseret system) åbner en ondsindet modelfil — men det er en lav barriere, da modelfiler ofte deles og hentes automatisk.
Hvor alvorligt er det?
Sårbarheden er vurderet til 9,6 ud af 10 (Kritisk) af det internationale sikkerhedssystem CVSS. Det er næsten det højeste, man kan få.
- Netværksbaseret: Angrebet kan gennemføres over internettet — angriberen behøver ikke fysisk adgang.
- Lav kompleksitet: Det kræver ikke avancerede færdigheder at udnytte fejlen.
- Ingen særlige rettigheder nødvendige: Angriberen behøver ikke at være logget ind på dit system på forhånd.
- Fuld konsekvens: Fortrolighed, integritet og tilgængelighed er alle fuldt kompromitterede (H/H/H).
Det eneste, der holder scoren fra den absolutte top, er, at angrebet kræver en brugerhandling — f.eks. at en fil åbnes.
Hvad gør jeg nu?
Hvis din virksomhed bruger NLTK, skal du handle hurtigt. Her er hvad du gør:
- Tjek om I bruger NLTK: Spørg din IT-ansvarlige eller udvikler om NLTK-biblioteket anvendes i jeres systemer eller applikationer.
- Find versionen: Hvis ja, find ud af hvilken version I kører. Er den 3.9.4 eller ældre, er I sårbare.
- Opdatér til version 3.10.0 eller nyere: Det gøres typisk med kommandoen
pip install --upgrade nltk. Fejlen er rettet i version 3.10.0. - Undgå utroværdige modelfiler: Indlæs ikke pickle-baserede modelfiler fra ukendte eller ubekræftede kilder, indtil opdateringen er på plads.
- Test efter opdatering: Sørg for at jeres applikationer stadig fungerer korrekt efter opdateringen.
- Kontakt os: Er du i tvivl om noget, er du velkommen til at kontakte Auroa for en vurdering af din eksponering.
Opdatér inden for 48 timer
Vi anbefaler, at du straks opdaterer NLTK til version 3.10.0. Opdateringen er tilgængelig nu og lukker hullet fuldstændigt. Begræns i mellemtiden indlæsning af modelfiler til kendte og verificerede kilder — og undlad at lade brugere uploade modelfiler til jeres systemer, hvis det kan undgås. Kontakt Auroa, hvis du er usikker på, om din løsning er eksponeret.
Tidslinje
Konkrete eksempler
Ondsindet modelfil via e-mail eller fil-upload
En angriber opretter en tilsyneladende normal NLTK-parserfil og sender den til en virksomhed, der bruger NLTK til at analysere kundetekst. En medarbejder indlæser filen i applikationen — og i det øjeblik kører skjult kode, der giver angriberen fjernadgang til serveren. Angriberen kan nu frit bevæge sig rundt i systemet og stjæle data.
Kompromitteret modelrepository
En virksomhed henter automatisk sprogmodeller fra en tredjeparts model-database som del af deres AI-pipeline. Angriberen infiltrerer databasen og erstatter en legitim model med en ondsindet pickle-fil. Næste gang virksomhedens system automatisk opdaterer sine modeller, indlæses den ondsindede fil — og angrebet sker uden menneskelig indgriben.
Intern sabotage via delt netværksdrev
En ondsindet aktør — eller en medarbejder, der uvidende videresender en inficeret fil — placerer en manipuleret NLTK-modelfil på virksomhedens interne drev. Et automatiseret system, der jævnligt indlæser opdaterede modeller fra drevet, henter filen og eksekverer den skadelige kode. Resultatet kan være ransomware, datatyveri eller systemnedbrud.
Ofte stillede spørgsmål
Hvad er pickle, og hvorfor er det farligt her?
Pickle er Pythons eget format til at gemme og gendanne data og objekter — lidt ligesom at pakke noget ned og pakke det op igen. Problemet er, at pickle-formatet kan indeholde instruktioner, der køres automatisk, når filen åbnes. Uden sikkerhedstjek kan en angriber putte skadelige instruktioner ind i en pickle-fil, og de udføres uden varsel, når din applikation indlæser den.
Skal jeg bekymre mig, hvis vi ikke selv udvikler software?
Ja, potentielt. Mange AI-værktøjer, tekstanalysesystemer og chatbot-løsninger bygger på NLTK under motorhjelmen — også selvom din leverandør har bygget en brugerflade ovenpå. Spørg din softwareleverandør, om deres produkt bruger NLTK, og om de har opdateret til version 3.10.0.
Er vi kun sårbare, hvis vi henter modelfiler fra internettet?
Ikke nødvendigvis. Angrebet kan også ske, hvis en intern medarbejder utilsigtet deler en kompromitteret fil, eller hvis en leverandør sender jer en ondsindet modelfil. Selv filer fra tilsyneladende betroede kilder kan være manipuleret, hvis leverandørens systemer er kompromitterede.
Hvad betyder det, at angrebet kræver brugerinteraktion?
Det betyder, at en person eller et system aktivt skal åbne eller indlæse den ondsindede fil, før angrebet virker. Angriberen kan ikke bare angribe jer uden videre — men i mange automatiserede systemer sker fil-indlæsning uden nogen tænker over det, så denne beskyttelse er i praksis meget begrænset.
Er der en midlertidig løsning, hvis vi ikke kan opdatere med det samme?
Ja. Den vigtigste forholdsregel er at stoppe med at indlæse pickle-baserede modelfiler fra ukendte eller eksterne kilder. Hvis jeres system giver brugere mulighed for at uploade modelfiler, bør denne funktion deaktiveres midlertidigt. Kontakt Auroa, hvis I har brug for hjælp til at vurdere jeres risiko og mulige midlertidige tiltag.
Retter opdateringen til NLTK 3.10.0 fejlen fuldstændigt?
Ja. Version 3.10.0 løser problemet ved at aktivere sikker deserialisering (den indbyggede
RestrictedUnpickler) i de berørte kodestier, så vilkårlig kodeudførelse ikke længere er mulig. Opdateringen anbefales til alle brugere af NLTK.
Ramte produkter
CVSS-detaljer
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
CWE-svaghedstyper
Original NVD-beskrivelse (engelsk)
NLTK before 3.10.0 (affected versions <=3.9.4) contains an unsafe pickle deserialization vulnerability in the TransitionParser.parse() method (nltk/parse/transitionparser.py). The method calls pickle_load() with the default restricted=False, routing deserialization through WarningUnpickler, which does not override find_class() and therefore permits arbitrary class resolution. When an application loads an attacker-crafted model file, embedded pickle gadget chains execute arbitrary Python code with the privileges of the user running the application. NLTK provides a RestrictedUnpickler for safe deserialization, but it is not used by production code paths. Fixed in 3.10.0.
Brug for hjælp med jeres sikkerhed?
Vi hjælper SMV’er med at omsætte trusler som denne til konkrete handlingsplaner.
