v3/docs/adr/ADR-337-plugin-supply-chain-integrity-memory-governance.md
Status: Proposed Authors: claude (dream-cycle agent, 2026-06-01) Related: ADR-004 (Plugin Architecture), ADR-006 (Unified Memory), ADR-013 (Core Security), ADR-015 (Unified Plugin System), ADR-131 (ToolOutputGuardrail — different layer), ADR-144 (Authorization Propagation — different layer), dream-cycle issue #2249
Note on ADR numbering: ADR-144 is proposed in branch
dream/2026-05-31-security(authorization propagation). This record uses ADR-337 to avoid collision.
Two Grade A papers published in April–May 2026 document active supply-chain attacks that bypass all current defenses in Ruflo's plugin system:
DDIPE (arXiv:2604.03081, Apr 3, 2026): Document-Driven Implicit Payload Execution embeds malicious logic in plugin documentation and configuration templates. Achieves 11.6–33.5% bypass rate across four frameworks and five models; 2.5% of adversarial skills evade both detection and alignment systems. Four confirmed CVEs were disclosed from this research.
Semantic Compliance Hijacking — SCH (arXiv:2605.14460, May 14, 2026): Translates malicious goals into natural-language compliance rules within skill/plugin descriptions. The agent generates harmful code dynamically at runtime — no static payload exists. Achieves 77.67% confidentiality breach and 67.33% RCE success with 0.00% detection by current scanning tools. Signature-based defenses are entirely blind to SCH.
Ruflo's current plugin install path (v3/@claude-flow/cli/src/plugins/) fetches from IPFS via Pinata with no signature verification and no semantic intent analysis.
MINJA (arXiv:2601.05504, Jan 2026): Memory injection via query-only interaction achieves up to 95% success under idealized conditions. In realistic production environments, success falls to 28–38% for strong models — still unacceptable for a system where compromised memory can redirect agent behavior.
Mnemonic Sovereignty survey (arXiv:2604.16548, Apr 2026): Identifies nine governance primitives required for secure long-term agent memory. No existing published architecture satisfies all nine. The core gap in Ruflo: the shared collaboration memory namespace (and all AgentDB namespaces) accepts writes from any agent with no per-namespace authorization.
This is architecturally distinct from:
This ADR introduces two new trust boundaries:
These boundaries require new module surfaces, protocol additions to the plugin registry format, and an API addition to AgentDB — all architectural decisions.
Add PluginIntegrityVerifier to @claude-flow/security with two verification stages:
Stage 1 — Signature verification (blocks DDIPE):
discovery.ts MUST refuse to install unsigned plugins when CLAUDE_FLOW_STRICT_PLUGINS=true (default: warn-only for backwards compatibility)v3/@claude-flow/cli/src/plugins/trust/trust-anchors.jsonStage 2 — Semantic intent scan (blocks SCH):
plugins install, pipe all natural-language fields (description, readme excerpt, compliance rules) through a lightweight intent classifierImplementation targets:
v3/@claude-flow/security/src/plugins/integrity-verifier.ts (new)v3/@claude-flow/cli/src/plugins/store/discovery.ts (add verification hook on install)v3/@claude-flow/cli/src/plugins/trust/trust-anchors.json (new)Add write authorization to AgentDB namespaces:
writeNamespaces: string[] grantMemoryWriteDenied errorAddress governance primitives 1 (write authorization), 2 (read authorization), 3 (update authorization) from the Mnemonic Sovereignty taxonomy. Primitives 4–9 deferred for a future ADR.
Implementation targets:
v3/@claude-flow/memory/src/namespaces/authorization.ts (new)v3/@claude-flow/memory/src/agent-db.ts (add grant enforcement)v3/@claude-flow/cli/src/agent/spawn.ts (add writeNamespaces parameter)CLAUDE_FLOW_STRICT_PLUGINS=false) — no breaking change for existing unsigned pluginsCLAUDE_FLOW_STRICT_MEMORY=true is setPositive:
Negative:
plugins install (acceptable for install-time, not runtime)