CVE-2026-85394: Kritisk fejl i python-jose (JWT)
Fejl i python-jose gør det muligt at forfalske login-tokens uden kodeord. Lås algoritme i koden nu.
Hvad er det?
python-jose er et Python-bibliotek, der bruges til at oprette og kontrollere JWT-tokens (JSON Web Token, en digital adgangsbillet der bekræfter, at en bruger er logget ind). CVE-2026-85394 betyder, at biblioteket ikke kontrollerer korrekt, om en nøgle er en asymmetrisk offentlig nøgle eller en symmetrisk hemmelig nøgle, når det validerer signaturen med HMAC (en metode til at lave en kontrolkode med en delt hemmelig nøgle). En angriber, der kender systemets offentlige nøgle, kan derfor lave sit eget token med HS256-algoritmen og få det godkendt, som var det udstedt af systemet selv. Fejlen er en ufuldstændig reparation af en tidligere sårbarhed, CVE-2024-33663.
Hvem rammer det?
Virksomheder og kommuner, der har udviklet egne Python-applikationer med login, API-adgang eller single sign-on, og som bruger python-jose til at verificere JWT-tokens. Alle versioner til og med 3.5.0 er ramt. Risikoen er størst, hvis koden ikke selv angiver, hvilken algoritme der skal accepteres ved verificering.
Hvad kan ske?
En angriber, der har fået adgang til systemets offentlige nøgle, ofte tilgængelig via et JWKS-endpoint eller anden offentlig kilde, kan forfalske et gyldigt login-token og udgive sig for en hvilken som helst bruger, inklusive administratorer. Det giver adgang til data og funktioner uden at kende et kodeord, og angriberen kan i praksis omgå hele login-systemet.
Hvor alvorligt er det?
CVSS 9,1 af 10, kritisk. Angrebet kræver ikke login og ingen handling fra en bruger, og det kan udføres over netværket. Konsekvensen er fuld kompromittering af fortrolighed og integritet, mens tilgængeligheden ikke påvirkes. Der er ikke rapporteret aktiv udnyttelse på offentliggørelsesdatoen, men teknikken med algoritme-forveksling i JWT-verificering er velkendt og dokumenteret.
Hvad gør jeg nu?
Det vigtigste er at rette koden, så den kun accepterer den forventede algoritme. Gør følgende i prioriteret rækkefølge:
- Gennemgå al kode, der bruger python-jose til at verificere tokens, og angiv altid algoritme explicit, fx algorithms=[“RS256”], så biblioteket ikke selv vælger algoritme baseret på tokenet.
- Kontrollér, at der ikke findes steder i koden, hvor både RS256 og HS256 accepteres samtidig i den samme verificeringsfunktion.
- Opdatér python-jose til den nyeste udgivne version, når en rettet version foreligger, og test login-flowet efter opdateringen.
- Roter jeres signeringsnøgler, hvis I finder tegn på, at den offentlige nøgle har været tilgængelig for uvedkommende, eller hvis I ser mistænkelige tokens i logs.
- Gennemgå logs for login og API-kald for usædvanlige eller uventede tokens i perioden op til rettelsen.
- Kontakt en sikkerhedsrådgiver, hvis I ikke selv har kompetencer til at gennemgå kildekoden eller vurdere jeres eksponering.
Ret koden inden for få dage
Vi anbefaler, at I gennemgår al kode, der bruger python-jose til at verificere JWT-tokens, og sikrer, at algoritme altid angives explicit, uanset om en rettet version af biblioteket er udgivet. Det er ikke forsvarligt at vente, hvis jeres system bruger asymmetrisk nøgle-baseret login uden algoritme-restriktion, fordi angrebet ikke kræver login eller brugerhandling. Har I allerede låst algoritmen i koden, kan I vente på en officiel opdatering af biblioteket.
Tidslinje
Konkrete eksempler
Selvbetjeningsportal med Python-backend
En dansk kommune har en selvbetjeningsportal, hvor borgere logger ind via et Python-baseret API, der bruger python-jose til at udstede og verificere JWT-tokens. Den offentlige nøgle er tilgængelig via et standard JWKS-endpoint. En angriber henter nøglen, forfalsker et token som en administrator, og får adgang til borgerdata uden at have et gyldigt login.
Ofte stillede spørgsmål
Er vi ramt af denne sårbarhed?
I er ramt, hvis jeres applikation bruger python-jose i version 3.5.0 eller ældre til at verificere JWT-tokens, og koden ikke explicit angiver, hvilken algoritme der skal accepteres.
Hvordan tjekker vi, om vores kode er sårbar?
Søg i kildekoden efter kald til jwt.decode eller jws.verify fra python-jose, og kontrollér, om parameteren algorithms er sat til en fast liste, fx kun RS256. Hvis parameteren mangler eller tillader flere algoritmer, er koden sårbar.
Kan vi vente til weekenden eller næste opdatering?
Det kan I, hvis I allerede låser algoritmen explicit i jeres verificeringskode. Er det ikke tilfældet, bør ændringen laves før weekenden, fordi angrebet ikke kræver login eller brugerhandling.
Hvad er et algoritme-forvekslingsangreb?
Det er et angreb, hvor en tjeneste forventer, at et token er signeret med en asymmetrisk nøgle, men i stedet accepterer et token signeret symmetrisk med den offentlige nøgle som hemmelig kode. Da den offentlige nøgle ofte er kendt, kan angriberen selv skabe et gyldigt token.
Er der en officiel opdatering af python-jose?
Der var ikke en bekræftet rettet version på offentliggørelsesdatoen. Indtil da er den korrekte handling at rette egen kode, så algoritme altid angives explicit ved verificering.
Skal vi anmelde dette til Datatilsynet?
Kun hvis I finder konkrete tegn på, at sårbarheden er udnyttet, og at persondata er blevet tilgået eller ændret uretmæssigt. Uden tegn på misbrug er der ikke grundlag for en anmeldelse.
CVSS-detaljer
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWE-svaghedstyper
Original NVD-beskrivelse (engelsk)
python-jose through 3.5.0 fails to properly validate asymmetric keys in HMAC initialization, accepting DER-encoded public keys that lack PEM armor or SSH prefixes. Attackers holding the service’s public key can forge HS256 tokens that pass verification when algorithms are not explicitly restricted. This is an incomplete fix for CVE-2024-33663.
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.