Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen WebSocket to /live/visitors/<payload>
-
ExploitBreak out of quoted project_id literal via projectId segment
-
ExecutionInject UNION/boolean count-oracle ClickHouse SQL
-
ImpactExfiltrate cross-tenant events and profiles inferentially
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 | Primary vector: no special conditions - remote unauthenticated exploitation against default configurations of OpenPanel before 3.0.0, because the /live/visitors/:projectId WebSocket route (live.router.ts) has no auth preHandler and wsVisitors skips the session + getProjectAccess checks that its sibling wsProjectEvents enforces; the projectId path segment is interpolated raw into the ClickHouse query with no cuid/format validation. Limiting factors: exfiltration is inferential (the sink is a uniq(profile_id) count, so data is recovered via UNION/boolean/count oracles rather than bulk dump), and the vendor's recommended read-only, single-statement-constrained ClickHouse user would confine impact to reads. Secondary vector (cohort.preview timeframe.start/end SQLi) is NOT unauthenticated - it requires a valid low-privilege project member whose own projectId is bound by enforceAccess, though the injected payload still reaches the shared ClickHouse tables for cross-tenant reads. |
| Impact | The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N, VC:H) scores 8.8 and is fully consistent with the source-code evidence: the /live/visitors/:projectId WebSocket handler (wsVisitors) calls guardSocket, which the advisory confirms only attaches an error listener and performs NO session or getProjectAccess check, so the projectId path segment reaches a raw ClickHouse string interpolation with no auth and no cuid/format validation. This makes remote, unauthenticated exploitation genuinely trivial, and SSVC marks it Automatable:yes with partial Technical Impact - a combination that normally argues for fast action, matching the 'this_week' decision label. The tempering signals are real too: EPSS is only 0.43% (37th percentile), there is no CISA KEV listing, and SSVC Exploitation is 'none' (no observed in-the-wild activity). The low EPSS despite an easy unauthenticated vector most plausibly reflects the product's small deployment footprint and the inferential nature of extraction (UNION/boolean/count oracle against a uniq(profile_id) count), not any difficulty of the bug itself - so this reads as a credible this-week priority for any org actually running OpenPanel rather than a mass-internet-scan emergency. Technical impact is confidentiality-focused (cross-tenant read of events/profiles); integrity is unaffected and availability impact is minor, consistent with VI:N/VA:L. |
| Exploit ScenarioDerived | An unauthenticated attacker opens a WebSocket to /live/visitors/' OR 1=1 -- , whose projectId path segment breaks out of the quoted WHERE project_id = '...' literal in getActiveVisitorCount, so the returned uniq(profile_id) count reflects all tenants' events rather than one project. Using UNION/subquery or boolean count-oracle payloads, the attacker inferentially exfiltrates other tenants' events and profiles from the shared ClickHouse table with no credentials. A benign proof-of-concept demonstrating this count-oracle is published in the GHSA advisory (not verified as weaponized exploit code). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Unauthenticated ClickHouse SQL injection in OpenPanel before 3.0.0 lets remote attackers read other tenants' analytics data by injecting SQL through the projectId path segment of the /live/visitors/:projectId WebSocket, a handler that skips the session and project-access checks its sibling endpoints enforce. A second, authenticated variant lets any project member inject through the unescaped timeframe start/end values in cohort.preview; in both cases the payload reaches the shared ClickHouse events table that is isolated only by a WHERE project_id predicate, so extraction is cross-tenant. Exploitation requires no credentials for the primary vector and no special configuration, though data recovery is inferential (UNION or boolean/count oracles against a uniq(profile_id) count) rather than a bulk dump; the vendor advisory includes a benign demonstration query, but it is not verified as working exploit code, the vendor has released 3.0.0 as a fix, CISA KEV does not list the issue, SSVC exploitation is 'none', and EPSS is low at 0.43% (37th percentile).
RemediationAI
Vendor-released patch: 3.0.0 - upgrade OpenPanel to 3.0.0 or later, which applies sqlstring.escape to projectId in EventBuffer.getActiveVisitorCount and to timeframe.start/end in cohort.service.ts buildTimeConstraint, and adds regression tests covering hostile values (see the upstream fix at https://github.com/Openpanel-dev/openpanel/commit/35ddc8ebbcd4ed0767933de61f014f153d68442a and the advisory https://github.com/Openpanel-dev/openpanel/security/advisories/GHSA-8wr9-x797-f238). If upgrading immediately is not possible, the same commit can be applied as a hotfix, and the vendor's accompanying hardening steps should be adopted: validate projectId against the expected cuid format before use and restore the session plus getProjectAccess checks in wsVisitors so /live/visitors matches its authenticated siblings - note that adding an auth gate breaks live-visitor counts for any embed or widget that currently relies on the unauthenticated route, so those callers need a credential or session path. As an interim containment, block or disable the /live/visitors WebSocket path at the reverse proxy, at the cost of losing the live-visitors view entirely. Independently, run the ClickHouse client used by OpenPanel with a read-only, single-statement-constrained user so injected payloads cannot write or chain statements; this confines the impact to reads but does not remove the injection itself. For the cohort.preview variant, restricting project membership lowers exposure but does not fix the cross-tenant read, since any valid member's payload still reaches the shared events table.
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 a TypeScript analytics platform whose monorepo splits an API app (apps/api), a tRPC layer (packages/trpc), shared DB services (packages/db) and validation schemas (packages/validation); product telemetry is stored in ClickHouse, where every tenant's events and profiles live in shared tables disambiguated only by a WHERE project_id = ... clause. CWE-89 applies because user-controlled strings are concatenated directly into ClickHouse SQL instead of being passed as bound parameters (ClickHouse {name:Type} query parameters) or escaped with sqlstring.escape, which the same codebase already uses elsewhere in the same query builders. The primary sink is EventBuffer.getActiveVisitorCount in packages/db/src/buffers/event-buffer.ts, which interpolates projectId into a SELECT uniq(profile_id) ... WHERE project_id = '${projectId}' statement; that value arrives from the WebSocket URL path via live.controller.ts wsVisitors, which calls guardSocket (confirmed to only attach an 'error' listener, not to authenticate) and then calls the sink without the req.session?.userId check or getProjectAccess lookup that wsProjectEvents performs, and live.router.ts registers the route with no auth preHandler while performing no cuid/format validation on the segment. The secondary sink is buildTimeConstraint in packages/db/src/services/cohort.service.ts, where timeframe.start and timeframe.end are validated only as z.string() in cohort.validation.ts and interpolated raw into toDate('${start}') / BETWEEN clauses reachable from cohort.preview; enforceAccess binds the caller's own projectId there, so that variant is a SQL injection and cross-tenant read rather than a project-ID access-control break. Because the primary sink returns a uniq count, cross-tenant recovery is inferential rather than a bulk dump, and the advisory's recommended read-only, single-statement-constrained ClickHouse user would confine impact to reads.
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:N/UI:N/VC:H/VI:N/VA:L/SC:N/SI:N/SA:N
Unauthenticated WebSocket reachable sink with no validation gives AV:N/AC:L/PR:N/UI:N; cross-tenant read yields C:H, no write path (I:N), minor A:L from expensive injected queries.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
OpenPanel before 3.0.0 contains an unauthenticated ClickHouse sql injection vulnerability that allows remote attackers to inject SQL through the projectId parameter of the /live/visitors/:projectId WebSocket, which lacks session and project-access checks. Attackers can use UNION or boolean count oracles to read other tenants' events and profiles, and project members can similarly inject via the cohort.preview timeframe values.
Executive ViewAI
OpenPanel releases before 3.0.0 contain a high-severity flaw that allows an unauthenticated remote attacker to bypass tenant isolation and read other customers' analytics data through ClickHouse SQL injection. Because the vulnerable components are public-facing WebSocket and cohort-preview endpoints with no special configuration required, any internet-exposed deployment is at risk of cross-tenant data exposure affecting customer trust, contractual data-separation guarantees, and regulatory obligations. Leadership should care because the impact is confidentiality of multi-tenant customer data, not just application availability.
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
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
Cross-tenant SQL injection in OpenPanel's analytics filter builder allows authenticated attackers with project-scoped re
EUVD-2026-110525
GHSA-wfxj-g749-hqjv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB