{"id":"CVE-2026-63224","kind":"vulnerability","aliases":["CVE-2026-63224"],"related":[],"title":"OpenRemote: asset names inject SQL into CSV datapoint exports","description":"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.","summary":"OpenRemote, an open-source IoT platform, builds a crosstab export query by concatenating asset and attribute names into SQL without proper escaping. An authenticated user who can create or rename an asset can inject SQL and read database contents returned inside the normal CSV export.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["iot","openremote","other","self-hosted"],"not_affected_if":["no-authenticated-user-access","version-1.26.0-or-later"],"how_to_check":"- Check the OpenRemote version in use; versions before `1.26.0` are affected per the description.\n- Identify whether users can create or rename assets and export datapoints in your deployment.\n- In multi-tenant deployments, check whether the manager's database role can read tables shared across tenants.","fix":"- OpenRemote: upgrade to `1.26.0`.","status":"open","published_at":"2026-10-30T22:16:58+00:00","first_seen_at":"2026-10-30T22:25:57+00:00","triaged_at":"2026-10-30T22:27:10+00:00","updated_at":"2026-10-30T22:27:10+00:00","category":"other","confidence":0.8,"triage":{"at":"2026-10-30T22:27:10Z","model":"claude-haiku-5-5","output":{"fix":"- OpenRemote: upgrade to `1.26.0`.","reach":"network","title":"OpenRemote: asset names inject SQL into CSV datapoint exports","impact":"medium","summary":"OpenRemote, an open-source IoT platform, builds a crosstab export query by concatenating asset and attribute names into SQL without proper escaping. An authenticated user who can create or rename an asset can inject SQL and read database contents returned inside the normal CSV export.","audience":"businesses","category":"other","nicknames":[],"who_cares":["openremote","iot","self-hosted"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Attacker reads database contents, possibly other tenants' data, via export","analyst_note":"","how_to_check":"- Check the OpenRemote version in use; versions before `1.26.0` are affected per the description.\n- Identify whether users can create or rename assets and export datapoints in your deployment.\n- In multi-tenant deployments, check whether the manager's database role can read tables shared across tenants.","plain_action":"","needs_analyst":false,"not_affected_if":["version-1.26.0-or-later","no-authenticated-user-access"],"who_is_affected":"Teams running OpenRemote before `1.26.0` where users can create or rename assets and export datapoints. Multi-tenant deployments are most at risk because the database role may expose other tenants' data. Installations on `1.26.0` or later are not affected.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.00071,"input_tokens":4376,"output_tokens":545,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-63224':12A,15A '1.26.0':81C,247C 'access':203C 'api':85C 'asset':2A,36B,54B,93C,110C,161C 'attribut':38B,96C,169C 'authent':46B,153C 'avail':231C 'boundari':151C 'build':29B 'cat':128C 'categori':122C 'caus':182C 'column':118C 'concaten':35B,91C 'construct':86C 'content':61B 'context':136C 'copi':100C 'creat':50B,157C 'crosstab':31B,88C,104C,180C 'csv':7A,66B,87C 'cve':10A,13A 'data':218C 'databas':60B,196C,200C,223C 'datapoint':8A,83C,164C 'delimit':129C 'demonstr':238C 'deploy':212C 'direct':199C 'dollar':149C 'dollar-quot':148C 'doubl':116C,141C 'double-quot':115C 'effect':232C 'embed':140C 'enabl':195C 'enclos':124C 'enter':112C 'escap':44B,130C,139C 'establish':235C 'exfiltr':197C 'export':9A,32B,67B,84C,181C 'expos':215C 'filesystem':202C 'fix':127C,244C 'forgeri':206C 'host':21B 'identifi':119C,144C 'inject':4A,56B,183C 'insid':63B 'integr':229C 'internet':75C 'internet-of-th':74C 'iot':16B,27B 'issu':242C 'manag':221C 'metacharact':173C 'multi':210C 'multi-ten':209C 'name':3A,39B,94C,97C,111C,176C 'normal':65B,191C 'one':134C,166C 'open':25B,72C 'open-sourc':24B,71C 'openremot':1A,17B,22B,68C 'output':185C 'permit':155C 'platform':28B,78C 'primit':240C 'prior':79C 'proper':43B 'protect':146C 'queri':33B,101C,123C 'quot':117C,132C,142C,150C 'read':59B,226C,239C 'read/export':163C 'renam':52B,159C 'request':178C 'respons':193C 'return':62B,188C 'role':224C 'select':184C 'self':20B 'self-host':19B 'share':227C 'singl':131C 'sourc':26B,73C 'sql':5A,41B,57B,89C,172C 'stdout':108C 'store':171C 'stream':106C 'string':135C 'tabl':228C 'tenant':211C,217C 'thing':77C 'token':205C 'use':103C 'user':47B,154C 'version':246C 'without':42B,198C 'zip/csv':192C","nicknames":[],"mitigations":[],"who_affected":"Teams running OpenRemote before `1.26.0` where users can create or rename assets and export datapoints. Multi-tenant deployments are most at risk because the database role may expose other tenants' data. Installations on `1.26.0` or later are not affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"first_public_at":"2026-10-30T22:16:58+00:00","kev":null,"cvss_vector":"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","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-63224","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63224","severity":null,"published_at":"2026-10-30T22:16:58+00:00","modified_at":"2026-10-30T22:16:58+00:00","first_seen_at":"2026-10-30T22:25:57+00:00","fetched_at":"2026-10-30T22:25:57+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}