On 11/05/2016 13:22, Kinn Julião wrote:
CSRF is not related to spam or rate limiting, it is related to
impersonation. A spam bot can simply repeatedly request new HTML forms
and scrape out the hidden input.

The Spam bot was just an example, contering his own example.

And it still a cross site request... Either if it comes from a bot or not.

No, it's just "a request". I ask for a URL, I get some content. There is no "cross-site" involved, and no "forgery".


About the pixel, what can prevent a mail pixel to point to
"attacker.com/img.jpg <http://attacker.com/img.jpg>" which fetches the
"whatever_his_enpoint_to_return_the_token.php", grab the token and
forward to the form? The same as what prevets it from scraping the html?
Nothing... So in the end, this RFC improves nothing as mentioned above.

What you are saying there is "all CSRF tokens are pointless". The large number of articles recommending them and libraries implementing them should be a pretty big clue that they are not.

I think you are misunderstanding how the attack works; here is a simple example. If you are logged into a site called victim.example.com, I can place an HTML page on a completely different site (say, attacker.example.net) with the following code:

<img src="http://victim.example.com/change_password.php?new_password=h4xx0r";>

Your browser will then send a request to the specified URL, and execute the command. At no point does the server at attacker.example.net receive any data from victim.example.com, but it can trick you into sending commands to it, with your authenticated privileges.

With a CSRF token in place, the passive attack above will be rejected - "missing or invalid CSRF token". In the response, a fresh CSRF token may well be forwarded to your browser, but it is never forwarded to the attacker.

Let's say we have an endpoint that simply checks the request cookies and generates a new CSRF token, as in Yasuo's example, the attacker could of course write this:

<img src="http://victim.example.com/generate_csrf_token.php";>

But this is no use - it tricks you into sending a command that generates a new token, but the attacker can't see what token was generated, so can't impersonate you.


If you can read the value of that response, that is an XSS vulnerability. As the OWASP page linked to earlier says "any cross-site scripting vulnerability can be used to defeat token, Double-Submit cookie, referer and origin based CSRF defenses": https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet#No_Cross-Site_Scripting_.28XSS.29_Vulnerabilities

Regards,
--
Rowan Collins
[IMSoP]

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to