Showing posts with label CSRF. Show all posts
Showing posts with label CSRF. Show all posts

Friday, February 22, 2008

Exploiting CSRF Protected XSS

XSS vulnerabilities which are protected by CSRF protections, are usually considered unexploitable due to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that we have no way of predicting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CSRF token.

However, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se protections do nothing more than check that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is first "logged in" and that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CSRF token cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y sent is tied to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir session; nowhere in this chain of events is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re a condition which states that an attacker must be forcing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own session identifier (cookie).

If we are able to force cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim to send a request which contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker's cookie, CSRF token and XSS payload, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we will pass cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CSRF protection checks and have script execution.

A General Case



So how would we go about this? As I mentioned in my "Exploiting Logged Out XSS Vulnerabilities" post, Flash (until 9,0,115,0 and not in IE) allows us to spoof cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Cookie header for a single request, however this suffers from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same problem that we cannot completely over-write cookies; only add an additional Cookie header.

This is indeed a possible attack vector though; if we first make sure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is "logged out" (and also has no value for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 login cookie) eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r by simply waiting, using a CSRF attack to log cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user out (and hoping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website also clears it's cookies), or exhausting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser's cookie limit, we can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n add our own Cookie, CSRF token and XSS payload to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request using similar Flash code e.g.

class Attack {
static function main(mc) {
var req:LoadVars = new LoadVars();
req.addRequestHeader("Cookie", "PHPSESSID=our_valid_session_id");
req.x = "y";
req.send("http://site.com/page.php?csrf_token=our_csrf_token&variable=",
"_self", "POST");
// Note: The method must be POST, and must contain
// POST data, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise headers don't get attached
}
}


Then cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application will receive a request with our (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker's) session id, a valid CSRF token and our XSS payload from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim's browser.

Of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem with this is that if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is actually logged out (which we forced, due to our inability to simply over-write cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookie or stop it being sent) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser no longer has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim's cookies, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only attacks we have from this point are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attacks mentioned in my "Exploiting Logged Out XSS Vulnerabilities" post. And while this is not ideal, it does at least give us something ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than an unexploitable XSS.

Cookie tricks


Again, with this technique we can also set a cookie for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specific path, eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r by having an XSS on a related subdomain or by abusing a cros-site cooking bug, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user will still have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir original cookie intact and we can simply remove our own cookie from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's browser once our XSS has fired.

Abusing RequestRodeo


Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r case where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user would be logged out is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case where we can somehow get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies stripped from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's request.

The technique I presented at 24c3 talked about abusing one such piece of software which stripped cookies; cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 RequestRodeo Firefox extension which was created by Martin Johns and Justus Winter which does a good job of protecting against a lot of CSRF attacks by stripping cookies from requests originating from 3rd party sites (i.e. a request going to site.com which was induced by evil.com will not have any cookies attached to it). Which is just what we need.

Of course, this is a nice place to note that this is of course a niche piece of software that doesn't really provide a valid avenue for exploitation in almost any scenario, but as I explained in my post "Understanding Cookie Security" we can also delete all a users' cookies by exhausting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser's global limit on on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 amount of cookies it will store.

Anyway, given that RequestRodeo all cookies (including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones we are attempting to send via Flash), we still face cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem that we need to be sending a valid session identifier for which we need to be sending a valid CSRF token. We do not face this problem when we remove cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's cookies, and can use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Flash approach outlined above, but we can also use this approach, which has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 added benifit of still working on everyone (not just those who are unpatched).

Anyway, one interesting feature of PHP and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r frameworks is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y accept session identifiers through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL. This has of course led to easily exploitable Session Fixation attacks; however in PHP at least, if a cookie is being sent, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL is completely ignored.

In our case, no cookie is being sent, since it is eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r being stripped by RequestRodeo, or has been deleted by us, so we can simply supply our session identifier through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL, attach our CSRF token and XSS payload and we're done, except in this case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser still has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's cookies, and our XSS functions like normal.

The result of this attack is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above if we have deleted cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's browser, however if we have stripped cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies with RequestRodeo or some similar tool/technique/etc, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r benifit of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user still being logged in when our XSS fires.

Ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Cookie Tricks


As I wrote in my post "Understanding Cookie Security", if we have an XSS which is largely unexploitable (except via pure Session Fixation) since it is on a subdomain with no accounts, we can use it to set almost arbitrary cookies for ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r subdomains.

This gives us a perfect avenue, since we can set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 path to only over-write cookies for our single CSRF Protected XSS page, and send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate CSRF token and XSS payload for.

Self-Only CSRF Protected Persistent XSS


One case which is much simpler to exploit than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 general case though, is where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are CSRF protections on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form where you submit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual XSS, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XSS is a persistent XSS for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user, in that it is rendered on anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r page (which is itself not CSRF protected, since it is used to display racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than edit data)

CAPTCHAs As CSRF Protections


CAPTCHAs are not designed to be CSRF protections, and in certain cases are bypassable.

There are essentially two (not completely broken) types of CAPTCHA systems I have seen in widespread use, one where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plaintext is simply stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server-side session and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 captcha is included in a form like this:

The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r is when a form has a hidden input tag which contains a value which is also inside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image URL, like so:



The first system is trivially bypassed for CSRF & CSRF Protected XSS attacks by simply inserting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CAPTCHA onto a page, or inside an iframe (to strip/spoof referers), and asking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to solve it.

The second can often be trivially bypassed for CSRF & CSRF Protected XSS attacks since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 id is usually not user-dependant and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CAPTCHA does not keep track of what id it sent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user. Therefore cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker can simply retrieve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate CAPTCHA, solve it, and put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 answer along with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 corresponding captcha id in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 csrf or csrf protected xss attack.

Conclusion


So essentially if we can somehow trick cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application into using an attacker's session identifier, eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r by altering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookie (e.g. via subdomain tricks, Flash, injecting into Set-Cookie headers, or whatever ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r trick we can come up with), or by suppressing or deleting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookie and passing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 identifier through anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r means such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n all CSRF protected XSSs are exploitable.

However if we cannot, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we can still exploit some scenarios such as self-only CSRF protected persistent XSS if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logout/login functionality is not CSRF-protected (which very few are). And we can also bypass cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 semi-CSRF protection of CAPTCHAs in several cases.

CSRF-ing File Upload Fields

It seems I'm destined to have everything I sit on for a while patched or found and disclosed by someone else, *sigh*, I guess that's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way things go though.

Oh well, pdp has an interesting post over at gnucitizen.org about how to perform CSRF attacks against File upload fields using Flash: http://www.gnucitizen.org/blog/cross-site-file-upload-attacks/

Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re would be no point publishing this later, here is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 method I came up with a while ago to CSRF File upload fields






It relies on a bug in Firefox/IE/Safari where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 filenames are not escaped before being put into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 POST body to set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 filename parameter and content-type header.

Note: http://kuza55.awardspace.com/files.php is probably vulnerable to a tonne of things; I'm not too worried as it's on free hosting.

Sunday, January 21, 2007

Insecure OpenID 'Features'

Note: I wrote this a while ago, and I haven't gone over it completely, but I thought it would be worth posting about.

I read about OpenID a while ago, when my friend asked me what I thought of it from a security perspective, and from what I could tell from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 documentation, except for DNS issues it wasn't a bad decentralized aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication protocol. And I didn't do any furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r research into it until I came a blog entry describing how it worked in practice http://www.readwriteweb.com/archives/openid_vs_bigco.php).

In that article/flash 'demo' I saw that as with any protocol, developers can come up with great 'features' which damage cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 protocol. And this isn't one OpenID provider deciding to add an insecure feature, eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, it is one that is common throughout cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3 OpenID providers mentioned in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 article, which I assume are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most popular ones being used (why else would a blogger mention cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m?).

Now, what is this feature I feel should not exist? It is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature to set a site to be able to accept your credentials without you having to enter your OpenID password, and since your OpenID provider does not provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se details to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do

Of course, you still need to be logged into your OpenID provider, but since you're meant to be using this login for several sites, its not too much of a stretch to believe that you're going to be logged in all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time you're online - which is quite a large time frame. And if we consider that most sites will cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days tell ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r users when a person is online, or allow you to reveal that fact yourself via posting comments, photos, etc, its not too difficult.

But enough about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature itself; what does it mean to us? This means that an attacker can log you into any site you decided to trust via CSRF attacks because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site cannot tell if you've entered a password. Now this might not seem important, but it is very important for both large and targeted attacks because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user no longer needs to be logged into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 service you want to attack, but merely logged into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 central service.

Even worse, this fact is completely misrepresented to users. The questions that are posed essentially revolve around whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r you trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site that wants to verify your identity, and whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r or not your OpenID provider should always verify your identity to this source, so even if a user is generally cautious about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se kind of things, if something like an email provider started using this a user would be more likely to trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site, and cause security issues. Essentially cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more critical cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information you are accessing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more likely to trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site you are trying to access, and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more critical sites are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones which will have issues with this; lets just hope cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't use OpenID though, because leaving DNS security, essentially up to your users, is as about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 worst idea anyone could come up with, but that's anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r rant altogecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r.

For reference, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3 OpenID providers I tested were:

http://www.myopenid.com/ where users are asked if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y want to allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y want to log into to be able to verify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir identity, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 insecure answer is "Allow Forever"

http://www.claimid.com/ where users are asked if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y want to log into a site, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 insecure answer is "Login and Trust"

http://www.videntity.org/ where users are asked if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote site with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir identity, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 insecure answer is "Yes, and don't ask me Again"

Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r insecure 'feature' is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lack of need to enter a password to register for a site. Out of those 3 OpenID vendors, only http://www.claimid.com/ asked users for a password when registering for a site, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r two had only CSRF protections. This is admittedly not particularly serious because you still need an XSS (or similar) flaw in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OpenID provider's site before you can take advantage of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 design idea, but it is racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r worrying that people designing secure systems don't seem to want to implement defence in depth.

On Stefan Esser's CSRF Protection Idea

A while ago I read a post entitled CSRF protections are not doomed by XSS by Stefan Esser which proposed an interesting method of using domain boundaries to stop an XSS hole in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main domain being used to extract form tokens and circumvent CSRF protections, and it would even go so far as being able to stop an XSS vuln in one form being able to circumvent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CSRF protections of anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r.

And even if it is more difficult to implement than simple token protections, it is still feasible if you use a wildcard DNS entry, and have a check on each form which checks if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 $_SERVER['HTTP_HOST'] is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate one, and if not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n redirect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate one.

And I was even going to implement an example, until I realised one simple flaw; its all still hosted on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same server, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only thing separating it is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 HTTP Host header which can easily be forged via XMLHttpRequest or FlashRequest, so this protection can easily be beaten.

Which got me thinking; what would you need to add for it to work as intended? Well, you could put all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 forms on separate servers, but that doesn't seem at all practical, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only really viable solution is to add more aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication mechanisms which are readable only by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specific subdomain and no ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs.

And thats really cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 biggest issue - you have to create an extra session key for every single form you have on your site, and set a cookie for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y all have to be set at login, and can never be regenerated because XMLHttpRequest and (possibly) FlashRequest can read response headers and extract cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies being set on subdomains.

So while it is still of course possible to implement this, it seems completely impractical to create yet anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r session id which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server has to keep track of for every single form.

But if anyone has actually implemented something similar to this in any environment I'd really love to hear about it.