DEV Community

Discussion on: Evil Session Tokens

Collapse
 
joncalhoun profile image
Jon Calhoun

Unless you have a really bad CORS (en.wikipedia.org/wiki/Cross-origin...) setup, this shouldn't be possible. The entire point of CORS is to disable this type of behavior in javascript, and if this isn't being done in JS how is s1mple.com getting the information about your cookie?

Let me give an example. Head over to calhoun.io - my blog. I am using this site because I know it has jquery. Open the console in your browser and try the following:

$.getJSON( "https://www.calhoun.io", function( data ) {
  console.log(data);
});
Enter fullscreen mode Exit fullscreen mode

This should work successfully, because you are on the same domain and CORS allows this by default. Now try the following:

$.getJSON( "https://dev.to", function( data ) {
  console.log(data);
});
Enter fullscreen mode Exit fullscreen mode

Notice the difference? You get an error like:

XMLHttpRequest cannot load https://dev.to/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.calhoun.io' is therefore not allowed access.
Enter fullscreen mode Exit fullscreen mode

No leaked cookies. No leaked data.

Cross site request forgery (which you link to) is something entirely different where you create a fake form on s1mple.com that POSTs to the real simple.com with nefarious data. Eg your form on s1mple.com might POST to simple.com/transfer with the payload:

{ recipient: "attacker-account", amount: 100.00 }
Enter fullscreen mode Exit fullscreen mode

And then if Simple.com doesn't check for a CSRF token of its own it might perform the operation using your credentials, but your cookie and your data is never leaked to s1mple.com. It just manages to get you to perform an action that you never intended to do.

Thread Thread
 
rmorschel profile image
Robert Morschel

Thanks for your reply, but we've clearly crossed wires somewhere. S1MPLES.COM doesn't need to access the cookie. It just has an image that links to SIMPLES.COM with the URL of choice. The browser supplies the cookie, and hence the GET requests are authorised. No Javascript, so CORS is not applicable.

Thread Thread
 
dl1ely profile image
Stefan Pfeiffer

Yes, the browser does an authenticated GET request to SIMPLE.COM. Please describe again how S1MPLE.COM gets hold of the cookie that the browser sends to SIMPLE.COM (and not S1MPLE.COM)? You are claiming that the malicious hacker web app can issue GET requests to retrieve private data. How? S1MPLE.COM can make my browser retrieve data from SIMPLE.COM into my browser. Which it does for me anyway. What is the genius idea that allows a website to steal my private data by embedding an image that links to SIMPLE.COM, when said private data never reaches that website?

 
joncalhoun profile image
Jon Calhoun

This still doesn't make sense.

Even on the owasp.org site's CSRF example with an img tag it requires the target server (eg simples.com) to perform some action to be a real vulnerability. The user's cookie is NEVER given to s1mples.com, and s1mples.com doesn't have access to the data of the user. All it can do is try to trick the user into performing actions with an already authorized cookie, but it can't actually view the data from those actions or steal the user's cookie.

I assume you are trying to help and I appreciate that, but what you are describing just doesn't line up with anything I have ever read or learned.

Do you happen to have any sources backing up your claim or documenting how a GET request with an IMG tag could lead to s1mples either (a) gaining access to a user's data, or (b) getting access to a user's cookie?

Thread Thread
 
dl1ely profile image
Stefan Pfeiffer

Jon, thanks for mirroring my exact thoughts. It matches all my knowledge which i consider rather solid. Still i got in doubt and was rather hesitant to oppose the claims in this post when i first read it, but it shook the foundations of my understanding how the web works.

Thread Thread
 
joncalhoun profile image
Jon Calhoun

I know the feeling. I am always hesitant to ask in case I am wrong, but I figured what the hell.

If I am wrong & the author has references to back up his claims I look silly for a bit and it adds more context for future readers like you and me. I also learn about a new attack vector as an added bonus.

If I am right, hopefully it leads to the author updating the post a bit to fix the mistake and we all live happily ever after (or until the next Heartbleed).

Thread Thread
 
rogercampos profile image
Roger Campos

What you say is true, the attacker will not have access to the cookies themselves. However there are trickier vector attacks he can perform, see for example

stackoverflow.com/questions/266969...

 
dl1ely profile image
Stefan Pfeiffer

Thanks for pointing out what i was about to ask. The browser sends the cookie for SIMPLE.COM to SIMPLE.COM, not S1MPLE.COM. If the malicious web app sends the GET request to SIMPLE.COM, it does not know the cookie that is set for SIMPLE.COM from the server. If S1MPLE.COM redirects the users browser to SIMPLE.COM, the browser will send to cookie to SIMPLE.COM. The browser will never send the cookie for SIMPLE.COM to S1MPLE.COM. There is no way S1MPLE.COM gets the cookie for SIMPLE.COM „helpfully supplied“ by the browser „since it is the right domain“ (what domain?!). Next up, i do not see a difference between the cookie passed around in a HTTP header and a „session token header attached to each request“. Regarding security, it is the same. Both are HTTP header values.

Then suddenly, focus switches to MITM attacks and using HTTPS instead of HTTP, which is completely orthogonal to the topic of using session cookies. Finally, session ids logged to a file only visible to the web app developer are the problem.

This conglomeration of topics feels like someone wants to spread FUD by enumerating some vague and unrelated spotlights on some security topics one might have heard of. But the scenario described here is plain wrong. Claiming that the scenario describes a CSRF attack is plain wrong. What is the rationale?