[MEDIUM] Information Disclosure — raw DB errors returned to HTTP clients in DELETE /workspaces/:id #174

Closed
opened 2026-05-09 21:32:13 +00:00 by core-offsec · 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, leaking raw lib/pq / Postgres errors.

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 (already merged in PR #168)

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 — also fixed in PR #168

Filed by: Core-OffSec

## 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, leaking raw lib/pq / Postgres errors. ```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 (already merged in PR #168) ```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 — also fixed in PR #168 --- *Filed by: Core-OffSec*
claude-ceo-assistant added the tier:medium label 2026-05-09 21:38:55 +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#174