Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege tenant user
-
DeliveryCraft profile filter name with trailing '--' SQL comment
-
ExploitSend tRPC event.events query to backend
-
ExecutionClickHouse JOIN subquery closes and comments out project_id scope
-
ImpactRead event data across all tenant projects
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 read access to at least one project (PR:L); there is no privilege escalation step and no victim interaction. The attacker sends a crafted zChartEventFilter.name (an unconstrained z.string()) through the tRPC event.events query (the same flaw also reaches getEventsCount and the funnel service), using a 'profile.'-prefixed value whose fragment after the first dot contains spaces, parentheses, ClickHouse USING(...) syntax and a trailing '-- ' comment to close the profiles JOIN subquery and comment out the outer 'WHERE project_id' scope. No special or non-default configuration is needed - default deployments of OpenPanel before 3.0.0 are vulnerable. The only limiting factor is that the attacker must hold a valid authenticated session; exploitation is otherwise remote, single-request, and returns cross-tenant results directly. |
| Impact | This is a genuine but moderate-priority data-confidentiality flaw, not a top-tier emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P) and the 7.0 (High) score reflect network-reachable, low-complexity exploitation that requires authentication (PR:L). The impact is cross-tenant read: an authenticated user of one project can dump event data from every project/tenant, which maps to high confidentiality impact (VC:H) with only incidental integrity effect and no availability impact. The signals are consistent with 'important but not critical': EPSS is low at 0.27% (19th percentile), the CVE is NOT on CISA KEV (no confirmed active exploitation), and the vuln.today decision label is 'this_week' rather than act_now/emergency. The one signal that raises attention is the detailed, working proof-of-concept published in the vendor's own GHSA advisory, which lowers the barrier to opportunistic abuse by any user who already has an account. Note two conflicts to verify: (1) the vendor 4.0 vector sets UI:P (passive user interaction), yet the described attack is a direct attacker-issued tRPC request with no victim interaction - UI:P appears unjustified and likely overstates one mitigating factor; (2) the GHSA 'source code evidence' block states 'fixed in: not yet patched,' which conflicts with the EUVD/vendor 'patch available' status and the presence of fixing commit a2aa053 - treat 3.0.0 as the fixed release but confirm with the vendor. Overall: real priority for any multi-tenant OpenPanel deployment because tenant isolation is broken and a PoC is public, but the authentication requirement and low EPSS argue against emergency ranking. |
| Exploit ScenarioDerived | A legitimate low-privilege OpenPanel user with read access to a single project calls the tRPC event.events query and supplies a crafted profile filter name containing a trailing SQL comment (e.g. 'profile.email, project_id FROM profiles) AS p USING (project_id) -- '), which closes the profiles JOIN subquery and comments out the outer 'WHERE project_id' tenant scope. The response then returns events belonging to all other projects/tenants (paths, geo, profile_id, revenue, etc.). A step-by-step working PoC is published in the vendor GHSA advisory, so exploitation requires only a valid account and a single crafted API request (AV:N/AC:L). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
OpenPanel deployments before 3.0.0 are exposed to SQL injection through the tRPC event.events query, which splices an unconstrained profile.* filter name directly into the profiles-JOIN subquery, letting any authenticated user with read access to a single project comment out the WHERE project_id scoping and read events (path, country, city, profile_id, revenue) from every other tenant. The same unsanitized JOIN construction also appears in getEventsCount and the funnel service, so the exposure is not limited to a single endpoint. A public PoC reference with reproduction steps accompanies the GitHub advisory (GHSA-pc3q-gw7f-p2x2); it is not verified as working exploit code and there is no KEV entry. EPSS is low at 0.27% (19th percentile), and the vendor fixed the flaw with an allowlist in the 3.0.0 release.
RemediationAI
Upgrade OpenPanel to 3.0.0 or later, which is the vendor-released fix per the GHSA and the commit at https://github.com/Openpanel-dev/openpanel/commit/a2aa053cb23e92967e812d3be5fb0f1d606d9fdc; that commit replaces the raw uniq(profileFilters.map(f => f.split('.')[0])) construction with a profileJoinColumns() allowlist (PROFILE_TABLE_COLUMNS) in event.service.ts, funnel.service.ts and cohort.service.ts. If an immediate upgrade is not possible, reduce exposure by restricting who can hold an authenticated account and read access to a project (the flaw requires a valid session with read on at least one project), or by blocking or rate-limiting the tRPC event.events, event-count and funnel routes at the proxy - the trade-off is that legitimate dashboard and funnel functionality depends on those same endpoints, so blocking breaks reporting. Detection can rely on reviewing tRPC request logs for profile. filter names containing spaces, parentheses, USING( or -- sequences coming from non-administrative users. Note that upgrading is the only complete fix; log monitoring and access restriction only narrow the attack surface.
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
OpenPanel is an open-source analytics platform backed by ClickHouse; its tRPC API accepts chart/event filters typed as zChartEventFilter, where the name field is an unconstrained z.string(). When a filter is prefixed with profile. (e.g. profile.email), the event-list query builder in packages/db/src/services/event.service.ts constructs a LEFT ANY JOIN (SELECT id, <column list> FROM profiles FINAL WHERE project_id = ...) ON profile.id = profile_id subquery by string-concatenating the segment after profile. into the SELECT column list. Column names are SQL identifiers and therefore cannot be escaped, and while the bare-column WHERE branch validates against an EVENT_TOP_LEVEL_COLUMNS allowlist, that guard was never applied to the JOIN column list - split('.')[0] is a truncation, not a sanitizer, and the surviving fragment can still contain spaces, parentheses, quotes, ClickHouse USING(...) join syntax and -- comments. Splitting on the dot does not remove these characters. Because the JOIN and the outer WHERE project_id = '<caller>' are emitted on a single line, a trailing -- inside the injected fragment comments out the tenant scope, so the outer SELECT ... FROM events returns rows for all projects. The root cause class is CWE-89 (SQL injection). The upstream fix (commit a2aa053) introduces a PROFILE_TABLE_COLUMNS allowlist and a profileJoinColumns() helper in filter-where.service.ts that drops any non-allowlisted identifier before it reaches SQL text, and applies it in event.service.ts (getEventList, getEventsCount, the EventService query path), funnel.service.ts and cohort.service.ts.
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:P/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N
Authenticated API user (PR:L), single crafted network request with no victim interaction (UI:N, AV:N, AC:L); read-only cross-tenant data disclosure gives C:H with no write or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
OpenPanel before 3.0.0 contains an sql injection vulnerability that allows authenticated users to bypass tenant scoping by injecting unescaped profile filter names into a JOIN subquery. Attackers can supply a crafted filter name with a trailing comment to bypass the project_id WHERE clause and read events from all projects.
Executive ViewAI
OpenPanel versions before 3.0.0 contain a high-severity SQL injection vulnerability that allows any authenticated user with basic project read access to bypass tenant isolation and access sensitive event data-including paths, locations, and revenue-from all other customers. This poses a significant multi-tenant data breach risk, potentially eroding customer trust and triggering regulatory scrutiny. Immediate patching to version 3.0.0 is critical to prevent unauthorized cross-tenant data exposure.
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-110515
GHSA-4c79-56xr-vg4w
NVD
CVE.org
EPSS
Exploit-DB