Repository navigation
feat(scanner): reject plugin secret-to-prompt and secret-to-log flows - #1158
seonghobae wants to merge 4 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 18:16 UTC records Draft #1158 `8c9f2d6` stacked on #1157. - Named env secrets copied into prompts, logs, or child env fail closed. - Curl/wget stays the secret-to-network class. 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 #1158 (1878/1878)
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)
Stack repair required after live predecessor advanceLive base branch Do not resolve this with force push, destructive rebase, or by dropping either lane's valid delta. Ordinary non-force restack acceptance after #1157 reaches semantic GREEN:
Until the predecessor RED is repaired and this descendant is restacked, keep Draft and do not transfer predecessor/successor GREEN evidence across commit identities. |
|
Ordinary non-force restack completed after #1157 advanced.
The merge tree preserves all current #1157 namespace/path tests and source repairs plus #1158's secret-to-prompt source, workflow, docs, changelog, and 264-line regression module. Fresh combined focused verification is 34 passed in 0.52s; Predecessor statement/public-doc coverage does not transfer to this merged head. No hosted workflow or independent review exists for the custom-base head, so the PR remains Draft. No force push, rebase, delta copy loss, or predecessor closure was used. |
|
Fresh exact-tree regression expansion: remote head |
Current repair boundary — 2026-09-12
feat/claude-plugin-conflicting-identity-1099@ba1e146c759e3c6dedd5ea14fe651e073332069702d9490358aef41974e0367039cb29a3e712aee88c1816d9f20ff215e54a8aec2f20d7addfd02c4429d4214…and current fix(scanner): reject duplicate invocation identities without namespace false positives #1157 headba1e146…; no force updatePYTHONPATH=. python -m pytest -q tests/test_claude_plugin*.py→ 239 passed;py_compileandgit diff --checkpassedSuccessor of #1157 / issue #1099. Does not Close those. Does not steal #1157 conflicting-identity, #1156 vendored-scope, #1137 secret-to-network, or G-06 #1152.
Unique delta
Fail closed when a hook or command interpolates an env/file secret into a prompt, log, or subprocess environment (
claude-plugin-secret-to-prompt):echo "$OPENAI_API_KEY" > prompt.txtfails admissionlogger.info(os.environ['OPENAI_API_KEY'])andprint(os.environ['GITHUB_TOKEN'])fail admissionlogging.info(api_key)andsubprocess.run(..., env={**os.environ, 'KEY': secret})fail admissioncurl -H "Authorization: Bearer $OPENAI_API_KEY"staysclaude-plugin-secret-to-network(feat(scanner): reject GitHub write tokens and Docker sockets #1137), not this rulesk-provider-secret literals stay that class#1137 remains owner of curl/wget/fetch secret-to-network. #1157 remains owner of conflicting identities.
Stack state
Exact head
29d4214c3d634ac7e5af271d503d39b4c7525691is an ordinary two-parent merge of prior #1158 head8c9f2d61236eb6e8cc1b27402d73fcef37128085and current #1157 head62d91cdc096f2a8174ad97ca41042bf11052a132. It is three ahead / zero behind #1157, mergeable, and its effective delta remains the intended seven files. The resulting tree7a346aaa90f55fc5fbcb36ae37c051a355b5c698matches the locally verified merge tree.Test plan
8c9f2d61...(tests/test_claude_plugin_secret_to_prompt.py)py_compile, and diff check passedRelates to #1099. Relates to #1157. Relates to #1137.