{"id":"CVE-2026-62251","aliases":["EUVD-2026-94522","GHSA-f46q-3v67-fmm4","GO-2026-6672"],"status":"published","title":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query","description":"Homer is open source telecom observability software. Prior to version 11.0.283, 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. Version 11.0.283 patches the issue.","severity":{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00433,"percentile":0.3806,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-89"],"published":"2026-10-07T16:09:41Z","modified":"2026-10-28T02:31:03Z","fixes":[{"ecosystem":"Go","package":"github.com/sipcapture/homer-app","fixed_in":["0.0.0-20260625085520-a7d027dc684b"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Go","package":"github.com/sipcapture/homer-app","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.0.0-20260625085520-a7d027dc684b"}]}]},{"source":"osv","ecosystem":"Go","package":"github.com/sipcapture/homer-app","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.0.0-20260625085520-a7d027dc684b"}]}]},{"source":"osv","ecosystem":"Go","package":"github.com/sipcapture/homer-app","ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}]}],"products":[{"vendor":"sipcapture","product":"homer"}],"references":[{"url":"https://github.com/sipcapture/homer/security/advisories/GHSA-f46q-3v67-fmm4","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/sipcapture/homer/pull/837","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/sipcapture/homer/commit/a7d027dc684b210b62285c49f555ac88d64f35f0","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/sipcapture/homer/releases/tag/11.0.283","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/advisories/GHSA-f46q-3v67-fmm4"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62251.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-62251","tags":["advisory"]},{"url":"https://github.com/sipcapture/homer","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-62251","title":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query","description":"Homer is open source telecom observability software. Prior to version 11.0.283, 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. Version 11.0.283 patches the issue.","status":"published","published":"2026-10-07T16:09:41.434Z","modified":"2026-10-07T22:05:52.827Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T14:20:14.999906Z"}],"euvd":[{"id":"EUVD-2026-94522","description":"Homer is open source telecom observability software. Prior to version 11.0.283, 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. Version 11.0.283 patches the issue.","status":"published","published":"2026-10-07T16:09:41Z","modified":"2026-10-07T22:05:52Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"updated_at":"2026-11-02T17:27:33.555595Z"}],"ghsa":[{"id":"GHSA-f46q-3v67-fmm4","title":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query","description":"### Summary\nThe `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.\n\n### Details\n**`coordinator/handlers/statistics_v4.go` lines 74-107** — `V4StatisticsQuery`:\n```go\nquery := \u0026model.V4StatisticsQuery{}\nif err = c.Bind(query); err != nil { ... }\n// No ValidateRawSQL call here — contrast with other handlers:\nresults, err := h.flightService.Query(c.Request().Context(), query.RawQuery)\n```\n\n**Contrast with `coordinator/handlers/search.go` line 194** — secure pattern not followed:\n```go\nif err := sqlvalidator.ValidateRawSQL(rawQuery); err != nil {\n    return c.JSON(http.StatusBadRequest, ...)\n}\n```\n\n`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.\n\n### PoC\n```bash\n# With a valid JWT (or empty JWT secret bypass):\ncurl -s -X POST http://\u003chomer-host\u003e/api/v4/statistics/query \\\n  -H \"Authorization: Bearer \u003cjwt\u003e\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"param\": {\n      \"query\": [{\"rawquery\": \"SELECT * FROM information_schema.tables\"}]\n    }\n  }'\n# Returns all table names accessible to the DuckDB FlightSQL service\n\n# Exfiltrate all stored call records:\n# \"rawquery\": \"SELECT * FROM hep LIMIT 1000\"\n# Arbitrary DuckDB SQL is accepted including INSTALL/LOAD for extension-based exfiltration\n```\n\n### Impact\nSQL 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.\n\n### Fix\nApply `sqlvalidator.ValidateRawSQL()` to `query.RawQuery` before passing it to `h.flightService.Query()`, matching the pattern already used in `search.go` and `transactions_v4.go`.\n\nIf possible, please apply for a CVE number when posting.","status":"published","published":"2026-10-07T16:13:08Z","modified":"2026-10-07T16:13:09Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T14:41:28.013673Z"}],"nvd":[{"id":"CVE-2026-62251","description":"Homer is open source telecom observability software. Prior to version 11.0.283, 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. Version 11.0.283 patches the issue.","status":"published","published":"2026-10-07T17:16:56.303Z","modified":"2026-10-08T21:09:00.643Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"secondary"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T14:12:54.809359Z"}],"osv":[{"id":"CVE-2026-62251","title":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query","description":"Homer is open source telecom observability software. Prior to version 11.0.283, 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. Version 11.0.283 patches the issue.","status":"published","published":"2026-10-07T16:09:41.434Z","modified":"2026-10-28T02:31:03.968149516Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T15:45:12.933503Z"},{"id":"GHSA-f46q-3v67-fmm4","title":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query","description":"### Summary\nThe `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.\n\n### Details\n**`coordinator/handlers/statistics_v4.go` lines 74-107** — `V4StatisticsQuery`:\n```go\nquery := \u0026model.V4StatisticsQuery{}\nif err = c.Bind(query); err != nil { ... }\n// No ValidateRawSQL call here — contrast with other handlers:\nresults, err := h.flightService.Query(c.Request().Context(), query.RawQuery)\n```\n\n**Contrast with `coordinator/handlers/search.go` line 194** — secure pattern not followed:\n```go\nif err := sqlvalidator.ValidateRawSQL(rawQuery); err != nil {\n    return c.JSON(http.StatusBadRequest, ...)\n}\n```\n\n`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.\n\n### PoC\n```bash\n# With a valid JWT (or empty JWT secret bypass):\ncurl -s -X POST http://\u003chomer-host\u003e/api/v4/statistics/query \\\n  -H \"Authorization: Bearer \u003cjwt\u003e\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"param\": {\n      \"query\": [{\"rawquery\": \"SELECT * FROM information_schema.tables\"}]\n    }\n  }'\n# Returns all table names accessible to the DuckDB FlightSQL service\n\n# Exfiltrate all stored call records:\n# \"rawquery\": \"SELECT * FROM hep LIMIT 1000\"\n# Arbitrary DuckDB SQL is accepted including INSTALL/LOAD for extension-based exfiltration\n```\n\n### Impact\nSQL 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.\n\n### Fix\nApply `sqlvalidator.ValidateRawSQL()` to `query.RawQuery` before passing it to `h.flightService.Query()`, matching the pattern already used in `search.go` and `transactions_v4.go`.\n\nIf possible, please apply for a CVE number when posting.","status":"published","published":"2026-10-07T16:13:08Z","modified":"2026-10-20T00:56:06.107700572Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T15:46:46.006631Z"},{"id":"GO-2026-6672","title":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query in github.com/sipcapture/homer-app","description":"Homer: Authenticated SQL Injection via Unvalidated rawquery Field in /api/v4/statistics/query in github.com/sipcapture/homer-app.\n\nNOTE: The source advisory for this report contains additional versions that could not be automatically mapped to standard Go module versions.\n\n(If this is causing false-positive reports from vulnerability scanners, please suggest an edit to the report.)\n\nThe additional affected modules and versions are: github.com/sipcapture/homer-app before v0.0.0-20260625085520-a7d027dc684b.","status":"published","published":"2026-10-20T00:20:56Z","modified":"2026-10-20T00:45:10.130885127Z","updated_at":"2026-11-02T15:47:03.11707Z"}]}}
