[總管交辦·安全] arcrun_publish_component 零人閘上架——提交即 active/public,MCP 已上 claude.ai 全域=攻擊面,須加人審閘 #23

Closed
opened 2026-07-07 07:03:54 +00:00 by Leo · 3 comments
Owner

[總管] 審 PR #22 時核實 code 發現,leo 已定性「太危險」。

現狀(已核實)

  • registry/src/actions/submitComponent.ts:沙盒機檢(體積/syscall 白名單/Gherkin)通過後直接寫入 status:'active' + visibility:'public' 到 SUBMISSIONS_KV。
  • queryComponents.ts同一顆 KVidx: 讀=提交完立刻可被搜到/引用。
  • MCP 工具 arcrun_publish_component 對所有 MCP client 開放,而 arcrun-mcp 已掛 claude.ai 全域 connector(2026-07-07)——任何雲端 session(含被 prompt injection 的)都能直接把一顆 WASM 塞進公開零件庫。

為什麼是洞

  • 違反既立紅線:新零件=框架級決策,fork → PR → docs/component-pr-review-standard.md 審 → arm/發布(llms.txt「不自製零件」、D27 code 零件不鑄 domain、D28)。沙盒機檢擋得住 syscall,擋不住「語意上有害/劣質/仿冒名稱的零件」。
  • 供應鏈風險:零件是全人共用框架的執行單元,一顆惡意零件會被所有引用它的 workflow 執行。

