T05 · Unauthorized Access and Privilege Escalation
- Location
plugin/index.ts:448- Finding
Agent tools accept caller-controlled guild and workspace identifiers without local authorization
- Content
View full analysis
{ const data = await gwFetch("GET", `/api/guild/${guild_id}`); return JSON.stringify({ workspace_id: data.workspace_id, name: data.name, files: data.files, stats: data.stats }); }, }); api.registerTool({ name: "gworkspace_create", description: "Create a G.workspace for a guild", parameters: { type: "object", properties: { guild_id: { type: "string", description: "Discord guild ID" }, name: { type: "string", description: "Workspace name" }, }, required: ["guild_id"], }, handler: async ({ guild_id, name }: { guild_id: string; name?: string }) => { const data = await gwFetch("POST", `/api/guild/${guild_id}/create`, { name }); return JSON.stringify(data); }, }); api.registerTool({ name: "gworkspace_tasks", description: "Get pending annotation tasks for a workspace", parameters: { type: "object", properties: { guild_id: { type: "string", description: "Discord guild ID" } }, required: ["guild_id"], }, handler: async ({ guild_id }: { guild_id: string }) => { const data = await gwFetch("GET", `/api/guild/${guild_id}`); const tasks = await gwFetch("GET", `/w/${data.workspace_id}/api/tasks`); return JSON.stringify({ workspace_id: data.workspace_id, ...tasks }); }, }); api.registerTool({ name: "gworkspace_claim_task", description: "Claim an annotation task", parameters: { type: "object", properties: { workspace_id: { type: "string" }, tas ...[truncated 3517 chars]- Remediation
View remediation
