GHSA-rw2c-8rfq-gwfv

Suggest an improvement
Source
https://github.com/advisories/GHSA-rw2c-8rfq-gwfv
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/04/GHSA-rw2c-8rfq-gwfv/GHSA-rw2c-8rfq-gwfv.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-rw2c-8rfq-gwfv
Aliases
Published
2026-04-22T17:38:02Z
Modified
2026-06-25T23:11:35Z
Severity
  • 8.3 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L CVSS Calculator
Summary
Daptin: SQL injection via unvalidated goqu.L() calls in aggregate API
Details

Summary

The /aggregate/:typename endpoint accepted column and group query parameters that were passed verbatim to goqu.L() — a raw SQL literal expression builder — without any validation. This bypassed all parameterization and allowed authenticated users with any valid session to inject arbitrary SQL expressions.

Impact

An authenticated low-privilege user could:

  • Extract data from any table via subquery: (SELECT group_concat(email) FROM user_account) as leak
  • Disclose database internals: sqlite_version(), (SELECT sql FROM sqlite_master)
  • Exfiltrate cross-table data via correlated subqueries

The vulnerability was confirmed locally; user_account.email values were extracted via a crafted column parameter by a non-admin user.

Root Cause

goqu.L(userInput) in server/resource/resource_aggregate.go inserted user-supplied query parameters directly into the SQL string with no validation.

Fix (v0.11.4)

All goqu.L() calls on user-controlled input were eliminated and replaced with:

  • Structural expression parsing supporting all documented API forms
  • Schema-based column validation (column names checked against entity schema via TableInfo().GetColumnByName())
  • Exact-match allowlist for aggregate functions (count, sum, avg, min, max, first, last) and scalar functions (date, strftime, upper, lower, etc.)
  • Safe goqu constructors (goqu.I(), goqu.SUM(), goqu.Func()) for all generated expressions
  • allowedTables scope enforcement: qualified column refs (table.col) validated against root entity + explicitly joined tables only

Two additional DoS bugs were fixed in the same commit: uuid.MustParse panic on malformed UUID input and an index-out-of-range panic in ToOrderedExpressionArray on empty sort expressions.

Credits

Reported by @VashuVats.

Database specific
{
    "cwe_ids": [
        "CWE-89"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-04-22T17:38:02Z",
    "nvd_published_at": "2026-05-07T15:16:06Z",
    "severity": "HIGH"
}
References

Affected packages

Go / github.com/daptin/daptin

Package

Name
github.com/daptin/daptin
View open source insights on deps.dev
Purl
pkg:golang/github.com/daptin/daptin

Affected ranges

Type
SEMVER
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
0.11.4

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/04/GHSA-rw2c-8rfq-gwfv/GHSA-rw2c-8rfq-gwfv.json"