CVE-2026-63224
OpenRemote has authenticated SQL injection in crosstab datapoint exports
OpenRemote is an open-source internet-of-things platform. Prior to 1.26.0, the datapoint export API constructs CSV crosstab SQL by concatenating an asset name and attribute name into a COPY query that uses crosstab and streams TO STDOUT. The asset name enters both a double-quoted column identifier and a category query enclosed by the fixed $cat$ delimiter. Escaping single quotes in one string context does not escape embedded double quotes in identifiers or protect that dollar-quote boundary. An authenticated user permitted to create or rename an asset and read/export datapoints for one of its attributes can store SQL metacharacters in the name and request a crosstab export, causing injected SELECT output to be returned in the normal ZIP/CSV response. This enables database exfiltration without direct database or filesystem access or token forgery. In a multi-tenant deployment it can expose other tenants' data if the manager's database role can read shared tables; integrity and availability effects are not established by the demonstrated read primitive. This issue is fixed in version 1.26.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
7.2
OpenRemote has authenticated SQL injection in crosstab datapoint exports
OpenRemote is an open-source internet-of-things platform. Prior to 1.26.0, the datapoint export API constructs CSV crosstab SQL by concatenating an asset name and attribute name into a COPY query that uses crosstab and streams TO STDOUT. The asset name enters both a double-quoted column identifier and a category query enclosed by the fixed $cat$ delimiter. Escaping single quotes in one string context does not escape embedded double quotes in identifiers or protect that dollar-quote boundary. An authenticated user permitted to create or rename an asset and read/export datapoints for one of its attributes can store SQL metacharacters in the name and request a crosstab export, causing injected SELECT output to be returned in the normal ZIP/CSV response. This enables database exfiltration without direct database or filesystem access or token forgery. In a multi-tenant deployment it can expose other tenants' data if the manager's database role can read shared tables; integrity and availability effects are not established by the demonstrated read primitive. This issue is fixed in version 1.26.0.
- Record
CVE-2026-63224- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-06
EUVDEUVD-2026-114564
7.2
OpenRemote is an open-source internet-of-things platform. Prior to 1.26.0, the datapoint export API constructs CSV crosstab SQL by concatenating an asset name and attribute name into a COPY query that uses crosstab and streams TO STDOUT. The asset name enters both a double-quoted column identifier and a category query enclosed by the fixed $cat$ delimiter. Escaping single quotes in one string context does not escape embedded double quotes in identifiers or protect that dollar-quote boundary. An authenticated user permitted to create or rename an asset and read/export datapoints for one of its attributes can store SQL metacharacters in the name and request a crosstab export, causing injected SELECT output to be returned in the normal ZIP/CSV response. This enables database exfiltration without direct database or filesystem access or token forgery. In a multi-tenant deployment it can expose other tenants' data if the manager's database role can read shared tables; integrity and availability effects are not established by the demonstrated read primitive. This issue is fixed in version 1.26.0.
- Record
EUVD-2026-114564- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-06
GitHub AdvisoriesGHSA-cgfv-jrfp-2r7v
7.2
OpenRemote has Authenticated SQL Injection via Datapoint Crosstab Export
Summary
The datapoint export API builds a PostgreSQL crosstab export query by concatenating asset display names into raw SQL. An authenticated user who can create or rename an asset and then request a crosstab datapoint export can inject SQL through the asset name. The injected query output is streamed back to the caller inside the normal ZIP/CSV export response.
This creates a practical database exfiltration primitive through the application API. In a multi-tenant deployment, this can expose data outside the attacker's tenant if the application database role can read shared manager tables.
Affected Component
- Datapoint export endpoint for asset datapoints.
- Crosstab export formats, specifically CSV crosstab-style exports.
- Query builder path that constructs a
COPY (SELECT ... FROM crosstab(...)) TO STDOUTstatement.
Security Impact
Impact is high. A remote authenticated attacker with asset read/write capabilities can:
- Store SQL syntax inside an asset name.
- Trigger the crosstab export path for that asset.
- Cause the backend to execute attacker-influenced SQL through the PostgreSQL connection used by the manager service.
- Receive injected
SELECTresults in the exported CSV contained in the ZIP response.
The demonstrated impact is database data exfiltration. The proof of concept safely retrieved database execution context and an aggregate table count. A real attacker could adapt the injected SELECT to read other database tables accessible to the application database role.
This is especially sensitive in multi-tenant deployments because application tables commonly contain data for multiple realms/tenants in the same database.
Attack Preconditions
The attacker needs:
- A valid authenticated session.
- Permission to create or rename at least one asset.
- Permission to read/export datapoints for at least one attribute on that asset.
- Access to a crosstab datapoint export format.
No direct database access is required. No server filesystem access is required. No token forgery is required.
Technical Details
The export implementation derives a crosstab header from the asset name and attribute name. It then embeds that header into two SQL contexts:
- A PostgreSQL double-quoted column identifier:
"<asset name> : <attribute name>" text
- A category query passed to
crosstab(...), wrapped in a fixed dollar-quoted delimiter:
$cat$ SELECT header FROM (VALUES ('<asset name> : <attribute name>')) AS t(header) $cat$
The current escaping is incomplete:
- Single quotes are escaped in one string-literal context.
- Double quotes in asset names are not escaped before being placed inside quoted identifiers.
- The fixed dollar-quote delimiter is not protected against an asset name containing the delimiter token.
As a result, an attacker-controlled asset name can break out of the intended SQL grammar boundary and append SQL to the generated COPY ... TO STDOUT query. Because the backend streams COPY output into the export response, injected query rows are returned to the attacker as CSV.
Example Exploit Flow
- Authenticate normally.
- Create or rename an asset using a name containing SQL metacharacters that closes the crosstab column definition.
- Ensure the asset has an exportable datapoint attribute.
- Write at least one datapoint value for that attribute, if necessary.
- Request a CSV crosstab datapoint export for the crafted asset attribute.
- Inspect the returned ZIP/CSV. The CSV contains both normal datapoint rows and rows produced by the injected SQL.
A safe proof query demonstrated exfiltration of:
current_usercurrent_database()count(*)from an application table
The returned CSV contained a row equivalent to:
<timestamp>,<database_user>:<database_name>:<table_count>
Root Cause
The root cause is manual SQL string construction using user-controlled display data as SQL syntax.
The asset name is treated as presentation…
- Record
GHSA-cgfv-jrfp-2r7v- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
NVD
7.2
OpenRemote is an open-source internet-of-things platform. Prior to 1.26.0, the datapoint export API constructs CSV crosstab SQL by concatenating an asset name and attribute name into a COPY query that uses crosstab and streams TO STDOUT. The asset name enters both a double-quoted column identifier and a category query enclosed by the fixed $cat$ delimiter. Escaping single quotes in one string context does not escape embedded double quotes in identifiers or protect that dollar-quote boundary. An authenticated user permitted to create or rename an asset and read/export datapoints for one of its attributes can store SQL metacharacters in the name and request a crosstab export, causing injected SELECT output to be returned in the normal ZIP/CSV response. This enables database exfiltration without direct database or filesystem access or token forgery. In a multi-tenant deployment it can expose other tenants' data if the manager's database role can read shared tables; integrity and availability effects are not established by the demonstrated read primitive. This issue is fixed in version 1.26.0.
- Record
CVE-2026-63224- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/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 - Weakness
- CWE-89
- Updated
- 2026-11-06
OSVCVE-2026-62238
7.2
OpenRemote < 1.26.0 SQL Injection via Crosstab Export
OpenRemote before 1.26.0 contain an authenticated SQL injection vulnerability in the datapoint crosstab export endpoint that constructs PostgreSQL queries by concatenating asset display names into raw SQL. An authenticated attacker with asset creation or rename permissions can inject SQL through the asset name parameter and receive query results in the exported CSV response, enabling database data exfiltration.
- Record
CVE-2026-62238- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
OSV
7.2
OpenRemote has authenticated SQL injection in crosstab datapoint exports
OpenRemote is an open-source internet-of-things platform. Prior to 1.26.0, the datapoint export API constructs CSV crosstab SQL by concatenating an asset name and attribute name into a COPY query that uses crosstab and streams TO STDOUT. The asset name enters both a double-quoted column identifier and a category query enclosed by the fixed $cat$ delimiter. Escaping single quotes in one string context does not escape embedded double quotes in identifiers or protect that dollar-quote boundary. An authenticated user permitted to create or rename an asset and read/export datapoints for one of its attributes can store SQL metacharacters in the name and request a crosstab export, causing injected SELECT output to be returned in the normal ZIP/CSV response. This enables database exfiltration without direct database or filesystem access or token forgery. In a multi-tenant deployment it can expose other tenants' data if the manager's database role can read shared tables; integrity and availability effects are not established by the demonstrated read primitive. This issue is fixed in version 1.26.0.
- Record
CVE-2026-63224- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-07
OSVGHSA-cgfv-jrfp-2r7v
7.2
OpenRemote has Authenticated SQL Injection via Datapoint Crosstab Export
Summary
The datapoint export API builds a PostgreSQL crosstab export query by concatenating asset display names into raw SQL. An authenticated user who can create or rename an asset and then request a crosstab datapoint export can inject SQL through the asset name. The injected query output is streamed back to the caller inside the normal ZIP/CSV export response.
This creates a practical database exfiltration primitive through the application API. In a multi-tenant deployment, this can expose data outside the attacker's tenant if the application database role can read shared manager tables.
Affected Component
- Datapoint export endpoint for asset datapoints.
- Crosstab export formats, specifically CSV crosstab-style exports.
- Query builder path that constructs a
COPY (SELECT ... FROM crosstab(...)) TO STDOUTstatement.
Security Impact
Impact is high. A remote authenticated attacker with asset read/write capabilities can:
- Store SQL syntax inside an asset name.
- Trigger the crosstab export path for that asset.
- Cause the backend to execute attacker-influenced SQL through the PostgreSQL connection used by the manager service.
- Receive injected
SELECTresults in the exported CSV contained in the ZIP response.
The demonstrated impact is database data exfiltration. The proof of concept safely retrieved database execution context and an aggregate table count. A real attacker could adapt the injected SELECT to read other database tables accessible to the application database role.
This is especially sensitive in multi-tenant deployments because application tables commonly contain data for multiple realms/tenants in the same database.
Attack Preconditions
The attacker needs:
- A valid authenticated session.
- Permission to create or rename at least one asset.
- Permission to read/export datapoints for at least one attribute on that asset.
- Access to a crosstab datapoint export format.
No direct database access is required. No server filesystem access is required. No token forgery is required.
Technical Details
The export implementation derives a crosstab header from the asset name and attribute name. It then embeds that header into two SQL contexts:
- A PostgreSQL double-quoted column identifier:
"<asset name> : <attribute name>" text
- A category query passed to
crosstab(...), wrapped in a fixed dollar-quoted delimiter:
$cat$ SELECT header FROM (VALUES ('<asset name> : <attribute name>')) AS t(header) $cat$
The current escaping is incomplete:
- Single quotes are escaped in one string-literal context.
- Double quotes in asset names are not escaped before being placed inside quoted identifiers.
- The fixed dollar-quote delimiter is not protected against an asset name containing the delimiter token.
As a result, an attacker-controlled asset name can break out of the intended SQL grammar boundary and append SQL to the generated COPY ... TO STDOUT query. Because the backend streams COPY output into the export response, injected query rows are returned to the attacker as CSV.
Example Exploit Flow
- Authenticate normally.
- Create or rename an asset using a name containing SQL metacharacters that closes the crosstab column definition.
- Ensure the asset has an exportable datapoint attribute.
- Write at least one datapoint value for that attribute, if necessary.
- Request a CSV crosstab datapoint export for the crafted asset attribute.
- Inspect the returned ZIP/CSV. The CSV contains both normal datapoint rows and rows produced by the injected SQL.
A safe proof query demonstrated exfiltration of:
current_usercurrent_database()count(*)from an application table
The returned CSV contained a row equivalent to:
<timestamp>,<database_user>:<database_name>:<table_count>
Root Cause
The root cause is manual SQL string construction using user-controlled display data as SQL syntax.
The asset name is treated as presentation…
- Record
GHSA-cgfv-jrfp-2r7v- CVSS 4.0
- 7.2 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
io.openremote:openremote-managerMaven |
before 1.26.0 | 1.26.0 |
io.openremote:openremote-managerMaven From an advisory covering 2 CVEs |
before 1.26.0, plus listed versions 1.10.01.11.01.11.11.11.21.11.3 Show 45 moreShow less1.12.01.12.11.12.31.13.01.13.11.14.01.15.01.15.11.15.21.16.11.17.01.17.11.17.21.17.31.18.01.19.01.2.01.2.11.2.21.2.31.2.41.20.01.20.11.20.21.21.01.22.01.22.11.23.01.23.11.24.01.24.11.24.21.25.01.3.01.3.11.3.21.3.31.3.41.3.51.4.01.5.01.6.01.6.21.6.31.6.4 |
1.26.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| references | CVE List, EUVD | |
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-63224 is a high vulnerability (CVSS 7.2) in Openremote, published July 6, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.34%, the 27th percentile. Fixed in io.openremote:openremote-manager 1.26.0.
References
github.com/openremote/core/security/advisories/GHSA-cgfv-jrfp-2r7v
github.com/openremote/core/commit/02ac83074b81617add814b2a72d459abdf374147
github.com/openremote/core/releases/tag/1.26.0
github.com/openremote/openremote/security/advisories/GHSA-cgfv-jrfp-2r7v
github.com/openremote/openremote/commit/02ac83074b81617add814b2a72d459abdf374147
github.com/advisories/GHSA-cgfv-jrfp-2r7v
Show 6 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62238.json
nvd.nist.gov/vuln/detail/CVE-2026-62238
vulncheck.com/advisories/openremote-sql-injection-via-crosstab-export
github.com/openremote/openremote
github.com/CVEProject/cvelistV5/tree/main/cves/2026/63xxx/CVE-2026-63224.json
nvd.nist.gov/vuln/detail/CVE-2026-63224
Left out here: 5 versions and the rest of 2 source descriptions. The JSON record has them.