Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as project-read member
-
DeliverySubmit crafted cohort.preview filter with malicious column name
-
ExploitUnescaped identifier spliced into argMax/cityHash64/HAVING
-
ExecutionCorrelated subquery bypasses outer project_id scope
-
ImpactRead other tenants' ClickHouse data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated OpenPanel account with at least project-read access to any project (PR:L); no write or admin role is needed. The attacker invokes the tRPC cohort.preview query (protectedProcedure, guarded only by READ on the top-level projectId) and supplies a cohort property filter whose 'name' field - which is a free-form z.string() with no allowlist - contains SQL in column-identifier context; using operator isNotNull with an empty value array even removes the need for a filter value. The deployment must use the ClickHouse analytics backend (the default) in a multi-tenant configuration for the cross-tenant read to have value. Limiting factors: a valid low-privileged account is mandatory (not exploitable pre-authentication), and the impact is confined to reading data, not modifying it. The affected sink (profileColumnAccess) is distinct from the separately-fixed profileColumnSql, which already enforces the PROFILE_COLUMNS allowlist. |
| Impact | This is a genuine but access-gated data-disclosure issue rather than a drop-everything emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) and the description agree: exploitation is network-reachable and low-complexity but requires an authenticated account - specifically a project-read member - so PR:L is confirmed, not inferred. Impact is confidentiality-only (VC:H, VI:N/VA:N): a cross-tenant ClickHouse read, with no integrity or availability effect. EPSS is low (0.23%, 14th percentile) and there is no CISA KEV listing, consistent with a flaw that needs valid credentials and crafted tooling rather than one seeing opportunistic mass exploitation. The vuln.today decision label is 'this_week', reflecting a real-but-not-critical priority. A detailed proof-of-concept filter is published in the GitHub Security Advisory, lowering the practical bar for a would-be attacker who already holds project-read access. One conflict must be flagged: the intelligence feed states 'Patch: Available from vendor' and EUVD implies a fix in 3.0.0, yet the GHSA source evidence explicitly says the fix is 'unreleased' / 'not yet patched' on HEAD - verify fix availability with the vendor before relying on an update. |
| Exploit ScenarioDerived | An attacker who holds (or obtains) a project-read membership on a multi-tenant OpenPanel instance calls the tRPC cohort.preview endpoint and submits a cohort filter whose column-name field contains an injected correlated subquery. Because the column identifier is spliced unescaped into argMax/cityHash64/comparison clauses and the subquery is not constrained by the outer project_id scope, the attacker reads another tenant's ClickHouse data. A public PoC reference exists in the GHSA advisory (an isNotNull filter with an embedded SELECT); it is not verified as working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
SQL injection in OpenPanel's cohort preview query lets any user holding project-read access on any project read ClickHouse data belonging to other tenants; this is a genuine but access-gated data-disclosure issue rather than a drop-everything emergency. The flaw is confined to the ClickHouse analytics backend (the default) in multi-tenant deployments, requires a valid low-privileged account (authenticated, project READ only, no write or admin role), and affects OpenPanel versions before 3.0.0. Exploitation permits read-only cross-tenant disclosure with no integrity or availability impact, there is no CISA KEV listing, EPSS is low at 0.23% (14th percentile), and a public PoC reference exists in the vendor advisory (a cohort.preview payload using operator isNotNull with an empty value array); it is not verified as working exploit code. A vendor patch is available, and the source-level fix is to apply the PROFILE_COLUMNS allowlist to profileColumnAccess.
RemediationAI
Vendor-released patch: upgrade to OpenPanel 3.0.0 or later, the version boundary cited in the CVE record (affected range is everything before 3.0.0). Note that the upstream GHSA, as reported, described the fix as unreleased on HEAD 61a9245, so operators on a rolling deploy should confirm the deployed commit contains the fix and, if maintaining a fork, backport the maintainer-suggested change: apply the PROFILE_COLUMNS allowlist used by profileColumnSql to profileColumnAccess so any non-allowlisted column identifier is rejected rather than returned verbatim. Where upgrading cannot happen immediately, compensating controls are limited and carry trade-offs: restrict project-read membership to fully trusted users (removes the low-privilege attack path entirely but reduces collaboration), and separate tenants so that no ClickHouse instance holds data from mutually untrusted projects (eliminates the cross-tenant payoff but forfeits shared analytics). Applying the allowlist patch at source is the only complete fix; advisory: https://github.com/Openpanel-dev/openpanel/security/advisories/GHSA-gvwr-5684-wjqc.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
CWE-89 (SQL injection) in @openpanel/db cohort.service.ts: profileColumnAccess(name) escapes only the profiles.properties.<key> branch and returns every other name verbatim as a column identifier, with no allowlist. That unescaped identifier is spliced into argMax(${columnAccess}, ...), cityHash64(${referencedColumns}) and comparison/HAVING clauses while only the filter VALUE is passed through sqlstring.escape - the classic value-escaped-but-identifier-raw mistake. Reachability runs through the tRPC cohort.preview query (protectedProcedure guarded by enforceAccess requiring READ on the top-level projectId, with needsWrite=false) and the free-form zChartEventFilter.name = z.string(); flow continues preview → countCohort/computeCohort → computePropertyBasedCohort → buildPropertyBasedCohortQuery → chQuery. Because an attacker-authored subquery lands in identifier/HAVING position, the outer project_id WHERE clause does not constrain it, enabling cross-tenant reads against ClickHouse. Notably, this sink is distinct from the previously fixed GHSA-hwf2-2v2h-7892: filter-where.service.ts profileColumnSql enforces the PROFILE_COLUMNS allowlist, whereas profileColumnAccess has no equivalent check.
Know when Openpanel gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
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
Network-reachable, low-complexity injection needing a project-read account (PR:L, UI:N); confidentiality-only cross-tenant read with no integrity or availability impact, so C:H/I:N/A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
OpenPanel before 3.0.0 contains a sql injection vulnerability in profileColumnAccess in cohort.service.ts that allows project-read members to inject SQL by supplying unescaped profile filter column names. Attackers can submit a cohort.preview filter whose name contains a subquery spliced into argMax, cityHash64, or comparison clauses to read other tenants' ClickHouse data.
Executive ViewAI
CVE-2026-116812 is a high-severity SQL injection flaw in OpenPanel's cohort preview feature that allows any authenticated user with basic project-read permissions to access ClickHouse analytics data belonging to other tenants in multi-tenant deployments. This cross-tenant data disclosure affects organizations using OpenPanel versions before 3.0.0, potentially exposing sensitive analytics data to low-privileged users who should only see their own project's information. While access is gated and no active exploitation has been observed, customer trust and data confidentiality obligations make this a priority for remediation.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
Code execution in OpenPanel's js-runtime component lets an authenticated user who holds project write access escape the
An issue in Open Panel v.0.3.4 allows a remote attacker to escalate privileges via the Fix Permissions function. Rated h
An issue in Open Panel v.0.3.4 allows a remote attacker to escalate privileges via the Fix Permissions function. Rated m
Cross Site Request Forgery vulnerability in Open Panel OpenAdmin v.0.3.4 allows a remote attacker to escalate privileges
Server-side request forgery in OpenPanel before 2.3.0 lets unauthenticated remote attackers coerce the panel server into
Unauthenticated ClickHouse SQL injection in OpenPanel before 3.0.0 lets remote attackers read other tenants' analytics d
Sandbox escape in OpenPanel's JavaScript webhook-template runtime (packages/js-runtime) allows an authenticated project
Authenticated remote code execution in OpenPanel before 2.3.0 allows any project member with read access to escape the m
Unauthenticated information disclosure in OpenPanel (openpanel-dev/openpanel) exposes argon2id password hashes and full
Unauthenticated SSRF in OpenPanel before 2.3.0 exposes two utility endpoints - /misc/favicon and /misc/og - that blindly
Cross-tenant data exposure in OpenPanel before 3.0.0 lets any authenticated user read other projects' profiles, events a
Read-level project members in OpenPanel before 3.0.0 can retrieve plaintext integration secrets - Slack bot tokens, inco
EUVD-2026-110520
GHSA-gjrj-qcgp-p97f
NVD
CVE.org
EPSS
Exploit-DB