You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v1.3 — cross-tool secret taint tracking: when a credential-shaped value is
returned by one MCP tool, tag a SHA-256 hash of it (never the raw secret)
into a shared per-project ledger; when that same value later appears in a
different tool's call arguments, escalate the call to at least Approval,
closing the cross-tool confused-deputy relay (OWASP MCP09). Also wired into
the --check-staged and --check-cmd surfaces. New flags: --taint-ttl-secs,
--no-taint-tracking, --taint-list, --taint-flush.
v1.4 — reversible secret cloaking: register a secret and reference it in
tool-call arguments as {{cloak:NAME}}. Shield resolves the placeholder to
the real value only on the copy it forwards to the MCP server, so the secret
never lands in the agent/LLM context; in reverse, any registered secret that
leaks into a tool result is scrubbed back to its placeholder before the
agent sees it. Covers both stdio and Streamable-HTTP transports; zero-copy
when no placeholder is present. New module src/cloak.rs; vault at
~/.aperion-shield/cloak-vault.json (mode 0600, never logged). New flags:
--cloak-add, --cloak-list, --cloak-remove, --no-cloak.
Bumps to 1.4.0.
Copy file name to clipboardExpand all lines: Cargo.toml
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
[package]
2
2
name = "aperion-shield"
3
-
version = "1.2.1"
3
+
version = "1.4.0"
4
4
edition = "2021"
5
5
description = "Aperion Shield -- a local MCP guardrail for AI coding agents with optional biometric identity gates (ID.me). Standalone, free, open source."
private-key blocks, DB connection strings) are tracked. A bespoke or
168
+
vendor-specific credential format outside that corpus is not tagged. The
169
+
scope is deliberately tight to keep false positives near zero; it is not
170
+
a claim of completeness.
171
+
-**No file locking.** The ledger (`.aperion-shield/taint.jsonl`) is
172
+
append-only and lock-free, the same best-effort contract as decision
173
+
memory. A read/write race between two Shield processes in the same
174
+
project can, in a narrow window, miss a just-written entry (fail open,
175
+
never fail closed with a false block on unrelated data).
176
+
-**CWD-scoped.** The ledger lives under the current working directory's
177
+
`.aperion-shield/` (falling back to `~/.aperion-shield/` when the
178
+
project dir is read-only) -- the same inherited scoping caveat that
179
+
already applies to decision memory. Two IDE windows rooted at different
180
+
directories do not share a ledger.
181
+
-**We never store the raw secret** -- only its hash, plus the entity kind
182
+
and the source tool/surface for the human-readable reason. `--taint-list`
183
+
and the audit log surface those metadata, never the credential itself.
184
+
185
+
The signal is intended to *raise the cost and visibility* of a cross-tool
186
+
credential relay and force a human decision on it, not to be an
187
+
unbypassable exfiltration control. For "I don't trust this server's
188
+
process at all," `--sandbox` remains the complementary control.
189
+
149
190
### Cryptographic primitives
150
191
151
192
-**Ed25519** for identity proofs (the `--identity-*` family) and
@@ -329,3 +370,4 @@ If you operate Shield as part of an enterprise deployment:
329
370
| 2026-05-20 | v0.7.0 shipped. No new advisories or fix-required changes; this is a feature-only release. `cargo audit` clean against `Cargo.lock` at the v0.7.0 commit. New surfaces (`--install-hooks`, `--check-staged`, `--check-pushed-refs`, `--suggest-rules`) all stay within the standalone process model — no new network endpoints, no new on-disk persistence beyond `.git/hooks/` (Shield itself) and the operator-redirected audit log. Supported-versions table updated; v0.6.x dropped to security-only. |
330
371
| 2026-07-03 | v1.2.1 shipped. Hardening for the v1.2 continuous drift-check probe, prompted by external feedback: dropped the `__shield_drift_`-prefixed request id (a static, greppable marker, given this project is open source) in favor of a bare random UUID, and added +/-20% jitter to the polling interval so the cadence isn't a clean periodic signal. New §3 subsection "Known limitation: drift-check probes are not unspoofable" documents what this does and does not close — a targeted adversary running statistical traffic analysis could still attempt evasion; that residual risk is inherent to any protocol-level monitor sharing a channel with the thing it doesn't trust, and `--sandbox` is the complementary control for that threat model. No CVE; not a regression, a hardening of a feature shipped hours earlier. |
331
372
| 2026-05-27 | v0.8.0 shipped. No new advisories or fix-required changes; this is a feature-only release. `cargo audit` clean against `Cargo.lock` at the v0.8.0 commit. New surfaces (`--install-shims`, `--uninstall-shims`, `--list-shims`, `--check-cmd`, `--explain`) all stay within the standalone process model. The shim path writes per-command `/bin/sh` wrappers into `~/.aperion-shield/bin/` (or `--shim-dir PATH`) at mode `0755` inside a directory at mode `0700`; **Shield will NOT overwrite any file it didn't write itself** (foreign-file collisions exit non-zero, file untouched). `--explain` is pure-input/pure-output — no on-disk persistence, no side-effects on decision memory or audit. Supported-versions table updated; v0.7.x dropped to security-only. |
373
+
| 2026-07-03 | v1.3.0 shipped. New feature: cross-tool secret taint tracking (`--taint-ttl-secs`, `--no-taint-tracking`, `--taint-list`, `--taint-flush`). Closes the OWASP MCP09 confused-deputy / cross-tool-relay gap that per-call, single-server guardrails structurally miss — a credential leaked by one tool being relayed into a different tool/server/surface. New on-disk persistence: `.aperion-shield/taint.jsonl`, a per-project append-only ledger storing **only a SHA-256 hash** of each observed credential-shaped value (never the raw secret) plus its entity kind and source tool/surface. No new network endpoints. New §3 subsection "Known limitation: cross-tool taint tracking is heuristic" documents the honest limits: hash-equality correlation only (transformed/re-encoded secrets evade), finite regex corpus, lock-free (fail-open) ledger, CWD-scoped — it raises the cost and visibility of a relay and forces a human decision, it is not an unbypassable exfiltration control; `--sandbox` remains the complementary process-level control. `cargo audit` clean against `Cargo.lock` at the v1.3.0 commit. |
0 commit comments