Skip to main content

Exploit Chains

An exploit chain is a named, versioned attack where one vulnerability enables the next — an SSRF that reaches internal functionality a second flaw turns into remote code execution, an auth-bypass that unlocks a command-injection, a SQLi that escalates to a webshell. Pentest Swarm ships a library of the exploit chains behind real breaches and hunts them autonomously.

Three different "chain" concepts — don't confuse them
  • Exploit chain (this page) — a named, CVE-tied attack the swarm fingerprints, safely verifies, and reports.
  • Playbook — a workflow (which tools run, in what order).
  • Kill chain — the runtime composition of findings into an attacker-lifecycle narrative (in the report).

What the swarm does autonomously (and what it does not)​

  • ✅ Composes attack paths at runtime from what it discovers.
  • ✅ Selects, fingerprints, safely verifies, and executes known exploit chains from the library — no human driving each step.
  • ❌ It does not invent brand-new 0-day chains. Every library chain is a known, disclosed issue.

Verification is deliberately non-weaponized: the swarm confirms each link is reachable/present (a benign canary, a read-only unauthorized response, an OOB callback) — it does not detonate payloads, write webshells, or run impactful commands. It proves the path exists; it doesn't exploit it destructively.

Using exploit chains​

pentestswarm chain list                       # what's available
pentestswarm chain info <id> # CVEs, product, links, references
pentestswarm chain run <id> --target <url> # fingerprint → verify each link → report

For example:

pentestswarm chain run sonicwall-sma1000-ssrf-rce --target https://vpn.example.com

Flags on chain run: --target (required), --scope, --format (md/json/html/all), --report-dir.

The library: lean binary + on-demand updates​

The binary ships a small curated default set embedded (works offline, instant install). The rest of the library — and fresh chains — arrive on demand, so a new chain can ship the day a CVE drops without upgrading the binary:

pentestswarm chain update              # sync the latest chains
pentestswarm chain pull <id> # fetch one

Fetched chains land in ~/.pentestswarm/chains and override embedded ones of the same id. Point at a different feed with --registry or PENTESTSWARM_CHAINS_REGISTRY.

Bundled chains (default set)​

Household-name chains behind real-world breaches, including:

ChainCVEsShape
SonicWall SMA1000CVE-2026-83548 + CVE-2026-83549SSRF → unauth RCE
Ivanti Connect SecureCVE-2023-46805 + CVE-2024-21887auth-bypass → command-injection → RCE
Exchange ProxyShellCVE-2021-34473/34523/31207path-confusion → file-write → RCE
MOVEit TransferCVE-2023-34362pre-auth SQLi → RCE
Magento StyleSmugglerCVE-2026-75650template injection → unauth RCE
Log4ShellCVE-2021-44228JNDI lookup → RCE
Citrix BleedCVE-2023-4966memory over-read → session hijack
Confluence OGNLCVE-2022-26134unauth OGNL injection → RCE
Spring4ShellCVE-2022-22965data-binding → RCE
PAN-OS GlobalProtectCVE-2024-3400command injection → unauth RCE
ConnectWise ScreenConnectCVE-2024-1709 + CVE-2024-1708auth-bypass → traversal → RCE
FortiOSCVE-2022-40684admin auth-bypass
F5 BIG-IPCVE-2022-1388iControl auth-bypass → RCE

pentestswarm chain list shows the current set; chain update pulls the rest.

Chain Forge — draft a chain from an advisory​

When a new critical CVE drops, you shouldn't have to hand-write the chain. Chain Forge turns a vulnerability advisory into a draft exploit chain:

pentestswarm chain forge --url https://vendor.example/advisory --cve CVE-2026-1234
pentestswarm chain forge --from advisory.txt --save
cat advisory.txt | pentestswarm chain forge

It reads the advisory (text, --from file, --url, or stdin), asks your configured reasoning model to author the chain — the fingerprint, the ordered links with their CVEs, and a safe, non-weaponized verification for each — validates the result against the schema, and prints it for review.

It is provider-agnostic: it uses whatever model you've set up — a local Ollama model (fully offline), Together, GLM, Claude, Gemini, or Muse Spark (Meta's reasoning model — --provider musespark), which is a particularly strong fit for the multi-step reasoning here.

Draft, then review — never auto-published

Chain Forge writes nothing on its own. It prints a draft; you keep it with --save (into ~/.pentestswarm/chains) or --out <path>, or open a PR to the public library. Always review a forged chain — the model drafts it, you verify it. Verification stays non-weaponized by design.

Contributing a chain​

An exploit chain is a small YAML file: metadata (CVEs, product, affected, CVSS), a fingerprint block, and ordered links each with safe verification guidance. It's one of the cleanest contributions to make — open a PR adding a chains/<id>.yaml.

Authorized testing only

Run exploit chains only against systems you own or are explicitly contracted to test. Verification is non-weaponized by design; you are still responsible for authorization and scope. See Security & Responsible Use.