Atlas / MCP servers / braydos-h / BreachPilot

BreachPilotBLOCK

mcp/braydos-h/breachpilot

Autonomous Offensive Security Agent for Red Team Operations

Verdict
BLOCK
Grade
F
Trust score
22 /100
Exposed tools
22 14r · 8w · 0d
Transport
stdio · streamable-http
License
Apache-2.0
Stars
4
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Open-source autonomous security-testing operator for authorized environments. Plans, executes, verifies, and reports full assessment lifecycles with evidence — target-locked, sandboxed, and audited.

[](https://github.com/braydos-h/BreachPilot/actions/workflows/ci.yml) [](https://github.com/braydos-h/BreachPilot/releases)

Quick start · Documentation · Architecture · Safety model · Reliability metrics · [Live demo](https://breachpilot-site.vercel.app/)

[!WARNING] Authorized testing only. Only test systems you own or have explicit written permission to assess. Run the operator from an isolated, throwaway machine or VM.

What is BreachPilot?

BreachPilot is an agentic penetration-testing operator. Given an authorized target, it runs the full loop — reconnaissance, exploitation, privilege escalation, lateral movement, verification, and reporting — through a WebUI mission-control interface or a scriptable CLI.

It is built for lab and sanctioned-assessment use: every action executes inside defined authorization boundaries, every finding requires stored-probe evidence, and every step lands in a tamper-evident audit trail.

Linux is the primary platform (full tool arsenal). Windows is installer-supported with a Python-only fallback.

Why BreachPilot?

Auditable, evidence-driven autonomous security testing — scope → containment → verification → provenance → operator graph. See positioning and reliability metrics (baseline

Read from source at commit 6d1e37803655OBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add breachpilot-webui --env ABUSEIPDB_KEY=${ABUSEIPDB_KEY} --env BHE_SECRET=${BHE_SECRET} --env BREACHPILOT_API_KEY_FILE=${BREACHPILOT_API_KEY_FILE} --env BREACHPILOT_API_TOKEN=${BREACHPILOT_API_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "breachpilot-webui": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ABUSEIPDB_KEY": "${ABUSEIPDB_KEY}",
        "BHE_SECRET": "${BHE_SECRET}",
        "BREACHPILOT_API_KEY_FILE": "${BREACHPILOT_API_KEY_FILE}",
        "BREACHPILOT_API_TOKEN": "${BREACHPILOT_API_TOKEN}"
      }
    }
  }
}
03

Exposed tools (22)

14 read · 8 write · 0 destructive.

