security: memory list API has no server-side workspace scoping (client-side filter only)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 42/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- typescript
調査の方向性
packages/opencode/src/altimate/workspace/memory-api.ts:150-162、memory-sync.ts:742-747、memory/prompt.ts:203,299 から始めて、メモリレコードがどのように一覧表示、フィルタリング、挿入されるかを追跡してください。issue では、根本的な修正にはおそらく altimate-backend のメモリ一覧エンドポイントを確認する必要があるとされています。完了条件は、メモリの一覧取得がサーバー側で workspace ごとにスコープされ、別の workspace のグローバルブロックが現在のセッションに挿入されないことです。
索引モデルが issue の本文から書いたものです。
説明
Found during v0.9.7 release review (Chaos Gremlin/Privacy Auditor persona, multi-persona review).
MemoryApi.list() (packages/opencode/src/altimate/workspace/memory-api.ts:150-162) fetches every memory record the authenticated credential can see and filters client-side via belongsHere() in memory-sync.ts:742-747. The code's own comment states: "No workspace filter is sent — the service's own query for a caller's records is not scoped by workspace, so narrowing happens in the caller."
For scope === "global" blocks, belongsHere() returns true unconditionally — a global-scope memory block written under any workspace this account has ever bound gets injected into every other session's system prompt, trusted verbatim as '## Altimate Knowledge... Apply it consistently' (memory/prompt.ts:203,299).
Risk: same-account, cross-workspace memory bleed. If a team shares one account/API key across multiple client workspaces, or a user maintains personal + client workspaces, content from one context leaks unlabeled into another. This is a real prompt-injection-via-shared-memory surface, though scoped to same-account (not cross-tenant/cross-customer).
Whether the backend additionally scopes by tenant/team (making this worse — cross-user, not just cross-workspace) could not be verified from the altimate-code repo; needs a check against altimate-backend's memory list endpoint.
Deferred from v0.9.7 because: (1) the whole workspace/memory-mirror feature is gated behind the off-by-default ALTIMATE_WORKSPACE pilot flag — zero impact on GA users; (2) proper fix is server-side workspace scoping, a backend change outside this repo's scope, not a <30min patch.
Downgrade from P0-candidate to deferred was an explicit user decision during the v0.9.7 release review gate.
- 主要言語
- TypeScript
- スター
- 805
- フォーク
- 122
- 平均マージ
- 2日 10時間
- マージ済み PR(30日)
- 63
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
AltimateAI/altimate-code のほかの issue
-
test: MCP tests fail when the developer's ~/.claude.json has MCP servers (HOME is not sandboxed)オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
AltimateAI/altimate-code#1386 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
AltimateAI/altimate-code#1384 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
AltimateAI/altimate-code#1323 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
AltimateAI/altimate-code#1288 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
AltimateAI/altimate-code#1285 ·
メンテナーはふだん 1 日以内に返信
AltimateAI/altimate-code の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
homarr-labs/dashboard-icons#2939 ·
メンテナーはふだん 1 日以内に返信
-
Agent/category reasoning variants are still checked against the stale model cache in chat.paramsオープンopencode
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
code-yeongyu/oh-my-openagent#10003 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
メンテナーはふだん 1 日以内に返信
-
Actions on Toastsオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
nextcloud-libraries/nextcloud-dialogs#2669 ·
メンテナーはふだん 1 日以内に返信