Notes about the post-XSS world

Content Security Policy is gaining steam, and we've seen a flurry of other complementary approaches that share a common goal: to minimize the impact of markup injection vulnerabilities by preventing the attacker from executing unauthorized JavaScript. We are so accustomed to thinking about markup injection in terms of cross-site scripting that we don't question this approach - but perhaps we should?


This collection of notes is a very crude thought experiment in imagining the attack opportunities in a post-XSS world. The startling realization I had by the end of that half-baked effort is that the landscape would not change that much: The hypothetical universal deployment of CSP places some additional constraints on what you can do, but the differences are not as substantial as you may suspect. In that sense, the frameworks are conceptually similar to DEP, stack canaries, or ASLR: They make your life harder, but reliably prevent exploitation far less frequently than we would have thought.


Credit where credit is due: The idea for writing down some of the possible attack scenarios comes from Mario Heiderich and Elie Bursztein, who are aiming to write a more coherent and nuanced academic paper on this topic, complete with vectors of their design, and some very interesting 0-day bugs; I hope to be able to contribute to that work. In the meantime, though, it seems that everybody else is thinking out loud about the same problems - including Devdatta Akhawe and Collin Jackson - so I thought that sharing the current notes may be useful, even if the observations are not particularly groundbreaking.

X-Frame-Options, or solving the wrong problem

On modern computers, JavaScript allows you to exploit the limits of human perception: you can open, reposition, and close browser windows, or load and navigate away from specific HTML documents, without giving the user any chance to register this event, let alone react consciously.


I have discussed some aspects of this problem in the past:
my recent entry showcased an exploit that flips between two unrelated websites so quickly that you can't see it happening; and my earlier geolocation hack leveraged the delay between visual stimulus and premeditated response to attack browser security UIs.


A broader treatment of these problems - something that I consider to be one of the great unsolved problems in browser engineering - is given in "The Tangled Web". But today, I wanted to showcase another crude proof-of-concept illustrating why our response to
clickjacking - and the treatment of it as a very narrow challenge specific to mouse clicks and <iframe> tags - is somewhat short-sighted. So, without further ado:


There are more complicated but comprehensive approaches that may make it possible for web applications to ensure that they are given a certain amount of non-disrupted, meaningful screen time; but they are unpopular with browser vendors, and unlikely to fly any time soon.

Fortsatt gambling

I sitt tilsvar til meg i DN i går fortsetter Bjørn Nesse Hunderi å argumentere for at kraftaksjer er så fantastiske investeringer for norske kommuner at vi må ha en lov som påtvinger dem eierskap.


Det er imidlertid fortsatt slik at både empiri og teori tilser at en mer spredt investering gir høyere avkastning i forhold til risiko enn eierskap i én enkelt bedrift.

Hunderi forklarer oss videre at Troms Krafts sørgelige svenske eventyr kunne vært unngått om bare man hadde forstått at man ikke burde investere i utlandet. Dette er en ad hoc argumentasjon som er veldig enkel å komme med i ettertid. Alle slike saker har noe spesielt ved seg, så en vil alltid kunne bortforklare dem som særtilfeller.

Så lenge Hunderi ikke framsatte denne kritikken for ti år siden blir imidlertid disse bortforklaringene helt uinteressante. All næringsvirksomhet innebærer risiko for tap. Kraftselskap er dessverre ikke noe unntak.

Det eneste som gjenstår av argumenter er dermed at kommunene må tvinges til ikke å bruke opp investeringene på forbruk. Det kan være fornuftig, men dersom dette er hovedproblemet så burde man vel ha en lov som regulerer akkurat det? Å lovregulere at kommuner skal ta stor risiko ved å eie kraftselskaper når målet er at de ikke skal bruke for mye penger virker lite treffsikkert.

The old switcharoo

Another tiny proof-of-concept for the day:



While the idea is fairly trivial, it seems pretty frightening to me - and neatly illustrates one of the points I'm making in
The Tangled Web. I highly doubt that even the most proficient and attentive users would be able to spot this happening in the wild.


