Använda JWT med öppna ögon – risker med att blint lita på tredjepartspaket
Av Idego Group

JSON Web Token är en standard definierad i RFC 7519 för säker dataöverföring mellan tjänster. Den ger dataintegritet och gör det möjligt för en tjänst att verifiera att en token inte har manipulerats under överföringen. Webbutvecklare lägger ofta ut JWT-implementering till tredjepartspaket och antar att de är korrekta och säkra. Att blint lita på dessa paket kan dock få allvarliga säkerhetskonsekvenser.
En JWT består av tre base64-kodade element separerade med punkter: header, payload och signatur. Headern anger tokentypen och algoritmen som används för att skapa signaturen. Payloaden innehåller de funktionella data, till exempel användaridentifiering. Signaturen garanterar dataintegritet genom att signera den kodade headern och payloaden med en privat nyckel.
RFC 7519 tillåter none som ett värde för alg-headerparametern, avsett för fall där datasäkerhet tillhandahålls genom andra medel. Dåligt implementerade JWT-paket kan dock antingen returnera ett 500-fel eller helt kringgå signaturverifiering när detta värde påträffas. Detta kan göra det möjligt för angripare att skicka osignerade tokens och ta emot känsliga data utan någon verifiering.
En kritisk sårbarhet kan uppstå när klienter kan ange HS256 som algoritm medan de signerar med serverns publika nyckel. Felaktigt konfigurerade system kan verifiera med HMAC och samma publika nyckel och därigenom helt kringgå den avsedda säkerheten. En angripare kan förfalska tokens genom att signera med en offentligt tillgänglig nyckel och samtidigt hävda att använda en symmetrisk algoritm.
Base64-avkodning ensam verifierar inte en tokens äkthet. Att enbart avkoda header- och payloaddatan bekräftar inte att token kom från den påstådda källan eller inte har ändrats. Ett vanligt misstag innebär att använda enbart avkodningsfunktioner snarare än verifieringsfunktioner som kontrollerar den kryptografiska signaturen.
Säkerhetspaket är bara lika pålitliga som deras implementeringar. Även om tredjepartslösningar generellt sett är lämpliga bör utvecklare noggrant förstå hur de fungerar. Håll paket uppdaterade, övervaka för sårbarheter och uppgradera snabbt när problem hittas.