CVE-2026-12076
Executive Summary
CVE-2026-12076 is a critical unauthenticated SQL injection vulnerability in the OData filter parsing pipeline of Raytha CMS, version 1.5.2 and potentially earlier versions. A remote attacker can inject arbitrary SQL statements into the underlying PostgreSQL database without any authentication, allowing full database compromise, including extraction of user credentials and sensitive data. The vulnerability has been assigned a CVSS score of 9.3 (Critical) and, although no public exploit code exists, the attack surface is trivial to reach, making immediate mitigation essential.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Raytha CMS implements an OData-compliant query interface, commonly used to expose entity collections via HTTP endpoints that accept $filter parameters. The vulnerability resides in how the OData filter parser translates user-supplied expressions into SQL WHERE clauses for PostgreSQL.
The parsing pipeline is supposed to whitelist allowed operators (eq, ne, gt, lt, and, or, not) and map property names to predefined columns. However, the parser fails to adequately sanitize or parameterize string literals and fails to restrict the use of nested function calls or inline SQL tokens. Specifically, the tokenizer recognizes quoted strings and operators but does not validate the context in which they appear. This allows an attacker to break out of the intended expression grammar by injecting SQL metacharacters such as ', ;, --, or comments /* */.
An OData filter such as $filter=Id eq 1 is translated into a SQL predicate like WHERE ("Id" = 1). By passing a crafted filter value, e.g. $filter=Id eq 1' OR '1'='1' --, the parser constructs the following SQL fragment:
WHERE ("Id" = 1' OR '1'='1' --)
Because the SQL statement is concatenated without bound parameters, the injected content is executed directly by PostgreSQL. The use of PostgreSQL stacked queries (; followed by additional SQL) is also possible if the database driver permits multiple statements per execution, which is common in ADO.NET Npgsql connectors configured for batch execution. This enables an attacker to run INSERT, UPDATE, DELETE, and even COPY ... FROM PROGRAM (when running as a superuser) to achieve arbitrary command execution on the database server.
The attack vector is fully unauthenticated, requiring only HTTP access to any Raytha endpoint that supports OData queries (typically POST/GET to /api/odata/* or similar routes). The functionality is exposed by default. The impact is not limited to stored data — PostgreSQL system catalogs (pg_authid, pg_shadow) can be queried to dump password hashes, and pg_read_file() can read arbitrary files on the database host if file access privileges are not restricted.
Exploitation Scenarios
The following step-by-step attack chain demonstrates how an unauthenticated remote attacker exploits CVE-2026-12076:
Reconnaissance / Target Identification:
The attacker identifies Raytha CMS deployments by scanning for open ports (usually 80/443) and using search engine queries or Shodan dorks to find exposed instances. They fingerprint the application by requesting/api/odata/and observing an OData XML/JSON response listing available entity sets (e.g.,Users,Posts,Settings). This confirms the OData pipeline is active.Vulnerability Trigger:
The attacker sends aGETrequest to an OData entity endpoint with a malicious$filterparameter. Example:GET /api/odata/Users?$filter=Id%20eq%201'%20OR%20'1'%3D'1'%20--&$top=1URL-decoded:
Id eq 1' OR '1'='1' --. This benign test payload verifies injection by returning all rows instead of the single row withId=1.Weaponization / Payload Execution:
Upon confirming the injection point, the attacker escalates to data exfiltration. Using PostgreSQL stacked queries, they inject aUNION SELECTto enumerate table names frominformation_schema.tables:$filter=Id eq 1' UNION SELECT table_name FROM information_schema.tables --To dump user credentials, they target the
Userstable:$filter=Id eq 1' UNION SELECT username, password_hash, email FROM "Users" --If the database user is a superuser (common in default installations), they execute OS commands using
COPY ... FROM PROGRAM:$filter=Id eq 1'; COPY (SELECT 'id') TO PROGRAM 'id > /tmp/pwned.txt'; --This writes the output of
idto a file on the database server, proving command execution.Post-Exploitation:
The attacker uses extracted password hashes to attempt offline cracking or to pivot to other systems using reused credentials. They may also install a persistent backdoor by injecting a new user record viaINSERT INTO "Users" ..., granting them continued access even if the vulnerability is later patched. With arbitrary file read (pg_read_file), they can harvest database configuration files, TLS private keys, and application secrets to compromise the entire infrastructure.
Impact Assessment
Per the CVSS vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H, this is a network-exploitable, low-complexity, unauthenticated flaw with changed scope. The base score of 9.3 (Critical) reflects maximum confidentiality, integrity, and availability impact: an attacker gains complete control over the PostgreSQL database, which is the system of record for Raytha.
- Confidentiality (High): Full database contents exposed, including password hashes, personal data, tokens, and application secrets.
- Integrity (High): Arbitrary SQL execution enables data modification, deletion, and injection of rogue administrative accounts.
- Availability (High): An attacker can drop tables, truncate schemas, or exhaust DB resources, causing denial of service.
- Blast Radius: The database host itself is at risk (OS command execution potential). If the database server shares the network with other services, lateral movement is a realistic threat. All Raytha instances running ≤ 1.5.2 are impacted; no other versions have been confirmed, but the flaw is likely inherited from the codebase's OData library and may affect earlier releases.
Detection Guidance
Sigma Rule
title: Raytha CMS SQL Injection via OData Filter Parameter
id: 5d2aeb5e-db91-4b0f-9b99-9c6df48a79ec
status: experimental
description: Detects attempts to exploit CVE-2026-12076 by injecting SQL syntax into OData $filter parameters on Raytha CMS.
logsource:
category: webserver
product: iis
detection:
selection:
cs-uri-query|contains:
- '$filter='
- "' OR '"
- "' UNION "
- "' ; "
- 'information_schema'
- 'pg_authid'
condition: selection
level: critical
falsepositives:
- Legitimate OData queries with unusual but valid filter strings (rare).
tags:
- attack.t1190
YARA Rule
rule Raytha_SQLi_OData {
meta:
author = "Valterit Threat Intel"
description = "Detect SQL injection payload patterns targeting Raytha OData endpoints."
cve = "CVE-2026-12076"
date = "2026-02-15"
strings:
$a = "$filter=" ascii wide nocase
$b = "UNION SELECT" ascii wide nocase
$c = "information_schema" ascii wide nocase
$d = "pg_authid" ascii wide nocase
$e = "' OR '1'='1" ascii wide nocase
condition:
$a and (any of ($b,$c,$d,$e))
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-12076 Raytha CMS OData SQL Injection Attempt"; flow:established,to_server; content:"$filter="; http_uri; content:"OR"; http_uri; nocase; content:"1'='1"; http_uri; nocase; sid:20261207601; rev:1;)
Elastic Detection
sequence by source.ip with maxspan=5m
[http where http.request.uri contains "$filter=" and wildcard(http.request.uri, "*UNION*") ]
[http where http.request.uri contains "$filter=" and wildcard(http.request.uri, "*' OR '*") ]
Splunk SPL Query
index=proxy OR index=web
| where like(uri, "%$filter=%")
and (like(uri, "%UNION%") OR like(uri, "%information_schema%") OR like(uri, "%' OR '1'='1%"))
| table _time, src_ip, dest_ip, uri, user_agent
| sort - _time
Wazuh OSSEC Rule
<group name="web,">
<rule id="234774" level="15">
<if_sid>31122</if_sid>
<match>$filter=</match>
<regex>UNION|information_schema|OR '1'='1</regex>
<description>CVE-2026-12076 Raytha CMS OData SQL Injection attempt detected.</description>
<group>attack.t1190,</group>
</rule>
</group>
Mitigation & Patch Guidance
Immediate Mitigations (No Patch / Partial Patch):
- There are no vendor-provided workarounds. As a stopgap, deploy a Web Application Firewall (WAF) rule to block requests containing suspicious OData filter strings (
UNION,OR '1'='1,;--, etc.) on/api/odata/*paths. - Restrict network access to OData endpoints to trusted IP ranges via the web server config (IIS URL Rewrite or reverse-proxy ACLs).
- Run the PostgreSQL service with a least-privilege database user (non-superuser) and revoke
pg_read_fileandCOPY PROGRAMprivileges from the application DB role. - Enable PostgreSQL audit logging (
log_statement = 'all'in postgresql.conf) to capture malicious SQL for incident response.
- There are no vendor-provided workarounds. As a stopgap, deploy a Web Application Firewall (WAF) rule to block requests containing suspicious OData filter strings (
Patch / Upgrade Steps:
- If no official release is available, contact Raytha support directly to request a patched version or a timeline for an updated release.
- Subscribe to the OSV entry for this CVE to be notified when patch confirmation is updated.
Long-Term Hardening:
- Enforce use of parameterized queries for all OData translations — the fix should replace string concatenation with bound parameters.
- Integrate static code analysis and DAST scans into the CI/CD pipeline to catch SQL injection patterns in OData parsers before release.
- Place the PostgreSQL database on an isolated backend network with firewalling from the public internet. Ensure the DB host is patched and hardened per CIS benchmarks.
- Maintain an inventory of all Raytha CMS instances (including legacy versions) and track their exposure to this CVE.
References
- NVD Entry for CVE-2026-12076: https://nvd.nist.gov/vuln/detail/CVE-2026-12076 (official description, CVSS score).
- OSV Advisory (Patch Source): https://osv.dev/vulnerability/CVE-2026-12076 (single-source patch claim, commit reference).
- Raytha CMS Official Site: https://raytha.com (vendor contact; note: contact attempts were unsuccessful — verify status).
- CISA Known Exploited Vulnerabilities Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (checked: not listed — no active exploitation in the wild has been confirmed).
- MITRE ATT&CK T1190: https://attack.mitre.org/techniques/T1190/ (Exploit Public-Facing Application — primary tactic for this CVE).
Threat Actor Activity: There is currently no evidence of exploitation in the wild. The EPSS score of 0.00314 (23.8% percentile) indicates low immediate exploitation likelihood, but the lack of a confirmed patch raises the long-term risk of a weaponized public exploit being developed.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.