<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Hacking CSRF Tokens using CSS History Hack</title>
	<atom:link href="http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/feed/" rel="self" type="application/rss+xml" />
	<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/</link>
	<description>Inferno&#039;s Blog on Application Security</description>
	<lastBuildDate>Fri, 02 Apr 2010 17:28:55 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: donb</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-322</link>
		<dc:creator>donb</dc:creator>
		<pubDate>Fri, 02 Apr 2010 17:28:55 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-322</guid>
		<description>All of this discussion is very interesting.  It looks like the world is still safe when CSRF is implemented with long tokens.</description>
		<content:encoded><![CDATA[<p>All of this discussion is very interesting.  It looks like the world is still safe when CSRF is implemented with long tokens.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Des attaques en CSS !</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-278</link>
		<dc:creator>Des attaques en CSS !</dc:creator>
		<pubDate>Sun, 22 Nov 2009 05:48:36 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-278</guid>
		<description>[...] n&#8217;est que plus récemment que ces failles ont trouvés une utilitée autre que celle de ravir les publicitaires: le bruteforcing de token. Combiné cette [...]</description>
		<content:encoded><![CDATA[<p>[...] n&#8217;est que plus récemment que ces failles ont trouvés une utilitée autre que celle de ravir les publicitaires: le bruteforcing de token. Combiné cette [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Software Quality Digest - 2009-07-27 &#124; No bug left behind</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-197</link>
		<dc:creator>Software Quality Digest - 2009-07-27 &#124; No bug left behind</dc:creator>
		<pubDate>Mon, 27 Jul 2009 17:10:48 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-197</guid>
		<description>[...] Hacking CSRF Tokens using CSS History Hack - &#8220;In this exploit, we discover the csrf token by brute forcing the various set of urls in browser history. We will try to embed different csrf token values as part of url and check if the user has visited that url. If yes, there is a good chance that the user is either using the same CSRF token in the current active session or might have used that token in a previous session. Once we have a list of all such tokens, we can just try our csrf attack on the server using that small list.&#8221; [...]</description>
		<content:encoded><![CDATA[<p>[...] Hacking CSRF Tokens using CSS History Hack &#8211; &#8220;In this exploit, we discover the csrf token by brute forcing the various set of urls in browser history. We will try to embed different csrf token values as part of url and check if the user has visited that url. If yes, there is a good chance that the user is either using the same CSRF token in the current active session or might have used that token in a previous session. Once we have a list of all such tokens, we can just try our csrf attack on the server using that small list.&#8221; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: BryanSul</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-193</link>
		<dc:creator>BryanSul</dc:creator>
		<pubDate>Wed, 22 Jul 2009 15:26:25 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-193</guid>
		<description>@ShawnM: There are a few benefits to URL tokens: they actually do a great job protecting against XSS (reflected and local), open-redirect phishing and browser history theft as well as XSRF; and better still you can implement them on existing apps without having to make any code changes. There are definitely a number of disadvantages as well (search engines can&#039;t index sites protected this way) and the defense is far from perfect (referer leakage as you mentioned, among other problems) but these problems can be mitigated to certain degrees. I&#039;m releasing a PoC defense library for ASP.NET with my talk next week, please download it and let me know where it falls down. I don&#039;t think this is the end-all solution to XSS and XSRF but I do think it can work well in certain situations.

Btw also very much looking forward to your and Nathan&#039;s talk too :)

@Inferno: Nope, I&#039;m not a big tweeter :) If I have something to say I usually just drop it on the SDL blog.</description>
		<content:encoded><![CDATA[<p>@ShawnM: There are a few benefits to URL tokens: they actually do a great job protecting against XSS (reflected and local), open-redirect phishing and browser history theft as well as XSRF; and better still you can implement them on existing apps without having to make any code changes. There are definitely a number of disadvantages as well (search engines can&#8217;t index sites protected this way) and the defense is far from perfect (referer leakage as you mentioned, among other problems) but these problems can be mitigated to certain degrees. I&#8217;m releasing a PoC defense library for ASP.NET with my talk next week, please download it and let me know where it falls down. I don&#8217;t think this is the end-all solution to XSS and XSRF but I do think it can work well in certain situations.</p>
<p>Btw also very much looking forward to your and Nathan&#8217;s talk too <img src='http://securethoughts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>@Inferno: Nope, I&#8217;m not a big tweeter <img src='http://securethoughts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  If I have something to say I usually just drop it on the SDL blog.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Twitted by timfaas</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-192</link>
		<dc:creator>Twitted by timfaas</dc:creator>
		<pubDate>Wed, 22 Jul 2009 13:57:49 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-192</guid>
		<description>[...] This post was Twitted by timfaas [...]</description>
		<content:encoded><![CDATA[<p>[...] This post was Twitted by timfaas [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ShawnM</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-191</link>
		<dc:creator>ShawnM</dc:creator>
		<pubDate>Wed, 22 Jul 2009 09:27:25 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-191</guid>
		<description>Sorry to spam the crap out of this blog entry. 

Thinking about Bryan&#039;s post. I&#039;m not sure I can see how tokens in URL can be inherently better than POSTs, but I will agree they aren&#039;t worse, if they&#039;re nonces, and if they&#039;re not leaked in referer via included offsite content.

I think something we can all agree on is that the path to doing this the right way is reasonably well understood, but from the attacker perspective there are many, many cases where it&#039;s not what&#039;s been implemented. I like unified approaches in APIs where some kind of tokenization is pervasive unless the dev explicitly calls for a request not to be tokenized (i.e. for SEO and usability or something).</description>
		<content:encoded><![CDATA[<p>Sorry to spam the crap out of this blog entry. </p>
<p>Thinking about Bryan&#8217;s post. I&#8217;m not sure I can see how tokens in URL can be inherently better than POSTs, but I will agree they aren&#8217;t worse, if they&#8217;re nonces, and if they&#8217;re not leaked in referer via included offsite content.</p>
<p>I think something we can all agree on is that the path to doing this the right way is reasonably well understood, but from the attacker perspective there are many, many cases where it&#8217;s not what&#8217;s been implemented. I like unified approaches in APIs where some kind of tokenization is pervasive unless the dev explicitly calls for a request not to be tokenized (i.e. for SEO and usability or something).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: &#124;1&#124;\&#124;&#124;)0</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-190</link>
		<dc:creator>&#124;1&#124;\&#124;&#124;)0</dc:creator>
		<pubDate>Wed, 22 Jul 2009 08:47:48 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-190</guid>
		<description>IMHO a data-changing action shouldn&#039;t ever be allowed without valid lead-up to that action. E.g. submitting a new password for an account shouldn&#039;t occur if the previous request wasn&#039;t a legitimate request for the &#039;change password form&#039; page, which itself wouldn&#039;t have been served if the request prior to that wasn&#039;t a legitimate request for the Account Management page. That &quot;business process&quot; of sorts is tracked in the session, not via data passed to and from the client, resulting in a reality-check of the interaction between the User and web application leading up to the data-changing request. This imposes the necessity to make a series of requests to perform a data-changing action, the web application can then impose extra checks such as ensuring that the timing between those requests reflects a real human user (i.e. response time + &quot;think time&quot;). That said, it would still be possible to scrape an initial anti-CSRF token from the web app (say thru an XSS vulnerability or sniffing) and then conduct the series of requests necessary to lead up to and utilise the data-changing request...Yet, using CAPTCHA for the anti-CSRF token is a great means of dealing with the inherent XSS problems regarding anti-CSRF tokens (as long as the CAPTCHA image can&#039;t be re-served to the attacker), plus ensures that a real-human is making the request. Using CAPTCHA this way sortof* makes the &quot;business process&quot; checks more overkill than essential and also can be problematic in terms of legitimate automated use of the web app (e.g. business process monitoring).
*Since CAPTCHA can in some cases be bypassed via automation (neural networks), that business process reality-check provides an extra measure of scrutiny and makes it very hard/time-expensive to brute-force CAPTCHA.
Use of BACK/FORWARD browser buttons can be elegantly dealt with by sending the User to the non-data-changing-start of a business process from which he/she proceeds, rather than ending the session outright.
My view is that session-wide anti-CSRF tokens (&quot;stale&quot; tokens) are the bare-minimum solution. The best solution so far is an RSA-style token on any data-changing requests (benefit here is the web app never served the token out so it cant be scraped/sniffed). And an effective middle-ground is using &quot;fresh&quot; tokens served via CAPTCHA and entered via a form that gets POSTed.</description>
		<content:encoded><![CDATA[<p>IMHO a data-changing action shouldn&#8217;t ever be allowed without valid lead-up to that action. E.g. submitting a new password for an account shouldn&#8217;t occur if the previous request wasn&#8217;t a legitimate request for the &#8216;change password form&#8217; page, which itself wouldn&#8217;t have been served if the request prior to that wasn&#8217;t a legitimate request for the Account Management page. That &#8220;business process&#8221; of sorts is tracked in the session, not via data passed to and from the client, resulting in a reality-check of the interaction between the User and web application leading up to the data-changing request. This imposes the necessity to make a series of requests to perform a data-changing action, the web application can then impose extra checks such as ensuring that the timing between those requests reflects a real human user (i.e. response time + &#8220;think time&#8221;). That said, it would still be possible to scrape an initial anti-CSRF token from the web app (say thru an XSS vulnerability or sniffing) and then conduct the series of requests necessary to lead up to and utilise the data-changing request&#8230;Yet, using CAPTCHA for the anti-CSRF token is a great means of dealing with the inherent XSS problems regarding anti-CSRF tokens (as long as the CAPTCHA image can&#8217;t be re-served to the attacker), plus ensures that a real-human is making the request. Using CAPTCHA this way sortof* makes the &#8220;business process&#8221; checks more overkill than essential and also can be problematic in terms of legitimate automated use of the web app (e.g. business process monitoring).<br />
*Since CAPTCHA can in some cases be bypassed via automation (neural networks), that business process reality-check provides an extra measure of scrutiny and makes it very hard/time-expensive to brute-force CAPTCHA.<br />
Use of BACK/FORWARD browser buttons can be elegantly dealt with by sending the User to the non-data-changing-start of a business process from which he/she proceeds, rather than ending the session outright.<br />
My view is that session-wide anti-CSRF tokens (&#8220;stale&#8221; tokens) are the bare-minimum solution. The best solution so far is an RSA-style token on any data-changing requests (benefit here is the web app never served the token out so it cant be scraped/sniffed). And an effective middle-ground is using &#8220;fresh&#8221; tokens served via CAPTCHA and entered via a form that gets POSTed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Interesting Information Security Bits for 07/21/2009 &#124; Infosec Ramblings</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-189</link>
		<dc:creator>Interesting Information Security Bits for 07/21/2009 &#124; Infosec Ramblings</dc:creator>
		<pubDate>Tue, 21 Jul 2009 21:00:06 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-189</guid>
		<description>[...] put together a couple things and came up with a fairly scaring attack on CRSF tokens. Hacking CSRF Tokens using CSS History Hack &#124; SecureThoughts.com Tags: ( hacking crsf [...]</description>
		<content:encoded><![CDATA[<p>[...] put together a couple things and came up with a fairly scaring attack on CRSF tokens. Hacking CSRF Tokens using CSS History Hack | SecureThoughts.com Tags: ( hacking crsf [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ShawnM</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-188</link>
		<dc:creator>ShawnM</dc:creator>
		<pubDate>Tue, 21 Jul 2009 19:41:15 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-188</guid>
		<description>@BryanSul Nathan and I are interested in your talk and interested in the debate as well. =)</description>
		<content:encoded><![CDATA[<p>@BryanSul Nathan and I are interested in your talk and interested in the debate as well. =)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Researcher raids browser history for webmail login tokens &#171; NoticFresh Weblog</title>
		<link>http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/comment-page-1/#comment-187</link>
		<dc:creator>Researcher raids browser history for webmail login tokens &#171; NoticFresh Weblog</dc:creator>
		<pubDate>Tue, 21 Jul 2009 18:10:23 +0000</pubDate>
		<guid isPermaLink="false">http://securethoughts.com/?p=581#comment-187</guid>
		<description>[...] Researcher raids browser history for webmail login&#160;tokens    Source: TheRegister &amp; SecureThoughts [...]</description>
		<content:encoded><![CDATA[<p>[...] Researcher raids browser history for webmail login&nbsp;tokens    Source: TheRegister &amp; SecureThoughts [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

