Skip to content

/ssrf

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

From plugin
4221 skills5 agents7 commands3 hooks
shell
$ npx -y skills add ByamB4/find-cve-agent --skill ssrf --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/ssrf
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

ssrf.SKILL.md
name: ssrf
description: "Detect Server-Side Request Forgery where user-controlled URLs can reach internal services, cloud metadata endpoints, or bypass network boundaries."
metadata:
  filePattern:
    - "**/*.js"
    - "**/*.ts"
    - "**/*.py"
    - "**/*.go"
    - "**/*.rb"
  bashPattern:
    - "semgrep.*ssrf"
    - "grep.*(fetch|axios|requests\\.get|http\\.get)"
  priority: 85

SSRF Detection

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

  • [Sinks](references/sinks.md) -- HTTP request sinks by language
  • [False Positive Indicators](references/false-positive-indicators.md)
  • [PoC Skeleton](references/poc-skeleton.md)
Read more
Read it on GitHub ↗
Ships withfind-cve-agent

Open Source CVE Hunting Harness for Claude Code A Claude Code plugin that systematically finds real CVEs in open source packages through coordinated multi-agent security research.

Get the whole plugin, auto-invoked
Stats
42
Stars
0
Views
7
Forks
Maintained
Maintenance
JavaScript
Language
Apache-2.0
License
4mo ago
Last commit
4mo ago
Created

Repo: ByamB4/find-cve-agent