feat(scanner): reject plugin secrets copied into MCP env and args - #1161
seonghobae wants to merge 10 commits into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary: - Snapshot 19:03 UTC records Draft #1161 `a92e936` stacked on #1158. - Named secrets in MCP env/args/command fail closed. - Jules #1159 empty-host SSRF stays Draft under #1068. Rationale: - #999 is the single writer of the product-technical gap baseline. - #1099 remaining surfaces stay on stacked successors, not Close. Tests: - documentation-only; detector evidence lives on #1161 (1929/1929)
Summary: - Snapshot 19:15 UTC records Draft #1163 `cd5560e` stacked on #1161. - commands/*.md and named agents/*.md reuse released injection/exfil identities. - README and root AGENTS.md stay repository guidance. Rationale: - #999 is the single writer of the product-technical gap baseline. - #1099 remaining surfaces stay on stacked successors, not Close. Tests: - documentation-only; detector evidence lives on #1163 (1934/1934)
|
Current-head repair finding at Exact GREEN acceptance: match only an exact named environment variable token (including normal |
|
Current-head RED→GREEN evidence for
The PR is nine ahead / zero behind #1158 and mergeable. It remains Draft because this custom-base head has no hosted workflows or qualifying independent review. These local exact-tree results do not transfer predecessor coverage, authorize merge, or close #1099. |
Current repair boundary — 2026-09-12
feat/claude-plugin-secret-to-prompt-1099@02d9490358aef41974e0367039cb29a3e712aee8e899568e6fd98c0476832054d1f89336ce48af6ba5709f7d79acb06f0f3c86c6a74ad05afb4ee858975e6c3…and current feat(scanner): reject plugin secret-to-prompt and secret-to-log flows #1158 head02d9490…; no force updatePYTHONPATH=. python -m pytest -q tests/test_claude_plugin*.py→ 256 passed;py_compileandgit diff --checkpassedSuccessor of #1158 / issue #1099. Does not Close those. Does not steal #1158 secret-to-prompt, #1137 secret-to-network, #1157 conflicting-identity, or G-06 #1152.
Unique delta and authoritative boundary
Fail closed when an actual named-secret reference is copied into a Claude Code MCP server execution field (
claude-plugin-secret-to-mcp).Claude Code's current MCP contract expands environment references in
command,args,env,url, andheaders:https://code.claude.com/docs/en/mcp
.mcp.jsonenv.OPENAI_API_KEY=$OPENAI_API_KEYfails admission.args: ["--token", "$GITHUB_TOKEN"]andcommandinterpolation fail admission.${OPENAI_API_KEY}fail admission.--help=configure OPENAI_API_KEY,printf OPENAI_API_KEY, and longer names such asOPENAI_API_KEY_DOCUMENTATIONare not secret copies.${OPENAI_API_KEY:-}remains positive.claude-plugin-secret-to-network; prompt/log copies remain feat(scanner): reject plugin secret-to-prompt and secret-to-log flows #1158claude-plugin-secret-to-prompt.Ordinary restack and TDD lineage
ab73726c1bf96041b06b38ca1efed83d56e7a749has prior feat(scanner): reject plugin secrets copied into MCP env and args #1161a92e936f...as first parent and current feat(scanner): reject plugin secret-to-prompt and secret-to-log flows #115829d4214c...as second parent. Its tree1f575315...matches the independently verified local merge tree.172c260d52b8bc3a9a608e7405816127d20eefba: 3 failed / 9 deselected for prose-only args/command and near-name env keys.9303bfe414609a2826bd76a6a15961a231090900: existing positives plus 12/12 module and 232/232 Claude-plugin-family tests passed.89cc8c33e793a4aef7b4f5ffc3e5023f9545ef0c: 2 failed / 12 deselected for URL/header references.9d4c2cf015484e841de6a687269c4c6e0af61d34: module 14/14 and Claude-plugin family 234/234 passed.1684a4c1b5518fd85e8520f8558fe631864035ad: exact-prefix precision produced 2 failed / 1 passed.975e6c38ca8fe4be914845a2e00c291a033998e3, tree856db31cd9bbcd17e4ca3358f57ca4097de7e748: precision 3/3 and completetests/test_claude_plugin*.pyfamily 237/237 passed;py_compileand diff check passed.The current branch is nine ahead / zero behind #1158 and preserves its six-file unique detector/test/docs/workflow delta plus every #1157/#1158 change. Local results are exact-tree evidence, not repository-wide suite, coverage, hosted, approval, or release evidence.
Landing gate
Keep Draft. This custom-base PR currently has no hosted workflow runs or independent review. Before Ready/merge: obtain exact-head detector coverage, applicable Security/SAST/CodeQL, and qualifying independent review. Do not transfer predecessor coverage or results.
No force push, destructive rebase, self-approval, scanner suppression, source-neutral retrigger, stale evidence transfer, or protection bypass.
Relates to #1099. Relates to #1158. Relates to #1137.