docs(security): SAFE-MCP audit report 2026-04-17 (closes #747) - #808
Merged
Conversation
Adds docs/security/safe-mcp-audit-2026-04-17.md — full SAFE-MCP ATT&CK
audit of @molecule-ai/mcp-server against 4 high-priority techniques:
SAFE-T1102 (Supply chain):
- NEW-003 HIGH: Unpinned npm MCP packages in .mcp.json (npx -y)
- VULN-003 HIGH: No manifest signing on GitHub plugin install
- VULN-004 HIGH: Floating plugin refs, no version pinning enforced
SAFE-T1201 (Prompt injection):
- VULN-002 HIGH: GLOBAL memory poisoning — delimiter spoofing gap
(partial mitigation via #767 globalMemoryDelimiter confirmed)
- VULN-006 MEDIUM: No tool output sanitization in MCP server
SAFE-T1301 (Excessive permissions):
- NEW-002 MEDIUM: Default subprocess sandbox allows language=shell/bash
SAFE-T1401 (Secret exfiltration):
- NEW-001 MEDIUM: builtin_tools missing auth_headers() on A2A calls
- VULN-005 MEDIUM: GLOBAL memories readable by all workspaces
Confirmed fix: VULN-001 (X-Workspace-ID system-caller forge, #761) CLOSED.
Closes #747.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 tasks
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 17, 2026
… PR #808 audit) Adds a concise action advisory for engineering leads summarising the 9 open findings from the full SAFE-MCP audit, with immediate remediation steps for NEW-003 (unpinned npm packages in .mcp.json — HIGH), a Phase 35 scoping recommendation for plugin supply-chain hardening (VULN-003, VULN-004), and medium-term GLOBAL memory scope controls (VULN-002, VULN-005). Pairs with: monorepo PR #808, docs PR #18 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 21, 2026
… PR #808 audit) Adds a concise action advisory for engineering leads summarising the 9 open findings from the full SAFE-MCP audit, with immediate remediation steps for NEW-003 (unpinned npm packages in .mcp.json — HIGH), a Phase 35 scoping recommendation for plugin supply-chain hardening (VULN-003, VULN-004), and medium-term GLOBAL memory scope controls (VULN-002, VULN-005). Pairs with: monorepo PR #808, docs PR #18 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[security-auditor-agent]
Closes #747.
Summary
docs/security/safe-mcp-audit-2026-04-17.md— full audit of the Molecule AI MCP server stack against the SAFE-MCP ATT&CK framework (Linux Foundation / OpenID Foundation, Apr 2026), covering four high-priority SAFE-T categoriesX-Workspace-ID: system:*forge is blocked at the HTTP handler layerFindings Summary
High-Priority Findings
NEW-003 (HIGH) — Unpinned npm MCP packages in
.mcp.json(#805)Both
@molecule-ai/mcp-serverand@awareness-sdk/localrun vianpx -ywith no version pin — arbitrary code execution on next restart if either npm package is compromised. Fix: pin exact versions, remove-y, add lockfile.VULN-003 (HIGH) — No manifest signing on GitHub plugin install (#806)
platform/internal/plugins/github.goclones plugin repos with no checksum/signature verification. A push to an org-allowed repo installs unverified content. Fix: addsha256:field to plugin.yaml, verify post-clone.VULN-004 (HIGH) — Floating plugin refs
No enforcement of pinned
#shaor#vtagfor production installs. Sameorg/reporef installs different code on reinstall. Fix: reject bareorg/repowithout explicit ref.VULN-002 (HIGH, partially mitigated) — GLOBAL memory delimiter spoofing (#807)
PR #767 added a
[MEMORY id=... scope=GLOBAL from=...]:wrapper — good mitigation. Remaining gap: content that begins with a fake[MEMORY ...]prefix defeats the visual heuristic. No write-time content scanning exists. Fix: reject writes matching delimiter prefix; add injection heuristic scan.Medium/Low Findings (backlog)
a2a_mcp_server.py— delegate_task results returned verbatimlanguage=shell/bash— SAFE-T1301builtin_tools/a2a_tools.pyanddelegation.pymissingauth_headers()on A2A calls_maybe_log_skill_promotionunauthenticated heartbeat POSTTest plan
X-Workspace-ID: system:forge) ina2a_proxy_test.go🤖 Generated with Claude Code — Security Auditor Agent