/

CVE-2026-116808

Severity:

HIGH RISK

(7.2)

SQL Injection (CWE-89) in OpenPanel Profile API Service

CVE-2026-116808

Deferred

Vulnerability type

Category:

SQL Injection

CWE:

CWE-89

Impact:

Cross-tenant data disclosure

Severity:

HIGH RISK

(7.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

OpenPanel before 3.0.0 contains a SQL injection vulnerability in the profile values functionality. An authenticated attacker may craft the property parameter to bypass project scoping and read profiles, events, and sessions belonging to other tenants.

OpenPanel before 3.0.0 contains a SQL injection vulnerability in the profile values functionality. An authenticated attacker may craft the property parameter to bypass project scoping and read profiles, events, and sessions belonging to other tenants.

Affected context

The vulnerability may occur in OpenPanel deployments that expose the profile.values functionality to authenticated users and construct database queries using the property parameter. It becomes particularly risky where tenant or project boundaries rely on dynamically assembled SQL conditions, including project_id scoping, without robust parameterization.

The vulnerability may occur in OpenPanel deployments that expose the profile.values functionality to authenticated users and construct database queries using the property parameter. It becomes particularly risky where tenant or project boundaries rely on dynamically assembled SQL conditions, including project_id scoping, without robust parameterization.

Exploit preconditions

  • Attack surface: The authenticated profile.values application endpoint or function
  • Required access: A valid OpenPanel user account with access to the affected functionality
  • Trigger point: Processing of a crafted property parameter
  • Why exploitation is possible: User-controlled input may influence a SQL expression, allowing injected SELECT, FROM, and WHERE clauses and potentially disabling the intended project_id restriction
  • Attack surface: The authenticated profile.values application endpoint or function
  • Required access: A valid OpenPanel user account with access to the affected functionality
  • Trigger point: Processing of a crafted property parameter
  • Why exploitation is possible: User-controlled input may influence a SQL expression, allowing injected SELECT, FROM, and WHERE clauses and potentially disabling the intended project_id restriction

Why this happens

The underlying bug is insufficient separation between user-controlled input and SQL syntax. The application appears to incorporate the property parameter into a dynamically constructed query without consistently using parameterized statements or an allowlisted expression model.

This maps to CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'), because attacker-controlled input can alter the intended structure and scope of a database query.

The underlying bug is insufficient separation between user-controlled input and SQL syntax. The application appears to incorporate the property parameter into a dynamically constructed query without consistently using parameterized statements or an allowlisted expression model.

This maps to CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'), because attacker-controlled input can alter the intended structure and scope of a database query.

Potential impact

  • An attacker may read profiles belonging to other projects or tenants.
  • Sensitive event records may be disclosed.
  • User or application session data could be exposed.
  • Cross-tenant confidentiality boundaries may be weakened.
  • Extracted information could support further account or infrastructure attacks.
  • An attacker may read profiles belonging to other projects or tenants.
  • Sensitive event records may be disclosed.
  • User or application session data could be exposed.
  • Cross-tenant confidentiality boundaries may be weakened.
  • Extracted information could support further account or infrastructure attacks.

General mitigation guidance

Mitigation generally focuses on ensuring that user input cannot become executable SQL syntax.

Common defensive patterns include:

  • Use parameterized queries or prepared statements for all database values.
  • Replace dynamic SQL property expressions with a strict allowlist of supported fields and operations.
  • Enforce tenant and project authorization independently of client-supplied query conditions.
  • Apply least-privilege database permissions to limit readable tables and columns.
  • Avoid exposing sensitive fields through generic profile or query interfaces.
  • Validate inputs using positive schemas and treat authentication as insufficient for cross-tenant authorization.

Mitigation generally focuses on ensuring that user input cannot become executable SQL syntax.

Common defensive patterns include:

  • Use parameterized queries or prepared statements for all database values.
  • Replace dynamic SQL property expressions with a strict allowlist of supported fields and operations.
  • Enforce tenant and project authorization independently of client-supplied query conditions.
  • Apply least-privilege database permissions to limit readable tables and columns.
  • Avoid exposing sensitive fields through generic profile or query interfaces.
  • Validate inputs using positive schemas and treat authentication as insufficient for cross-tenant authorization.

How teams detect issues like this

High-level detection approaches include:

  • Static analysis for string concatenation, interpolation, or formatting used to build SQL statements from request parameters.
  • Code review checks for dynamic column, table, SELECT, FROM, or WHERE fragments derived from user input.
  • Runtime monitoring for unusual query structures, comment markers, unexpected clauses, or cross-project access patterns.
  • Database audit policies that alert when a tenant-scoped endpoint reads records outside the caller's authorized project.
  • Automated security testing that verifies authorization boundaries and rejects unsupported query expressions.

High-level detection approaches include:

  • Static analysis for string concatenation, interpolation, or formatting used to build SQL statements from request parameters.
  • Code review checks for dynamic column, table, SELECT, FROM, or WHERE fragments derived from user input.
  • Runtime monitoring for unusual query structures, comment markers, unexpected clauses, or cross-project access patterns.
  • Database audit policies that alert when a tenant-scoped endpoint reads records outside the caller's authorized project.
  • Automated security testing that verifies authorization boundaries and rejects unsupported query expressions.

Sources

SourceLink
github.comgithub.com/Openpanel-dev/openpanel/commit/a2aa053cb23e92967e812d3be5fb0f1d606d9fdc
github.comgithub.com/Openpanel-dev/openpanel/security/advisories/GHSA-4j6c-j6vc-xq96
vulncheck.comvulncheck.com/advisories/openpanel-before-3.0.0-clickhouse-sql-injection-via-profile-values

Frequently asked

questions

It may be exploitable through the OpenPanel application interface when the affected functionality is reachable by an authenticated user.

The attacker generally needs valid credentials and permission to invoke the profile.values functionality. Administrative access is not necessarily required if ordinary users can reach the vulnerable parameter.

Use parameterized database queries and replace user-selected SQL expressions with a narrowly allowlisted query model. Enforce project authorization separately from query construction.

Combine secure database APIs, positive input validation, tenant-aware authorization checks, least-privilege database accounts, code review, and tests that verify cross-tenant isolation.

It may be exploitable through the OpenPanel application interface when the affected functionality is reachable by an authenticated user.

The attacker generally needs valid credentials and permission to invoke the profile.values functionality. Administrative access is not necessarily required if ordinary users can reach the vulnerable parameter.

Use parameterized database queries and replace user-selected SQL expressions with a narrowly allowlisted query model. Enforce project authorization separately from query construction.

Combine secure database APIs, positive input validation, tenant-aware authorization checks, least-privilege database accounts, code review, and tests that verify cross-tenant isolation.

Find out what's already
exploitable in your codebase.