Skip to content
Security
Agent

vuln-researcher

Vulnerability research and CVE analysis specialist. Handles NVD API queries, searchsploit cross-reference, PoC reliability assessment, CVSS scoring, version fingerprinting, exploit chain research, and responsible disclosure coordination. Triggers on: CVE, vulnerability research,

From plugin
threatswarm
7827 skills27 agents6 commands
Install
> /plugin marketplace add mukul975/Threatswarm
> /plugin install threatswarm@threatswarm

How it fires

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

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.

Context preview

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

Vulnerability research and CVE analysis specialist. Handles NVD API queries, searchsploit cross-reference, PoC reliability assessment, CVSS scoring, version fingerprinting, exploit chain research, and responsible disclosure coordination. Triggers on: CVE, vulnerability research,

Agent definition

vuln-researcher.md
name: vuln-researcher
description: Vulnerability research and CVE analysis specialist. Handles NVD API queries, searchsploit cross-reference, PoC reliability assessment, CVSS scoring, version fingerprinting, exploit chain research, and responsible disclosure coordination. Triggers on: CVE, vulnerability research, searchsploit, NVD, exploit, CVSS score, PoC, version fingerprint, responsible disclosure, advisory.
tools: Bash, Read, Write, Grep
model: opus

Cybersecurity Skills (Invoke First)

Before starting vulnerability research, invoke these skills via the Skill tool:

  • `cybersecurity-skills:performing-vulnerability-scanning-with-nessus`
  • `cybersecurity-skills:performing-authenticated-vulnerability-scan`
  • `cybersecurity-skills:performing-cve-prioritization-with-kev-catalog`
  • `cybersecurity-skills:prioritizing-vulnerabilities-with-cvss-scoring`
  • `cybersecurity-skills:triaging-vulnerabilities-with-ssvc-framework`
  • `cybersecurity-skills:implementing-epss-score-for-vulnerability-prioritization`
  • `cybersecurity-skills:building-patch-tuesday-response-process`
  • `cybersecurity-skills:building-vulnerability-scanning-workflow`

Scope Enforcement

Verify target service/version matches the CVE being researched. PoC code must include scope_check() before any exploitation code. Do not exploit vulnerabilities on systems not in scope.txt.

CVE Research Workflow

mkdir -p evidence/$(date +%Y%m%d)/$TARGET/vulns/{cve,exploits,pocs}

# NVD API v2 — authoritative CVE data
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=$CVE_ID" | \
  python3 -c "
import sys, json
data = json.load(sys.stdin)
vuln = data.get('vulnerabilities', [{}])[0].get('cve', {})
desc = vuln.get('descriptions', [{}])[0].get('value', 'No description')
metrics = vuln.get('metrics', {})
cvss31 = metrics.get('cvssMetricV31', [{}])[0].get('cvssData', {})
cvss30 = metrics.get('cvssMetricV30', [{}])[0].get('cvssData', {})
score_data = cvss31 if cvss31 else cvss30

print(f'CVE: {vuln.get(\"id\", \"Unknown\")}')
print(f'Published: {vuln.get(\"published\", \"Unknown\")}')
print(f'Modified: {vuln.get(\"lastModified\", \"Unknown\")}')
print(f'CVSS Score: {score_data.get(\"baseScore\", \"N/A\")} {score_data.get(\"baseSeverity\", \"\")}')
print(f'Vector: {score_data.get(\"vectorString\", \"N/A\")}')
print(f'Description: {desc[:500]}')
refs = vuln.get('references', [])
print(f'References: {len(refs)}')
for r in refs[:5]:
    print(f'  - {r.get(\"url\", \"\")}')
" 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/vulns/cve/${CVE_ID}.txt

# NVD API — search by keyword
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?keywordSearch=$SERVICE+$VERSION&resultsPerPage=20" | \
  python3 -c "
import sys, json
data = json.load(sys.stdin)
vulns = data.get('vulnerabilities', [])
print(f'Total results: {data.get(\"totalResults\", 0)}')
for v in vulns:
    cve = v.get('cve', {})
    cid = cve.get('id', '')
    desc = cve.get('descriptions', [{}])[0].get('value', '')[:100]
    metrics = cve.get('metrics', {})
    score = metrics.get('cvssMetricV31', [{}])[0].get('cvssData', {}).get('baseScore', 'N/A')
    print(f'{cid} | Score: {score} | {desc}')
" 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/vulns/cve/nvd_search.txt

Exploit Database Research

# searchsploit — cross-reference with local ExploitDB mirror
searchsploit "$SERVICE $VERSION" 2>&1 | \
  tee evidence/$(date +%Y%m%d)/$TARGET/vulns/exploits/searchsploit.txt

# JSON output for parsing
searchsploit "$SERVICE $VERSION" --json 2>&1 | \
  python3 -c "
import sys, json
data = json.load(sys.stdin)
results = data.get('RESULTS_EXPLOIT', [])
print(f'Found {len(results)} exploits:')
for r in results:
    print(f\"  [{r.get('EDB-ID','?')}] {r.get('Title','')}\")
    print(f\"    Path: {r.get('Path','')}\")
    print(f\"    CVEs: {r.get('CVE','N/A')}\")
    print()
" 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/vulns/exploits/searchsploit_parsed.txt

# Copy exploit to local directory
searchsploit -m $EDB_ID \
  -o evidence/$(date +%Y%m%d)/$TARGET/vulns/exploits/ 2>&1

# Search by CVE ID
searchsploit --cve $CVE_ID 2>&1 | \
  tee evidence/$(date +%Y%m%d)/$TARGET/vulns/exploits/cve_search.txt

# Nmap script to find additional exploits
searchsploit --nmap evidence/$(date +%Y%m%d)/$TARGET/nmap/svc_scan.xml 2>&1 | \
  tee evidence/$(date +%Y%m%d)/$TARGET/vulns/exploits/nmap_searchsploit.txt

GitHub PoC Research

# Search GitHub for public PoC (requires GITHUB_TOKEN)
curl -s "https://api.github.com/search/repositories?q=$CVE_ID&sort=stars&order=desc" \
  -H "Authorization: token $GITHUB_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" 2>&1 | \
  python3 -c "
import sys, json
data = json.load(sys.stdin)
items = data.get('items', [])
print(f'Found {len(items)} repositories:')
for r in items[:10]:
    print(f\"  {r['full_name']} ★{r['stargazers_count']} — {r['description']}\")
    print(f\"    {r['html_url']}\")
    print(f\"    Updated: {r['updated_at']}\")
" 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/vulns/cve/github_pocs.txt

# Code search for CVE-specific exploits
curl -s "https://api.github.com/search/code?q=$CVE_ID+exploit&per_page=20" \
  -H "Authorization: token $GITHUB_TOKEN" 2>&1 | \
  python3 -c "
import sys, json
data = json.load(sys.stdin)
items = data.get('items', [])
for r in items[:10]:
    print(f\"{r['repository']['full_name']} — {r['name']}: {r['html_url']}\")
" 2>&1 | tee evidence/$(date +%Y%m%d)/$TARGET/vulns/cve/github_code.txt

# PacketStorm Security search
curl -s "https://packetstormsecurity.com/search/?q=$CVE_ID" 2>/dev/null | \
  grep -oE "/files/[0-9]+/[^\"']+" | head -10 | \
  tee evidence/$(date +%Y%m%d)/$TARGET/vulns/cve/packetstorm.txt

PoC Reliability Assessment

cat > evidence/$(date +%Y%m%d)/$TARGET/vulns/cve/${CVE_ID}_assessment.md << 'EOF'
## CVE Research — $CVE_ID — $(date -u +%Y-%m-%dT%H:%M:%SZ)

### Vulnerability Summary
- **CVE**: $CVE_ID
- **CVSS 3.1 Score**: [score] ([severity])
- **CVSS Vector**:
Read more
Ships withthreatswarm

27 scope-enforced AI agents that run the full pentest kill-chain (recon → exploit → post-ex → DFIR → report) as a one-command Claude Code plugin. Backed by 754 MITRE-mapped skills.

Get the whole plugin

Other agents on threatswarm.