Server-Side Request Forgery (SSRF)
Introduction
- SSRF stands for Server-Side Request Forgery.
- SSRF allows a malicious user to cause the webserver to make an additional or edited HTTP request to the resource of the attacker's choosing.
- There are two types of SSRF
- Regular SSRF
- Blind SSRF
Impact
- A successful SSRF attack can result in any of the following:
- Access to unauthorised areas.
- Access to customer/organisational data.
- Ability to Scale to internal networks.
- Reveal authentication tokens/credentials.
SSRF Example
SSRF by Path Traversal
- The expected request from
website.thm
when a user requests stock information is as below.http://website.thm/stock?url=http://api.website.thm/api/stock/item?id=123
- The attacker changes the request to the one below
http://website.thm/stock?url=/../user
SSRF by Changing Subdomain
- The expected request from
website.thm
when a user requests stock information is as below.http://website.thm/stock?url=http://api.website.thm/api/stock/item?id=123
- The attacker changes the request to the one below
http://website.thm/stock?url=http://hacker.domain.thm
http://website.thm/stock?url=hacker.domain.thm/api/stock/item?id=123&x=
- Use
&x=
to change the remaining part of the subdomain to a parameter. - In this case
api.website.thm/api/stock/item?id=123
will become the value of x.
Finding an SSRF
- Potential SSRFs can be spotted in web applications in one of the below ways.
- When a full URL is used in a parameter in the address bar:
https://website.thm/form?server=http://server.website.thm/store
. - A hidden field in a form:
<input type="hidden" name="server" value="http://server.website.thm/store">
. - A partial URL such as just the hostname:
https://website.thm/form?server=api
. - The path of the URL:
https://website.thm/form?dst=/forms/contact
.
Defenses Against SSRF
- There are usually two approaches to this, either a
deny list
or anallow list
.
Deny List
- A Deny List is where all requests are accepted apart from resources specified in a list or matching a particular pattern.
- Usually, domain names such as localhost and 127.0.0.1 would appear on a deny list.
- Attackers can bypass a Deny List by using alternative localhost references such as
0, 0.0.0.0, 0000, 127.1, 127.*.*.*, 2130706433, 017700000001
or subdomains that have a DNS record which resolves to the IP Address127.0.0.1 such as 127.0.0.1.nip.io
. - Also, in a cloud environment, it would be beneficial to block access to the IP address
169.254.169.254
which contains metadata for the deployed cloud server, including possibly sensitive information. - An attacker can bypass this by registering a subdomain on their own domain with a DNS record that points to the IP Address 169.254.169.254.
Allow List
- An allow list is where all requests get denied unless they appear on a list or match a particular pattern, such as a rule that an URL used in a parameter must begin with
https://website.thm
. - An attacker could quickly circumvent this rule by creating a subdomain on an attacker's domain name, such as
https://website.thm.attackers-domain.thm
.
Open Redirect
- An open redirect is an endpoint on the server where the website visitor gets automatically redirected to another website address.
- For example: the link
https://website.thm/link?url=https://tryhackme.com
. - An attacker could utilise the above feature to redirect the internal HTTP request to a domain of the attacker's choice.