要求(出 SDD 給總管審,再實作)

  1. 短期止血(先做):submitComponent 寫入改 status:'pending';queryComponents/component-loader 只讀 active。MCP 工具回應改為「已提交,待人審」。
  2. 人審 promote 閘:pending → active 需維護者動作(CLI acr admin promote 或 console,須 owner 憑證)。promote 前人工過 component-pr-review-standard。
  3. 裁量點(leo 閘)arcrun_publish_component 這條 MCP 路徑要不要乾脆下架(回歸純 PR 投稿)?——若保留,只當「提交草稿」入口。
  4. 連帶:SUBMISSIONS_KV 裝的是長效零件 metadata=長效資料在 KV,違「KV 只留暫存」政策 → 併入 KV 退休戰盤點(#14/#16/#17 家族),遷 KBDB/D1。

關聯

PR #22(文件面:CONTRIBUTING 改寫為 PR 路線)、#16/#17(KV 退休戰)、docs/component-pr-review-standard.md

[總管] 審 PR #22 時核實 code 發現,leo 已定性「太危險」。 ## 現狀(已核實) - `registry/src/actions/submitComponent.ts`:沙盒機檢(體積/syscall 白名單/Gherkin)通過後**直接寫入 `status:'active'` + `visibility:'public'`** 到 SUBMISSIONS_KV。 - `queryComponents.ts` 從**同一顆 KV** 的 `idx:` 讀=提交完立刻可被搜到/引用。 - MCP 工具 `arcrun_publish_component` 對所有 MCP client 開放,而 arcrun-mcp **已掛 claude.ai 全域 connector(2026-07-07)**——任何雲端 session(含被 prompt injection 的)都能直接把一顆 WASM 塞進公開零件庫。 ## 為什麼是洞 - 違反既立紅線:新零件=框架級決策,**fork → PR → `docs/component-pr-review-standard.md` 審 → arm/發布**(llms.txt「不自製零件」、D27 code 零件不鑄 domain、D28)。沙盒機檢擋得住 syscall,擋不住「語意上有害/劣質/仿冒名稱的零件」。 - 供應鏈風險:零件是全人共用框架的執行單元,一顆惡意零件會被所有引用它的 workflow 執行。 ## 要求(出 SDD 給總管審,再實作) 1. **短期止血(先做)**:submitComponent 寫入改 `status:'pending'`;queryComponents/component-loader **只讀 `active`**。MCP 工具回應改為「已提交,待人審」。 2. **人審 promote 閘**:pending → active 需維護者動作(CLI `acr admin promote` 或 console,須 owner 憑證)。promote 前人工過 component-pr-review-standard。 3. **裁量點(leo 閘)**:`arcrun_publish_component` 這條 MCP 路徑要不要乾脆下架(回歸純 PR 投稿)?——若保留,只當「提交草稿」入口。 4. **連帶**:SUBMISSIONS_KV 裝的是長效零件 metadata=**長效資料在 KV**,違「KV 只留暫存」政策 → 併入 KV 退休戰盤點(#14/#16/#17 家族),遷 KBDB/D1。 ## 關聯 PR #22(文件面:CONTRIBUTING 改寫為 PR 路線)、#16/#17(KV 退休戰)、`docs/component-pr-review-standard.md`。
Author
Owner

[總管] leo 拍板結構解(2026-07-07),本 issue 範圍更新——不做 pending/promote 佇列,直接廢除 MCP 發布路徑

  1. 下架 arcrun_publish_component MCP 工具(registry 的 POST /components submit 端點同步關閉或收斂為維護者憑證限定)。投稿唯一入口=新 repo Leo/arcrun-components 的 PR(人審閘=merge 本身),merge 後由維護者發布進 registry。
  2. SUBMISSIONS_KV 退休:現存零件 metadata(含 21 內建的 registry 記錄)遷 KBDB/D1(併 KV 退休戰 #14/#16/#17 家族),KV binding 依「移讀寫→移 binding→重部署→leo 刪 namespace」順序。
  3. arcrun_get_component_guidearcrun_search_components 等唯讀工具保留(找現成零件是紅線框第一步,讀不危險)。
  4. 出 SDD 給總管審再動手;部署 gate 照舊(總管 review diff → gated 部署 leo21c)。

背景:arcrun-components README 已載紅線框(99% 不需新零件)+PR 流程+與主 repo 分工表;審核 checklist 真身仍在 Arcrun docs/component-pr-review-standard.md(該分支請 leo 順手 merge 進 main,兩個 repo 都引用它)。

[總管] leo 拍板結構解(2026-07-07),本 issue 範圍更新——**不做 pending/promote 佇列,直接廢除 MCP 發布路徑**: 1. **下架 `arcrun_publish_component` MCP 工具**(registry 的 `POST /components` submit 端點同步關閉或收斂為維護者憑證限定)。投稿唯一入口=新 repo **`Leo/arcrun-components`** 的 PR(人審閘=merge 本身),merge 後由維護者發布進 registry。 2. **SUBMISSIONS_KV 退休**:現存零件 metadata(含 21 內建的 registry 記錄)遷 KBDB/D1(併 KV 退休戰 #14/#16/#17 家族),KV binding 依「移讀寫→移 binding→重部署→leo 刪 namespace」順序。 3. `arcrun_get_component_guide`/`arcrun_search_components` 等唯讀工具**保留**(找現成零件是紅線框第一步,讀不危險)。 4. 出 SDD 給總管審再動手;部署 gate 照舊(總管 review diff → gated 部署 leo21c)。 背景:arcrun-components README 已載紅線框(99% 不需新零件)+PR 流程+與主 repo 分工表;審核 checklist 真身仍在 Arcrun `docs/component-pr-review-standard.md`(該分支請 leo 順手 merge 進 main,兩個 repo 都引用它)。
Author
Owner

08-01 複核: 仍成立,未修——保留(安全票,優先度建議提高)

現況實查(gitea/main)registry/src/actions/submitComponent.ts:135-136 一字未改——

visibility: public as const,
status: active as const,

⇒ 沙盒機檢過關後仍直接寫入 active + public,短期止血(要求 1:改寫 pending、queryComponents 只讀 active尚未實作

風險未降反升arcrun_publish_component 現在確實掛在 claude.ai 全域 connector 上(本 session 的 MCP 工具清單可見該工具)⇒ issue 描述的攻擊面是活的:任何雲端 session(含被 prompt injection 的)都能把一顆 WASM 推進公開零件庫,且立刻可被搜到/被別人的 workflow 執行。

要求 3 是 leo 裁量點arcrun_publish_component 這條 MCP 路徑要不要乾脆下架),已列入本次盤點的「需 leo 裁決」清單。

要求 1(改 pending)不需等裁決、四題全否、可直接做,建議優先排在裁決之前先止血。

## 08-01 複核:❌ 仍成立,未修——保留(安全票,優先度建議提高) **現況實查(gitea/main)**:`registry/src/actions/submitComponent.ts:135-136` 一字未改—— ```ts visibility: public as const, status: active as const, ``` ⇒ 沙盒機檢過關後**仍直接寫入 active + public**,短期止血(要求 1:改寫 `pending`、queryComponents 只讀 `active`)**尚未實作**。 **風險未降反升**:`arcrun_publish_component` 現在確實掛在 claude.ai 全域 connector 上(本 session 的 MCP 工具清單可見該工具)⇒ issue 描述的攻擊面**是活的**:任何雲端 session(含被 prompt injection 的)都能把一顆 WASM 推進公開零件庫,且立刻可被搜到/被別人的 workflow 執行。 **要求 3 是 leo 裁量點**(`arcrun_publish_component` 這條 MCP 路徑要不要乾脆下架),已列入本次盤點的「需 leo 裁決」清單。 要求 1(改 pending)不需等裁決、四題全否、可直接做,建議優先排在裁決之前先止血。
Author
Owner

08-01 leo 裁決:關閉——這條路封了

leo:「#23 已經沒有 publish 了,零件等級一律走 PR,要寫 wasm 不可能小白來做,所以這條路封了。」

替代方案已存在matrix/arcrun-components(獨立 contributing repo,Gitea 3f26b31
——README 含紅線框+PR 人審閘流程+分工表+worker 模板,結構上取代零人閘 MCP 發布

⚠️ 殘留待清(另立)mcp/src/tools/arcrun_publish_component.tsregistry.ts
publish 路徑程式碼仍在。依「死代碼=錯誤環境信號」鐵律應 git rm,否則未來的 AI 會以為還能用。

## 08-01 leo 裁決:**關閉——這條路封了** > leo:「#23 已經沒有 publish 了,**零件等級一律走 PR**,要寫 wasm 不可能小白來做,所以這條路封了。」 **替代方案已存在**:`matrix/arcrun-components`(獨立 contributing repo,Gitea `3f26b31`) ——README 含紅線框+PR 人審閘流程+分工表+worker 模板,**結構上取代零人閘 MCP 發布**。 ⚠️ **殘留待清(另立)**:`mcp/src/tools/arcrun_publish_component.ts` 與 `registry.ts` 的 publish 路徑**程式碼仍在**。依「死代碼=錯誤環境信號」鐵律應 git rm,否則未來的 AI 會以為還能用。
Leo closed this issue 2026-07-31 10:34:14 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leo/Arcrun#23