Sårbarhet • Artikel
12 april, 2021
Går det att skydda sig mot skadlig kodinjektion?
Vid en skadlig kodinjektion försöker en angripare injicera kod via användarens webbläsare. Vanligtvis försöker man utnyttja en sårbarhet i webbläsaren eller i ett insticksprogram till webbläsaren, som exempelvis Adobe Flash eller Java. En väl genomförd attack kan leda till förödande konsekvenser, då skadlig kod potentiellt kan sprida sig vidare i IT-miljön ifall användaren har långtgående rättigheter på klienten.
Många av de moderna webbläsarna erbjuder funktioner för att begränsa hur script tillåts exekvera, i den artikeln kommer vi främst titta på två; subresource integrity och content security policy.
Subresource Integrity
Subresource Integrity är en mekanism för att säkerställa att script levererade via tredje part (t.ex. via CDN) inte har modifierats. Detta görs genom att man i script-tagen bäddar in en kryptografisk hashsumma av scriptet man länkar in.
Om man normalt länkar in script via t.ex. följande direktiv inom script-taggen:
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"
så ändrar man det till följande och placerar inom script-taggen:
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"
Värdet på ”integrity”-attributet räknas ut från den aktuella filen, exempelvis med följande kommandorad i Linux och på Mac:
cat jquery.min.js | openssl dgst -sha256 -binary | openssl enc -base64 | sed 's/^/sha256-/g'
Det finns även en rad onlinetjänster som räknar ut detta; sök på ”SRI Hash Generator”. Värdet måste alltså börja med namnet på hashalgorimtmen som använts, i detta fall sha256, och man måste normalt även lägga till attributet crossorigin=”anonymous”.
Om det utpekade scriptet förändras så att den angivna hashsumman inte längre stämmer så kommer inte scriptet att laddas. Detta innebär dock att även legitima förändringar – så som uppdateringar – innebär att scriptet slutar att laddas, vilket innebär att detta i första hand är användbart för resurser som man förväntar sig inte kommer att förändras ofta. Samma mekanism kan användas för att skydda css-filer belägna hos tredjepart.
Detta stöds i Firefox, Chrome, Safari och Opera sedan ett antal versioner tillbaka, och i Microsoft Edge sedan version 17. I webbläsare som inte stödjer detta kommer kontrollen helt enkelt att ignoreras.
Content Security Policy
Content Security Policy, eller CSP, är ett ramverk för att styra hur script och andra resurser får hämtas och hanteras i webbläsaren. Direktiven skickas i HTTP response-headrar (vissa direktiv kan även användas i HTML <meta>-taggar). Det primära syftet med ramverket är att stoppa sk. Cross Site Scripting (eller XSS)-attacker, genom att man i direktiven anger exakt under vilka omständigheter script skall tillåtas.
Detta gör det bland annat möjligt att blockera samtliga script utom de som laddas från en lista av betrodda källor, helt förbjuda inline-scripts samt stänga av osäkra JavaScript-funktioner. Genom att skicka HTTP-headern:
Content-Security-Policy: require-sri-for script
Kontakta oss
Vi erbjuder flera kontaktvägar och återkopplar så snart som möjligt. Har du känslig information ber vi dig att maila krypterat.
08-545 333 00
Vi svarar dygnet runtinfo@sentor.se
För generella förfrågningarsoc@sentorsecurity.com
Använd vår PGP-nyckel