Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-reachable stats API with low-privilege tenant auth (PR:L) and low complexity; read-only cross-tenant leak gives C:H with no integrity or availability impact; scope kept unchanged as the same application enforces the bypassed filter.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Aptabase through commit 5a89368 contains a SQL injection vulnerability in the ClickHouse query backend that allows authenticated attackers to read event data across all tenants by injecting unsanitized filter parameters into Liquid SQL templates. Attackers can supply malicious values through EventName, CountryCode, OsName, DeviceModel, AppVersion, or SessionId parameters to inject a UNION ALL statement that bypasses the app_id tenant isolation filter across thirteen of the fifteen stats API endpoints.
AnalysisAI
Cross-tenant data disclosure in Aptabase (open-source privacy-friendly analytics) up to commit 5a89368 lets an authenticated tenant read every other tenant's event data by abusing a ClickHouse SQL injection in the stats API. Filter parameters (EventName, CountryCode, OsName, DeviceModel, AppVersion, SessionId) are interpolated unsanitized into Liquid SQL templates, letting an attacker append a UNION ALL that defeats the app_id tenant-isolation filter on 13 of 15 stats endpoints. Publicly available exploit code exists and the issue was reported by VulnCheck; no active exploitation is confirmed (not in CISA KEV).
Technical ContextAI
Aptabase renders ClickHouse queries from Liquid SQL templates, a text-templating approach where user-controlled filter values are substituted directly into the query string rather than passed as bound parameters. Because the filter fields are concatenated into the SQL text, the classic CWE-89 (Improper Neutralization of Special Elements used in an SQL Command) root cause applies: a value such as EventName can close the intended string literal and introduce attacker-controlled SQL. The tenant boundary in Aptabase is enforced logically by a WHERE app_id = <tenant> predicate; a UNION ALL sub-select does not inherit that predicate, so injected queries can read rows belonging to any app_id. The affected component per CPE is cpe:2.3:a:aptabase:aptabase (all versions through commit 5a89368), and the vulnerable surface is the ClickHouse query backend serving the stats API.
RemediationAI
No vendor-released fixed version number is identified in the provided data; the fix is described relative to commit 5a89368, so upgrade to a build newer than that commit once the maintainers publish it and monitor the Aptabase repository and the VulnCheck advisory (https://www.vulncheck.com/advisories/aptabase-sql-injection-via-clickhouse-query-backend) for the patched revision. Until a patched build is deployed, the durable fix is to convert the Liquid SQL templates to parameterized/bound ClickHouse queries or to strictly allowlist-validate the EventName, CountryCode, OsName, DeviceModel, AppVersion, and SessionId filter values (reject characters that can break out of a string literal, such as quotes, semicolons, and the UNION keyword). As compensating controls, restrict access to the stats API endpoints to trusted accounts and apply per-tenant network or WAF rules that block SQL meta-characters and UNION patterns in filter parameters, accepting that aggressive WAF filtering may reject legitimate event names containing quotes; on single-tenant deployments the cross-tenant impact is inherently reduced, so isolating tenants into separate ClickHouse databases/instances is an effective architectural mitigation at the cost of operational overhead.
Same weakness CWE-89 – SQL Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-46431
GHSA-8c62-2f67-357x