SSRF Detection

SkillSecurity

Detect Server-Side Request Forgery where user-controlled URLs can reach internal services, cloud metadata endpoints, or bypass network boundaries.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the SSRF Detection skill

What this skill tells your AI

The instructions your AI receives, as published by byamb4/find-cve-agent in skills/ssrf/SKILL.md and read by ahel’s review.

When to Use

Audit webhook handlers, URL preview generators, import-from-URL features, image proxy endpoints, PDF generators that fetch remote resources, and any endpoint that makes HTTP requests based on user-supplied URLs.

Process

Step 1: Find HTTP Request Sinks

# JavaScript
grep -rn "fetch(\|axios\|got(\|node-fetch\|http\.get\|https\.get\|request(" .
grep -rn "urllib\|url\.parse\|new URL(" .

# Python
grep -rn "requests\.get\|requests\.post\|urllib\.request\|urlopen\|httpx" .

# Go
grep -rn "http\.Get\|http\.Post\|http\.NewRequest\|httpClient" .

# Ruby
grep -rn "Net::HTTP\|open-uri\|Faraday\|HTTParty\|RestClient" .

Step 2: Check If URL is User-Controlled

Trace the URL parameter backwards:

  • Does it come from request parameters, body, headers?
  • Is it stored in database but originally user-supplied?
  • Can the user control the host/port/path/scheme?

Step 3: Check URL Validation

grep -rn "isPrivate\|isInternal\|isLocalhost\|blocked\|allowlist\|blocklist" .
grep -rn "127\.0\.0\.1\|0\.0\.0\.0\|169\.254\|10\.\|172\.16\|192\.168" .

Step 4: Test IP Validation Bypasses

Common bypass techniques:

  • Decimal IP: 2130706433 = 127.0.0.1
  • Hex IP: 0x7f000001 = 127.0.0.1
  • Octal IP: 0177.0.0.1 = 127.0.0.1
  • IPv6 mapped: ::ffff:127.0.0.1
  • IPv6 localhost: ::1, 0:0:0:0:0:0:0:1
  • URL encoding: http://127%2e0%2e0%2e1
  • DNS rebinding: domain that resolves to 127.0.0.1 after initial check
  • Redirect following: allowed URL redirects to internal URL
  • 0.0.0.0 on some systems maps to localhost
  • localtest.me resolves to 127.0.0.1

Step 5: Check Protocol Handling

Dangerous protocols beyond http/https:

  • file:///etc/passwd -- local file read
  • gopher:// -- arbitrary TCP data (SSRF amplifier)
  • dict:// -- dictionary service probe
  • ftp:// -- FTP data exfiltration

Step 6: Evaluate Cloud Metadata Access

If the target runs on cloud infrastructure:

  • AWS IMDSv1: http://169.254.169.254/latest/meta-data/iam/security-credentials/
  • AWS IMDSv2: requires token header (harder to exploit)
  • GCP: http://metadata.google.internal/computeMetadata/v1/
  • Azure: http://169.254.169.254/metadata/instance
  • DigitalOcean: http://169.254.169.254/metadata/v1/

CVSS Guidance

  • SSRF to cloud credentials (AWS IMDSv1): CRITICAL 9.1
  • SSRF to internal service interaction: HIGH 7.5
  • Blind SSRF (no response body): MEDIUM 5.3-6.5
  • SSRF with redirect-only: MEDIUM 5.0
  • Authenticated SSRF: reduce PR to L

References

Signals

GitHub stars
50
Forks
9
Last commit
Mar 2026
Advanced
Catalog kind
skill
Gateway key
ssrf-byamb4
Source
github.com/byamb4/find-cve-agent