1. 1
I thought you were my friend!
Böses Markup, Browserlücken und andere Wunderlichkeiten
Vortrag von Mario Heiderich
12 / 2008
2. 2
My online cock
CSO für ormigo.com... (noch ein paar Tage zumindest)
Web Retard
FUD Peddler par excellence
Speaker auf ph-neutral, OWASP Europe, etc.
Freelance Security Researcher und Consultant
http://php-ids.org, CSRFx, qUIpt, ...
http://mario.heideri.ch/
3. 3
Speisekarte
Schein
Selbstwahrnehmung der Browser Vendors
Reputationen, Meinungen und anderer Bull
Innehalten...
Sein
Vergessene Schätze
PoCs, Exploits und Angiffsszenarien
8. 8
Nutzerverhalten
Der normale User
Klickt auf das blaue E um ins Internet rein zu kommen. Innen rein.
Klickt Warnmeldungen weg. Alle.
Web-Entwickler
Kommen (noch) nicht um Firefox herum und klicken auch alles weg.
Installieren ebenfalls alles – vor allem Extensions
Mac User
Nutzen Safari – weil von Apple. Surfen aussließlich im Apple Store.
Security-Folks
Nutzen Torpark mit NoScript, FlashBlock,
AdBlock Plus, RequestRodeo, etc..
11. 11
Und bald...
Wird das Internet noch viel bunter
HTML5, CSS3, Silverlight, Flash 11
DOM Level 3, Client Side Storage
SVG, Canvas, MathML, SMIL (die Wiedergeburt)
XForms, XPath, Xquery, XRegurgitate...
15. 15
Kommen wir aber zum Punkt
Es folgen eine Reihe an konkreten
Beispielen
Komisches, Nerviges und wirklich
Gefährliches
Nichts zum Thema Clickjacking
30. 30
Rogue Events 3/3
Tastatureingaben komplett blocken
Man kombiniere dies mit onunload und
unbeforeunload
Framebusterbuster
Firefox kann nicht einmal das DOM in
korrekter Reihenfolge traversen
Ein Blumenstrauß an Angriffsvektoren
31. 31
Label of Death 1/2
<html>
<body>
<label for="submit">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod tincidunt ut laoreet dolore magna
aliquam erat volutpat. velit esse molestie consequat, vel illum
dolore eu feugiat nulla facilisis at vero et accumsan et iusto
odio dignissim qui blandit
<form action="test.php" method="post">
<input type="text" name="text" value="text" />
<input type="password" name="password" value="secret!" />
<input type="submit" id="submit" value="Go!" />
</form>
PoC
32. 32
Label of Death 2/2
Offene Label Tags feuern Klicks...
... echte Klicks!
Auf nachfolgende Elemente mit passender ID
Auf alles was zwichen Label und Element liegt
Links, Formulare, Buttons...
33. 33
XHR Request Method Fuzzing
<html>
<head>
<body>
<script>
var x = new XMLHttpRequest();
var m = '$$';
for(var i=0; i <= 21; i++) {
m += m;
}
x.open(m, '404.html', false);
x.send(null);
</script>
</body>
</html>
PoC
35. 35
And finally...
DOM Redressing
Über die guten alten IDs
0day für IE8b2, IE7, IE6
Naja fast – seit ca. zwei Wochen gefixt (silently)
Traue Deinem DOM nicht!
40. 40
Schlussfolgern wir...
Labels sind böse – besser gesagt die FOR
Attribute...
IDs sind böse
HTML Header Injections sind böse
Styles – sind... na? Böse!
Fehlende Doctypes auch
Inline SVG ist böse – externes SVG auch
41. 41
Weiterhin böse sind...
Tags wie NOEMBED und NOAPPLET
Firefox
Firefox
Und wieder Firefox und sein proprietärer,
schlecht kopierter Feature-Müll
Oncopy/Onpaste/Oncut Events
UTF7 CSS, UTF7 XBL etc... - UTF7 ist generell
einfach nur böse
42. 42
Daher...
WYSIWYG niemals ohne HTMLPurifier oder
AntiSamy
Kenne Dein Markup!
Setze Deine Header!
Nutze die MDC https://developer.mozilla.org/En
Verlasse Dich niemals auf Blacklists!
Niemals!
43. 43
Und vergessen wir nicht...
...was uns droht
XML ohne Namespaces - OMFG!
Stripped Doctypes
Azubis und Praktikanten
Management Lunatics
HTML 5 Madness
OBJECT Tag als Multitalent
SVG Fonts...