(If you don't get it, try again, and follow instructions on the screen.)


Interesting results can be also achieved in some browsers with history.back(), but I'll leave this as an exercise for readers. The same goes for the implications it has for clickjacking, drag-and-drop, and other attacks normally associated with frames.


PS. Another silly proof-of-concept as a bonus: click here.

Ja, de gambler

Jeg kan forsikre Bjørn Nesse Hunderi (DN i går) om at jeg slett ikke er forarget over at kommuner er tvunget til å gamble med innbyggernes penger. Jeg presenterer bare noen fakta om hvilken risiko kommunene reelt sett tar, hvorfor dette ikke er hensiktsmessig og at det faktisk er i strid med kommuneloven. Jeg er likevel klar over at fakta kan provosere, så jeg skjønner Hunderis forargelse.

Hunderi mener å ”oppklare” at Troms Krafts ruinerte svenske datterselskap ikke er kraftprodusent. Når Hunderi åpenbart mener at dette har noen som helst betydning, så kan han ikke ha satt seg veldig godt inn i saken. Kraftselskap som driver med andre ting enn bare produksjon av vannkraft er regelen og ikke unntaket.

Hunderi forklarer også hvorfor det gikk så galt for TK i Sverige. Det er jo fint, men han er ti år for sent ute. Med hundrevis av kommuner tungt investert i administrasjonsstyrte kraftselskaper med svake eiere, akkurat som TK, er potensialet for nye tap enormt. Det hadde vært interessant om Hunderi i stedet kunne fortalt oss hvor neste økonomiske katastrofer dukker opp. Etterpåklokskap er like enkelt som det er unyttig.

Hunderi mener også å vite at jeg ikke har gode argument for å hevde at å eie store posisjoner i ett enkelt selskap gir høy risiko. For at min påstand skal være usann må vi omskrive mesteparten av moderne sannsynlighetsteori. I tillegg må vi forkaste den overveldende empiriske forskningen som viser at aktiv forvaltning, for eksempel i form av å bare satse på vannkraftverk, ikke lønner seg. Alternativet er at Hunderi tar feil. Jeg tror mest på det siste.

Kommunal gambling

Kommunalt eierskap til kraftselskap har kostet Tromsø Kommune og Troms Fylkeskommune opp til halvannen milliard. Om noen fortsatt skulle være i tvil, det er risikabelt å eie enkeltaksjer.

Dagens lovgivning tillater i praksis ikke salg av kraftselskaper til private. Kommuner som eier kraftselskap er dermed forpliktet til å gamble med innbyggernes penger. Ved å sette mesteparten av kommunens investeringer i samme aksjeselskap eksponerer den seg helt unødvendig for potensielle katastrofer. Troms Kraft har tapt halvannen milliard på et svensk luftslott. Om Tromsø Kommune hadde eid 1% og ikke 40% av kraftselskapet, så hadde denne saken vært en bagatell.

Forbudet mot salg til private betyr at konkurransen blir minimal og prisen på kraftselskapene for lav. Av den grunn bør ingen kommuner selge sine kraftaksjer i dag. Nå er det riktignok tillatt å selge én tredjedel av aksjene til private, men ingen vil betale full pris for en minoritetspost. Kraftkommunene er dermed låst til høyrisikoinvesteringer i enkeltselskap.

Industrikonsesjonsloven som i praksis pålegger slikt eierskap er dermed i direkte motstrid med kommuneloven. Forbudet mot privat majoritetseierskap i innebærer at kommuner er tvunget til å ta vesentlig finansiell risiko. Kommuneloven forbyr dette.

De enorme tapene til Troms Kraft viser med all tydelighet at risikoen er reell. Tromsø kommune har trolig tapt 5-600 millioner på noe som nærmest er å betrakte som et statlig pålegg. For Troms Kraft er dette heller ikke den eneste uheldige begivenheten. Selskapet har også etter manges mening betalt overpris for kraftverk i Nordland etter et hastverksvedtak i styret. Med omlag 350 kommunalt eide kraftselskap vil slike problemer dukke opp igjen og igjen.

Katastrofer av denne type er ikke uvanlig i aksjeselskap. Tvert i mot er aksjemarkedet preget av en nær sagt kontinuerlig strøm av uventede hendelser. Verdier kan fordobles og halveres på kort tid. Det kan være alvorlige produksjonsfeil, utro medarbeidere, arbeidsuhell og alt mulig annet vi ikke kan forutse. Ikke alle hendelser er av det negative, men når negative hendelser inntreffer kan det ruinere en investor som har satset alle pengene sine på én hest.

En eier av en bred portefølje vil få akkurat samme forventede inntekt over tid. Eneste forskjell er at risikoen faller dramatisk. Sannsynligheten for at alle selskapene i porteføljen er uheldige samtidig er lik null. Ingen bør derfor holde porteføljer med én aksje.

Unntaket er dem som har særlig informasjon eller er særlig kompetent og direkte involvert i styringen av virksomheten. Ingen av disse alternativene passer på en kommune. Tvert i mot er de fleste kommuner uegnet til å drifte rene kommersielle selskaper. Dette faller ikke inn under kommunens hovedoppgaver, en byråkrat på fastlønn har ingen motivasjon til å ta ut rasjonaliseringsgevinster og politikerne er i hovedsak ikke valgt på grunn av sine egenskaper som bedriftsledere. Om det er viktig for innbyggerne å eie kraftselskap kan de kjøpe aksjene selv.

Risiko kan naturligvis også slå positivt ut. Det finnes eksempler på at kjøpere av kommunale kraftselskap har tjent mer enn børsindeksen på sin investering. Det vil ikke alltid lønne seg å investere i en bred børsindeks. Poenget er at det er betydelig mindre usikkerhet rundt kontantstrømmen fra en bred portefølje sammenlignet med enkeltselskap. Hovedkritikken mot Terra-kommunene var at de tok for mye risiko, ikke at de tapte på den konkrete investeringen. Beslutningen om å satse på risikable kredittderivater hadde vært like håpløs selv om kommunene hadde hatt flaks og tjent penger på det.

For en kommune som har forutsigbare forpliktelser er det derfor uhensiktsmessig å eie og drive en risikabel forretningsvirksomhet når det finnes bedre og mindre risikable alternativer. Jeg har bare hørt ett holdbart argument for slik eierskap, og det er hensynet til befolkningens følelser. Det spørs imidlertid om ikke følelsene for bedre skole og omsorgsvesen er sterkere enn følelsene for krafteierskap.

CSS :visited may be a bit overrated

OK, second time is a charm. This script is probably of some peripheral interest:

In the past two years or so, a majority of browser vendors decided to take a drastic step of severely crippling CSS :visited selectors in order to prevent websites from stealing your browsing history.


It is widely believed that techniques such as cache timing may theoretically offer comparable insights, but the attacks demonstrated so far seemed unconvincing. Among other faults, they relied on destructive, one-shot testing that altered the state of the examined cache; produced only probabilistic results; and were far too slow and noisy to be practically useful. Consequently, no serious attempts to address the underlying weakness have been made.


My proof of concept is fairly crude, and will fail for a minority of readers; but in my testing, it offers reliable, high-performance, non-destructive cache inspection that blurs the boundary between :visited and all the "less interesting" techniques.