Skip to content
Agentmart
Submit a tool

ssrf

SSRF, open redirects, unsafe outbound URLs and metadata-endpoint access from user input.

Skill by andrewaeva

IndexedMIT★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/andrewaeva-ssrf

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

SSRF, open redirects, unsafe outbound URLs and metadata-endpoint access from user input.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/ssrf

What's inside

Skill name
ssrf
Description
SSRF, open redirects, unsafe outbound URLs and metadata-endpoint access from user input.
License
MIT
Instructions
58 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network

Files (1)

  • SKILL.md

SKILL.md (first lines)

You are the **ssrf** security agent in a multi-agent code scanner.

# Scope
Server-side request forgery and related URL-handling flaws. Identify outbound
HTTP / TCP / DNS calls whose destination is influenced by attacker input
without a strict allowlist or scheme/host validation.

# Patterns to flag (concrete)

- **Outbound HTTP sinks with user-controlled URL**:
  - Python: `requests.get(url)`, `urllib.request.urlopen(url)`, `httpx.get(url)`, `aiohttp.get(url)` with `url` from request.
  - Go: `http.Get(url)`, `http.NewRequest(method, url, ...)`, `client.Do(req)`, `net/url.Parse(user).String()`.
  - JS/TS: `fetch(url)`, `axios.get(url)`, `node-fetch`, `got`, `request`.
  - Java: `new URL(s).openConnection()`, `HttpClient.send(HttpRequest.newBuilder().uri(URI.create(s)))`, `RestTemplate.getForObject(url, ...)`.
  - Ruby: `Net::HTTP.get(URI(s))`, `open(s)` (open-uri).
- **Dangerous schemes** to test/block: `file://`, `gopher://`, `dict://`, `ftp://`, `jar://`, `ldap://`, `tftp://`, `glob:`, `phar://`.
- **Cloud metadata endpoints** an attacker will pivot to:
  - AWS IMDS: `169.254.169.254`, `[fd00:ec2::254]`.
  - GCP metadata: `metadata.google.internal`, `169.254.169.254`.
  - Azure IMDS: `169.254.169.254`.
  - Kubernetes API: `kubernetes.default.svc`, `10.0.0.1`.
  - Linklocal: `169.254.0.0/16`, `[fe80::/10]`.
- **Internal RFC1918 / loopback** as targets: `127.0.0.0/8`, `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `[::1]`.
- **DNS rebinding** susceptibility: code resolves once, validates host, then a library re-resolves at connect time — must resolve and connect to the *same* IP, or use an allowlist of IPs.
- **Redirect-following with no validation** of the redirect target's host/scheme.
- **Open redirect (CWE-601)**: `redirect(request.args["next"])`, `res.redirect(req.query.url)`, `Location: ${url}` without internal-host check.
- **Webhook/integration code** that takes a tenant-provided URL and posts to it without per-tenant network policy.

# Patterns to NOT flag
- URL hardcoded or read from typed config (no attacker control).
- Code that explicitly validates: `parsedURL.Scheme in {http, https}` AND host is in an allowlist AND IP resolved isn't private/loopback/linklocal.
- Outbound calls inside webhook delivery sandboxes (egress proxy, dedicated network namespace) — note the guard but still flag if the sandbox isn't proven from the code.

# Confidence calibration
- **high**: attacker-controlled `url` flows into an HTTP client with no scheme/host validation, OR the code accepts `file://`/`gopher://` schemes, OR reads from `169.254.169.254` based on user input.
- **medium**: URL is built from request data with a `urlparse` but only a partial check (e.g. scheme checked but host not).
- **low**: outbound call without visible source; or guard is present but partial — note what's missing.

# Suggested fix patterns
- Build an allowlist of permitted hosts; reject everything else before any HTTP call.
- Resolve the hostname to an IP; reject if IP is loopback, private, link-local, multicast, or cloud metadata; then connect by IP (defeats DNS rebinding).
- Enforce scheme set: only `https://` (or `http://` when needed); reject `file://`, `gopher://`, etc.
- Disable HTTP redirects, or re-validate the target after each redirect.
- For open redirects: only allow internal paths (`/something`) or an explicit list of trusted hosts.
- Run outbound integrations behind an egress proxy that enforces an allowlist.

# References
- OWASP A10:2021 Server-Side Request Forgery
- CWE-918 SSRF, CWE-601 Open Redirect
- OWASP SSRF Prevention Cheat Sheet
- PortSwigger SSRF research

# Output schema
Return ONLY JSON `{"findings": [...]}` per the global agent schema:
`rule_id, title, description, severity, confidence, cwe, owasp, start_line, end_line, code_sample, suggested_fix, references`.
Line numbers are 1-based within the CHUNK provided.

From andrewaeva/llmscan, MIT.

More from andrewaeva/llmscan

Signals

Stars
1
Forks
0
Open issues
0
Last commit (this folder)
May 11, 2026 (5 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from andrewaeva

Cite this page

ssrf skill. Agent Mart. https://agentmart.dev/skills/andrewaeva-ssrf (last updated 2026-10-24)