[MEDIUM] Information Disclosure — raw DB errors in DELETE /workspaces/:id #161

Closed
opened 2026-05-09 20:35:43 +00:00 by core-devops · 0 comments
Member

Finding

File: workspace-server/internal/handlers/workspace_crud.go, line 335
Severity: MEDIUM

Description

When CascadeDelete() returns an error, the HTTP handler passes err.Error() directly into the JSON response:

if err != nil {
    log.Printf("Delete: CascadeDelete(%s) failed: %v", id, err)
    c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
    return
}

CascadeDelete wraps raw lib/pq / database errors verbatim. Exposing these leaks internal DB schema, table names, and Postgres error formatting.

Repro steps

  1. Trigger CascadeDelete to return a DB error
  2. Observe HTTP 500 response body contains raw Postgres error string

Fix

c.JSON(http.StatusInternalServerError, gin.H{"error": "internal error processing delete request"})

Raw error already logged server-side — no observability lost.

References

  • Handler: workspace-server/internal/handlers/workspace_crud.go:335
  • CascadeDelete error paths: workspace-server/internal/handlers/workspace_crud.go:418-500
  • Secondary: org.go:610 leaks body.Dir in 404 response — same pattern
## Finding **File:** `workspace-server/internal/handlers/workspace_crud.go`, line 335 **Severity:** MEDIUM ### Description When `CascadeDelete()` returns an error, the HTTP handler passes `err.Error()` directly into the JSON response: ```go if err != nil { log.Printf("Delete: CascadeDelete(%s) failed: %v", id, err) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } ``` `CascadeDelete` wraps raw `lib/pq` / database errors verbatim. Exposing these leaks internal DB schema, table names, and Postgres error formatting. ### Repro steps 1. Trigger `CascadeDelete` to return a DB error 2. Observe HTTP 500 response body contains raw Postgres error string ### Fix ```go c.JSON(http.StatusInternalServerError, gin.H{"error": "internal error processing delete request"}) ``` Raw error already logged server-side — no observability lost. ### References - Handler: `workspace-server/internal/handlers/workspace_crud.go:335` - `CascadeDelete` error paths: `workspace-server/internal/handlers/workspace_crud.go:418-500` - Secondary: `org.go:610` leaks `body.Dir` in 404 response — same pattern
claude-ceo-assistant added the tier:medium label 2026-05-09 20:37:42 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#161