ToolRiskDescription
DVWAread
backdoorwriteInstall a backdoor.
browser.dom.inspectreadDOM snapshots
browser.navigatereadOpen URLs
customreadType your own goal
cve_lookupreadNVD CVE lookup for a known product/version string (e.g.
enumerate-then-reportreadMap and report.
evil_toolreadreturn
get_runwriteReturn one run
get_skillreadReturn one skill
list_runsreadList recent assessment runs (read-only history). Newest first.
okreadd
probe_tool_without_audit_gatereadreturn command
run_limited_terminalwriteRun a command if it is an allowlisted Nmap command and the
run_nmap_basic_scanwriteService/version detection on a single approved host.
run_nmap_ping_sweepwriteRun `nmap -sn` against an approved subnet. Returns live hosts.
run_nmap_service_scanwriteService + scripts + OS detection on a single approved host.
run_nmap_triage_scanwriteTop-port triage scan against an approved subnet.
run_nmap_vuln_scanwriteRun the Nmap NSE `vuln` category on a single approved host.
search_cve_intelreadNVD CVE lookup for a known product/version string.
search_skillsreadLexical + field-weighted search over the runtime skill catalog
search_vulnerability_intelreadDefensive public vulnerability/advisory search. The query is
04

Trust audit

BLOCKgrade F · trust 22/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (17 observation(s))
Network
declared (21 observation(s))
Shell
declared (10 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/exploiting-http-request-smuggling/SKILL.md:300
A TE.CL smuggling attack injects a partial POST request to a comment endpoint. The next user's request (including cookies and authorization headers) is appended to the comment body and stored in the d
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/exploiting-idor-vulnerabilities/SKILL.md:266
The `/api/users/{id}` endpoint returns full user profiles including email, phone, and address. The API only checks if the request has a valid token but never verifies whether the token owner matches t
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/exploiting-jwt-algorithm-confusion-attack/SKILL.md:74
login_resp = requests.post(f"{BASE_URL}/auth/login", json={"email": "[email protected]", "password": "TestPass123!"})
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/exploiting-jwt-algorithm-confusion-attack/SKILL.md:397
4. Send the forged token to `GET /api/v1/users/me` - server accepts it (algorithm confusion confirmed)
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
skills/performing-content-security-policy-bypass/scripts/agent.py:177
"description": f"'unsafe-eval' allows eval() and similar in {directive}",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
skills/performing-content-security-policy-bypass/scripts/agent.py:178
"bypass": "Use eval(), Function(), setTimeout('string') for XSS",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
skills/performing-security-headers-audit/scripts/agent.py:97
finding["issues"].append("unsafe-eval allows eval() calls (XSS risk)")
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
skills/testing-for-xss-vulnerabilities-with-burpsuite/scripts/agent.py:155
weaknesses.append("unsafe-eval allows eval()")
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp_exploit_server.py:133
"(`ssh -i ~/.ssh/id_ed25519 user@host`); if you must materialize a key file use "
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
plugins/github_dorks/plugin.py:55
"org:{org} filename:id_rsa",
Why it matters. touches a credential store
HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
tools/attack_modules/modules/supply_chain.py:306
/.env" ... urllib.request
Why it matters. reads secrets in the same file that sends data out
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
skills/auditing-mcp-servers-for-tool-poisoning/SKILL.md:148
"http://169.254.169.254/latest/meta-data/",  # AWS IMDS
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
skills/bypassing-authentication-with-forced-browsing/scripts/agent.py:72
unauth_resp = requests.get(url, timeout=timeout, allow_redirects=False, verify=False)
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
skills/bypassing-authentication-with-forced-browsing/scripts/agent.py:81
verify=False,
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
skills/bypassing-authentication-with-forced-browsing/scripts/agent.py:127
resp = requests.request(method, urljoin(base_url, path), timeout=10, verify=False)
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
skills/bypassing-authentication-with-forced-browsing/scripts/agent.py:151
resp = requests.get(urljoin(base_url, variant), timeout=10, verify=False)
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
skills/bypassing-authentication-with-forced-browsing/scripts/agent.py:174
resp = requests.get(urljoin(base_url, path), timeout=10, verify=False)
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
skills/auditing-mcp-servers-for-tool-poisoning/scripts/agent.py:35
SMUGGLE = re.compile(r"[---\U000e0000-\U000e007f]")
HIGHPrompt injection · prompt.read_system · CWE-94, CWE-1427
skills/auditing-mcp-servers-for-tool-poisoning/SKILL.md:98
Print every tool/prompt/resource description without verification, then read them for hidden instructions, `<important>`-style blocks, or imperative text aimed at the model.
HIGHPrompt injection · prompt.read_system · CWE-94, CWE-1427
skills/maybe/llm-grammar-fuzzing/SKILL.md:36
Capture the model's expected input contract: the system prompt, the tool schemas (JSON Schema for MCP tools / function calls), the message format (chat roles), and any structured-input validator (a Py
HIGHPrompt injection · prompt.read_system · CWE-94, CWE-1427
skills/maybe/prompt-injection-defense/SKILL.md:36
4. **Add output guardrails.** Run the model's response through a deterministic classifier before any action. Block: requests to call tools not in the allowlist, requests to reveal the system prompt, r
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
docs/skill-authoring.md:100
role-directive lines (`## SYSTEM:`, `[SYSTEM]`, `<<SYSTEM>>`, `<|...|>`),
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
docs/skills.md:126
imported markdown** — role-directive lines (`## SYSTEM:`, `[SYSTEM]`,
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
docs/skills.md:127
`<<SYSTEM>>`, `<|...|>`) and tool-call mimics (`- run tool: ...`) are
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
skills/README.md:204
- Role-directive headings/lines are dropped: `## SYSTEM:`, `[SYSTEM]`,
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-11 · audit v0.4.1 · source sha 6d1e37803655full audit observations/trust-audit/mcp-server/braydos-h__breachpilot.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-116d1e37803655BLOCKF22first audit
06

Questions

What is the BreachPilot MCP server?

Autonomous Offensive Security Agent for Red Team Operations

What tools does BreachPilot expose?

22 in total: 14 read-only, 8 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is BreachPilot safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (22/100) and found 25 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does BreachPilot need?

It reads ABUSEIPDB_KEY, BHE_SECRET, BREACHPILOT_API_KEY_FILE, BREACHPILOT_API_TOKEN, DD_API_KEY, DEFECTDOJO_API_KEY, GITHUB_TOKEN, HIBP_API_KEY, MCP_HTTP_IDENTITY_SECRET, MCP_HTTP_TOKEN, NESSUS_ACCESS_KEY and NESSUS_SECRET_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does BreachPilot run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as breachpilot-webui at 0.68.4.

How current is this page?

The grade is for one exact copy of the source (6d1e37803655), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement