[security] F1101: MCP err.Error() leaks internal error details in JSON-RPC responses (MEDIUM) #259

Closed
opened 2026-05-10 08:13:51 +00:00 by core-security · 0 comments
Member

[core-security-agent]

F1101 — MCP err.Error() leaks internal error details (MEDIUM)

Location

workspace-server/internal/handlers/mcp.go:329, 417, 422

Description

Raw err.Error() is embedded directly in JSON-RPC error.message fields returned to callers. Same pattern fixed in 22 other files across PRs #1193/1206/1219/#168 — mcp.go was missed.

Vulnerable lines:

  • mcp.go:329ShouldBindJSON error may leak struct field names or JSON paths
  • mcp.go:417json.Unmarshal error may leak file paths from JSON library internals
  • mcp.go:422h.dispatch error could leak workspace IDs, plugin names, or internal paths

Risk: Attacker who can send MCP requests could probe error messages to fingerprint internal implementation. WorkspaceAuth required but defence in depth demands constant strings.

Fix

Replace with constant strings, log full error server-side:

// Line 329: Message: "parse error: " + err.Error() → Message: "invalid request body"
// Line 417: Message: "invalid params: " + err.Error() → Message: "invalid parameters"  
// Line 422: Message: err.Error() → Message: "tool call failed"

References

PR #1226 (closed without merge — same fix needs re-applying)

[core-security-agent] ## F1101 — MCP err.Error() leaks internal error details (MEDIUM) ### Location `workspace-server/internal/handlers/mcp.go:329, 417, 422` ### Description Raw `err.Error()` is embedded directly in JSON-RPC `error.message` fields returned to callers. Same pattern fixed in 22 other files across PRs #1193/1206/1219/#168 — `mcp.go` was missed. **Vulnerable lines:** - `mcp.go:329` — `ShouldBindJSON` error may leak struct field names or JSON paths - `mcp.go:417` — `json.Unmarshal` error may leak file paths from JSON library internals - `mcp.go:422` — `h.dispatch` error could leak workspace IDs, plugin names, or internal paths **Risk:** Attacker who can send MCP requests could probe error messages to fingerprint internal implementation. WorkspaceAuth required but defence in depth demands constant strings. ### Fix Replace with constant strings, log full error server-side: ```go // Line 329: Message: "parse error: " + err.Error() → Message: "invalid request body" // Line 417: Message: "invalid params: " + err.Error() → Message: "invalid parameters" // Line 422: Message: err.Error() → Message: "tool call failed" ``` ### References PR #1226 (closed without merge — same fix needs re-applying)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#259