CVE-2026-62361
### Summary A SQL injection vulnerability in `GET /api/subscribers/export` allows an authenticated user with the `subscribers:sql_query` permission to bypass the table access control that exists on the regular query endpoint (`GET /api/subscribers`) and read arbitrary tables from the database — including `users` (bcrypt password hashes) and `settings` (SMTP credentials, API keys). Both error-based and time-based exfiltration techniques are confirmed to work. This creates a privilege escalation path: `subscribers:sql_query` → hash exfiltration → offline bcrypt crack (cost factor 6) → Super Admin account takeover. --- ### Details The subscriber query feature accepts a user-controlled `query` parameter that is injected directly into a SQL template via `strings.ReplaceAll`. The regular query endpoint `GET /api/subscribers` correctly calls `validateQueryTables` to block access to sensitive tables before execution. The export endpoint `GET /api/subscribers/export` **omits this call entirely**, creating an asymmetric bypass of an intentional security control. **`internal/core/subscribers.go` — protected path (regular query):** ```go // QuerySubscribers — table validation present stmt := strings.ReplaceAll(c.q.QuerySubscribersTpl, "%query%", cond) if err := validateQueryTables(c.db, stmt, allowedSubQueryTables); err != nil { return nil, 0, echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Error preparing subscriber query: %v", err)) } ``` **`internal/core/subscribers.go` — vulnerable path (export):** ```go // ExportSubscribers — NO table validation stmt := strings.ReplaceAll(c.q.QuerySubscribersForExport, "%query%", cond) tx, err := c.db.Preparex(stmt) // executes directly without restriction ``` **`queries/subscribers.sql` — the `%query%` placeholder is injected into a WHERE clause:** ```sql SELECT subscribers.id, subscribers.email, ... FROM subscribers LEFT JOIN subscriber_lists ON ... WHERE (subscribers.status != 'blocklisted') AND %query% ORDE
Properties
- Severity
- medium
- Summary
- listmonk: SQL Injection in `/api/subscribers/export` bypasses table access control, leaking admin password hashes and SMTP credentials
- Epss score
- 0.00297
- Cvss score
- 5.5
- Retrieved at
- 2026-11-07T06:44:45+00:00
- Ghsa published
- 2026-11-06T18:15:17Z
- Source url
- https://github.com/advisories/GHSA-xgjr-7j9q-2h4r
- Ghsa updated
- 2026-11-06T18:15:18Z
- Ghsa id
- GHSA-xgjr-7j9q-2h4r
- Last source
- FIRST EPSS
- Cve id
- CVE-2026-62361
- Cvss vector
- CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:L/A:N
- First seen by Signal
- 2026-11-06T18:28:06+00:00
- Name
- CVE-2026-62361
- Is ghsa only
- false
- Epss percentile
- 0.22453
Related Entities (3)
AFFECTS (1)
HAS_WEAKNESS (1)
VULNERABLE_TO (1)
Explore deeper with Ninja Signal's threat intelligence graph