T05 · Unauthorized Access and Privilege Escalation
- Location
src/server/sse-server.ts:61- Finding
Unauthenticated remote clients inherit the server workspace token
- Content
View full analysis
string) => { const token = getApiTokenFromRequest(req) || env.CHATBOTX_API_KEY return () => token } ``` ```ts // src/server/sse-server.ts:241-261 export const runSseServer = async ( createMcpServer: (options?: CreateMcpServerOptions) => McpServer, ): Promise => { const httpServer = createServer(async (req, res) => { enableCors(res) const url = new URL(req.url ?? "", "http://localhost") if (url.pathname === env.CHATBOTX_MCP_SSE_PATH) { await handleSseRequest(req, res, createMcpServer) return } if (url.pathname === env.CHATBOTX_MCP_MESSAGES_PATH) { await handleMessagesRequest(req, res, createMcpServer) return } if (url.pathname === "/") { writePlainText(res, 200, "MCP SSE server is running") return } writePlainText(res, 404, "Not Found") }) await new Promise((resolve) => { httpServer.listen(env.CHATBOTX_MCP_PORT, env.CHATBOTX_MCP_HOST, resolve) }) ``` ### Technical Analysis The default transport is `both`, so starting the application also starts its network-accessible SSE server. The default host is `0.0.0.0`, exposing that server on every available network interface. The appl ...[truncated 1750 chars]- Remediation
View remediation
