Skip to content

feat(scanner): reject unsigned plugin downloads and runtime installers - #1138

Draft
seonghobae wants to merge 3 commits into
feat/claude-plugin-github-docker-authority-1099from
feat/claude-plugin-unsigned-download-1099
Draft

seonghobae wants to merge 3 commits into
feat/claude-plugin-github-docker-authority-1099from
feat/claude-plugin-unsigned-download-1099

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Fail closed on unsigned executable fetches in hooks/scripts/commands (claude-plugin-unsigned-executable-download): curl/wget writing a binary then chmod +x or executing it, and installer bootstrap such as curl | python.
  • Fail closed on unpinned package URL installs (claude-plugin-unpinned-package-install): pip/npm/cargo install of https:// or git+ URLs.
  • A pinned licensed plugin with only echo hi still passes. package.json plus a lockfile without a postinstall download is package_install inventory, not a finding. Ordinary pip install requests and curl healthchecks stay inventory.
  • Detector snippets omit secret literals and raw bidi.

Successor of #1137 / #1136 / #1099 TDD item 9. Does not Close #1099, #1137, #1136, #1135, #1134, #1129, #1087, #929, #983, #1106, #1036, #1133, or #998. Does not steal G-06 #1133. Does not reimplement #1036.

Ordinary restack — 2026-09-12

Test plan

  • Original RED then GREEN on tests/test_claude_plugin_supply_chain.py (67 passed)
  • Original statement coverage 1150/1150 and docstring coverage 70/70
  • Existing gh issue create / docker push inventory-not-finding contract retained
  • Current-parent ordinary restack and scoped 70/70
  • Exact-head Checks/OpenCode/Strix/CodeQL-verdict on this head
  • Keep Draft until current-head gates are GREEN

Relates to #1099. Relates to #1137.

RED coverage for curl -o plus chmod of a fetched binary, unpinned
pip/npm/cargo URL installs, lockfile inventory without postinstall
download, and snippet redaction of secrets and bidi. Relates to #1099.
Fail closed when hooks download a binary and chmod or execute it, pipe
curl/wget to an interpreter, or install from an unpinned package URL.
package.json plus a lockfile without a postinstall download stays
package_install inventory. GitHub write tokens, Docker sockets, and
secret-to-network flows are unchanged. Relates to #1099.
@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

seonghobae added a commit that referenced this pull request Sep 7, 2026
Summary:
- Snapshot 10:28 UTC records Draft #1138 `bdb3809` stacked on #1137.
- Unsigned executable downloads and unpinned URL installs fail closed.
- Lockfile-only package trees stay package_install inventory.

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 #1138 (1150/1150)
@seonghobae seonghobae added enhancement New feature or request priority: medium Normal-priority or P2 work labels Sep 8, 2026 — with ChatGPT Codex Connector
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Normal-priority or P2 work

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant