26
#shibuyaxss

#shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

#shibuyaxss

Page 2: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

//よくある脆弱なコード例div.innerHTML = xhr.responseText;

Page 3: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );
Page 4: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

div.innerHTML = sanitize( xhr.responseText );

//IE限定div.innerHTML =

toStaticHTML( xhr.responseText );

Page 5: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

http://gihyo.jp/dev/serial/01/front-end_web/000402

Page 6: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

https://speakerdeck.com/owaspjapan/xss-with-html-parsing-confusion-number-appsecapac2014

Page 7: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );
Page 8: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

Page 9: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

http://gihyo.jp/dev/serial/01/front-end_web/000402

Page 10: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

var s = xhr.responseText;var parser = new DOMParser();var doc = parser.parseFromString( s, "text/html" );var elm = doc.body;

var s = xhr.responseText;var elm =

document.implementation.createHTMLDocument("").body;elm.innerHTML = s;

Page 11: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

var s = "<img src=# onerror=alert(1)>"; // 発火しない!!var parser = new DOMParser();var doc = parser.parseFromString( s, "text/html" );

Page 12: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

http://gihyo.jp/dev/serial/01/front-end_web/000402

Page 13: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

_人人人人人人人人人人人_> <> <> <> <

 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

Page 14: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

http://jsbin.com/dafeh

Page 15: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

// bad code.var parser = new DOMParser();var doc = parser.parseFromString( s, "text/html" );div.innerHTML = doc.body.innerHTML;

Page 16: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );
Page 17: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

// bad code. IEではmXSSとなるvar s =

"<listing>&lt;img src=1 onerror=alert(1)&gt;</listing>";var parser = new DOMParser();var doc = parser.parseFromString( s, "text/html" );sanitize( doc.body );div.innerHTML = doc.body.innerHTML;

http://www.thespanner.co.uk/2014/05/06/mxss/

Page 18: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

// bad code. toStaticHTMLモドキを作りたいif( window.toStaticHTML ){

return toStaticHTML( s );}else{

var parser = new DOMParser();var doc = parser.parseFromString( s, "text/html" );var newNode = rebuildSanitizedElement( doc.body ); return newNode.innerHTML;

}

Page 19: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

// toStaticHTMLモドキを作りたいif( window.toStaticHTML ){

var div = document.createElement("div");div.innerHTML = toStaticHTML( s );return div;

}else{var parser = new DOMParser();var doc = parser.parseFromString(

"<div>" + s + "</div>", "text/html" );var newNode = rebuildSanitizedElement( doc.body ); return newNode.childeNodes[ 0 ];

}

Page 20: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );
Page 21: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

http://gihyo.jp/dev/serial/01/front-end_web/000403

Page 22: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

_人人人人人人人人_> バグがあっても <> 平気なようにする < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

Page 23: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

<iframe id="iframe" sandbox seamlessstyle="border-width:0px"></iframe>

...document.getElementById("iframe").srcdoc = xhr.responseText;

Page 24: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );
Page 25: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss

Page 26: #shibuyaxss - UTF-8 · 8/7/2014  · Shibuya.XSStechtalk #5 #shibuyaxss div.innerHTML = sanitize( xhr.responseText ); //IE限定 div.innerHTML = toStaticHTML( xhr.responseText );

Shibuya.XSS techtalk #5 #shibuyaxss