JSON Hijacking avser en säkerhetsbrist som utnyttjar webbrowsers cross-domain-policy för att stjäla känslig information från ett JSON-svar. JSON, som står för JavaScript Object Notation, är ett lättviktsformat för datautbyte som ofta används för klient-serverkommunikation i webbapplikationer.
JSON Hijacking fungerar genom följande steg:
Hämta data från en annan domän: När en webbapplikation hämtar data från en annan domän med hjälp av JavaScript, görs vanligtvis en begäran till en API-slutpunkt som svarar med JSON-data.
Kors-domain frågor: För att skydda mot kors-sajt förfalskningsattacker (CSRF), tillåter många webbapplikationer kors-domänfrågor för JSON-data.
Manipulera webbläsaren: En angripare utnyttjar denna cross-origin-policy genom att lura offrets webbläsare att göra en begäran till måldomänen. Denna begäran inkluderar offrets autenticeringsuppgifter, såsom cookies.
Interception och datatillgång: Angriparens server fångar upp begäran och får tillgång till JSON-data, som ofta innehåller känslig information.
För att minska risken för JSON Hijacking kan du följa dessa förebyggande tips:
Implementera Cross-Origin Resource Sharing (CORS) på servern: CORS gör det möjligt att specificera vilka domäner som får åtkomst till JSON-data. Genom att konfigurera CORS korrekt kan du begränsa åtkomst till betrodda och auktoriserade domäner.
Undvik att inkludera känslig data i JSON-svar: Det är avgörande att säkerställa att känslig information, såsom autentiseringstoken eller personligt identifierbar information (PII), inte inkluderas i JSON-svaren. Genom att hålla känslig data åtskild från JSON-data minskar du risken för att den kommer åt av angripare.
Säkra känsliga data med kryptering och tokenisering: Kryptering av känslig data innan den överförs i JSON-svar lägger till ett extra skyddslager. Tokenisering kan också användas för att ersätta känslig data med tokens, vilket ytterligare minskar risken för dataexponering.
Undvik att använda metoden document.write
för att hantera JSON-svar: Metoden document.write
kan introducera säkerhetsbrister genom att låta en angripare injicera skadligt innehåll på sidan. Använd istället mer säkra metoder för att dynamiskt rendera JSON-data i din webbapplikation.
År 2007 upptäcktes en JSON Hijacking-sårbarhet på Twitters webbplats. Sårbarheten gjorde det möjligt för en angripare att stjäla en användares direkta meddelanden genom att manipulera JSON-svaret från servern.
Attacken involverade att lura offret att besöka en speciellt utformad webbplats som gjorde cross-domain JSON-begäranden till Twitters API. När svaret mottogs kunde angriparens JavaScript-kod komma åt JSON-data, inklusive användarens direkta meddelanden.
Twitter åtgärdade snabbt denna sårbarhet genom att implementera motåtgärder, såsom att använda prefixet while(1);
för att förhindra JSON Hijacking-attacker.
JSON with Padding (JSONP) är en alternativ metod för JSON-baserad kommunikation som är sårbar för JSON Hijacking.
JSONP tillåter inkludering av en extern JavaScript-fil som levereras från en annan domän. En angripare kan utnyttja denna mekanism för att injicera skadlig kod i JSONP-svaret, vilket potentiellt äventyrar säkerheten i användarens webbläsare och data.
För att minska riskerna med JSONP är det viktigt att validera och sanera JSONP-svaret på serversidan och säkerställa att endast betrodda källor tillåts tillhandahålla JSONP-callbacks.
JSON Hijacking är främst en klient-side säkerhetsfråga och kräver en kombination av sårbarheter för att lyckas utnyttjas. Under de senaste åren har förbättringar av webbläsarsäkerhet, såsom SameSite-cookies och striktare CORS-policyer, gjort det mer utmanande för angripare att utföra dessa typer av attacker.
Det är värt att notera att termen "JSON Hijacking" inte är vanligt förekommande i säkerhetsgemenskapen. Istället refereras attacken vanligtvis som "JSONP Hijacking" eller "Cross-Domain JSON Hijacking."
Vissa argumenterar för att det inte enbart är webbutvecklarnas ansvar att förhindra JSON Hijacking. Webbrowsers och webbstandarder bör också spela en roll i att genomföra striktare säkerhetsåtgärder för att mildra denna sårbarhet.
Cross-Site Scripting (XSS): En typ av attack där skadliga skript injiceras i webbsidor som ses av andra användare.
Cross-Origin Resource Sharing (CORS): En mekanism som tillåter begäran av resurser från en annan domän.
Cross-Site Request Forgery (CSRF): En attack som tvingar en slutanvändare att utföra oönskade åtgärder på en webbapplikation där de är inloggade.