access-list: Basic-auth passwords stored and returned in plaintext #17

Closed
opened 2026-09-14 08:28:30 -05:00 by blake · 1 comment
Collaborator

Why

Access-list AccessItem.Password is stored and compared in plaintext (item.Password == pass with an explicit demo comment). Admin API GET /access-lists and GET /access-lists/{id} JSON-encode the full list including passwords.

Admin JWT is required to read them, and bootstrap/admin default-password issues were already fixed — but anyone with a stolen admin token (or DB file) gets every proxy basic-auth secret in cleartext. Practical bar: hash like the admin password (bcrypt) and redact on read.

Fix direction

  • Hash on create/update; bcrypt.CompareHashAndPassword in the proxy engine.
  • API responses omit or mask password fields (write-only).
## Why Access-list `AccessItem.Password` is stored and compared in plaintext (`item.Password == pass` with an explicit demo comment). Admin API `GET /access-lists` and `GET /access-lists/{id}` JSON-encode the full list including passwords. Admin JWT is required to read them, and bootstrap/admin default-password issues were already fixed — but anyone with a stolen admin token (or DB file) gets every proxy basic-auth secret in cleartext. Practical bar: hash like the admin password (bcrypt) and redact on read. ## Fix direction - Hash on create/update; `bcrypt.CompareHashAndPassword` in the proxy engine. - API responses omit or mask password fields (write-only).
eva closed this issue 2026-09-14 08:41:11 -05:00
Owner

Closed via #18 merge. develop+master @ 084d661. No release tag (helix-proxy has no historical tags; major via Rex).

Closed via #18 merge. develop+master @ 084d661. No release tag (helix-proxy has no historical tags; major via Rex).
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: s1d3sw1ped/helix-proxy#17