fix(mcp): pin Bearer workspaceId to the default workspace (RT-16) #69

Closed
opened 2026-06-21 01:56:56 +03:00 by Ghost · 0 comments

Источник: red-team-аудит, RT-16 (docs/red-team-report.md).

Что происходит

Bearer-путь /mcp (apps/server/src/integrations/mcp/mcp-auth.helpers.ts:320-338) доверяет workspaceId из самого токена, не привязывая его к дефолтному воркспейсу. На single-workspace self-host это безвредно, но формально открывает доступ юзера чужого воркспейса мимо per-workspace enablement.

Фикс

Запинить workspaceId токена к дефолтному (как делает Basic-путь через findFirst()):

// mcp-auth.helpers.ts — pin the token's workspace to the configured/default one,
// the SAME boundary the Basic path enforces via findFirst().
if (!payload.workspaceId || payload.workspaceId !== deps.expectedWorkspaceId)
  throw new UnauthorizedException(generic); // never leak why

Цена / приоритет

1 строка, безвредное усиление (для single-workspace — no-op по поведению).

**Источник:** red-team-аудит, RT-16 (`docs/red-team-report.md`). ### Что происходит Bearer-путь `/mcp` (`apps/server/src/integrations/mcp/mcp-auth.helpers.ts:320-338`) доверяет `workspaceId` из самого токена, не привязывая его к дефолтному воркспейсу. На single-workspace self-host это безвредно, но формально открывает доступ юзера чужого воркспейса мимо per-workspace enablement. ### Фикс Запинить `workspaceId` токена к дефолтному (как делает Basic-путь через `findFirst()`): ```ts // mcp-auth.helpers.ts — pin the token's workspace to the configured/default one, // the SAME boundary the Basic path enforces via findFirst(). if (!payload.workspaceId || payload.workspaceId !== deps.expectedWorkspaceId) throw new UnauthorizedException(generic); // never leak why ``` ### Цена / приоритет 1 строка, безвредное усиление (для single-workspace — no-op по поведению).
Ghost added the bugsecurity labels 2026-06-21 02:27:18 +03:00
Ghost closed this issue 2026-06-21 03:02:08 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#69