CORS
A site-wide CORS misconfiguration was in place for an API domain. This allowed an attacker to make cross origin requests on behalf of the user as the application did not whitelist the Origin header and had Access-Control-Allow-Credentials: true meaning we could make requests from our attacker’s site using the victim’s credentials.
Summary
Prerequisites
Exploitation
References
Prerequisites
BURP HEADER (Request) >
Origin: https://evil.com
VICTIM HEADER (Response) >
Access-Control-Allow-Credential: true
VICTIM HEADER (Response) >
Access-Control-Allow-Origin: https://evil.com
ORAccess-Control-Allow-Origin: null
BURP HEADER (Request) >
Origin: Null
AND the ResponseAccess-Control-Allow-Origin: null
We should check manually, do not just rely on the origin request header.
Exploitation
Usually you want to target an API endpoint. Use the following payload to exploit a CORS misconfiguration on target https://victim.example.com/endpoint.
Vulnerable Example: Origin Reflection
Vulnerable Implementation
Proof of concept
or
Standard CORS requests do not send or set any cookies by default. In order to include cookies as part of the request, you need to set the XMLHttpRequest’s .withCredentials property to true
Vulnerable Example: Null Origin
Vulnerable Implementation
It's possible that the server does not reflect the complete Origin
header but that the null
origin is allowed. This would look like this in the server's response:
Proof of concept
This can be exploited by putting the attack code into an iframe using the data URI scheme. If the data URI scheme is used, the browser will use the null
origin in the request:
Vulnerable Example: XSS on Trusted Origin
If the application does implement a strict whitelist of allowed origins, the exploit codes from above do not work. But if you have an XSS on a trusted origin, you can inject the exploit coded from above in order to exploit CORS again.
Sometimes, the payloads does not pop up via XSS. You should also get the response from the console.
Go to the Console and ask for: req.response
Vulnerable Example: Wildcard Origin *
without Credentials
*
without CredentialsIf the server responds with a wildcard origin *
, the browser does never send the cookies. However, if the server does not require authentication, it's still possible to access the data on the server. This can happen on internal servers that are not accessible from the Internet. The attacker's website can then pivot into the internal network and access the server's data withotu authentication.
Vulnerable Implementation
Proof of concept
Bug Bounty reports
References
Last updated