CVE-2026-109608
Executive Summary
CVE-2026-109608 is an SQL injection vulnerability (CWE-89) in Frappe ERPNext affecting versions before 15.121.0 and 16.x before 16.34.0, present in several endpoints that lack input validation. The flaw is exploitable by any authenticated user — including an account with no assigned roles — allowing an attacker to read other users' sensitive data and escalate privileges to a more privileged account. With a CVSS base score of 8.8 (High), the vulnerability poses a serious confidentiality and integrity risk to any ERPNext deployment exposed to untrusted or low-privilege authenticated users, and no public PoC, exploit code, or detection template currently exists.
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
CVE-2026-109608 is classified under CWE-89 (Improper Neutralization of Special Elements used in an SQL Command, i.e., SQL injection). According to the NVD description, the injection occurs in "several endpoints that lack input validation," meaning at least one or more HTTP-reachable handlers fail to properly sanitize, parameterize, or validate user-supplied input before it is incorporated into a SQL query.
The critical access-control dimension of this vulnerability is that it is reachable by "any authenticated user, including one with no assigned roles." This implies the affected endpoints are not adequately gated behind role-based authorization checks — a low- or zero-privilege authenticated session is sufficient to reach the vulnerable code path. This is a significant deviation from the intended authorization model of an ERP platform, where sensitive data access should require elevated roles.
Because the vulnerability class is SQL injection, the underlying mechanism is the classic failure to separate untrusted input from SQL command structure — either through string concatenation or unsafe query construction — allowing an attacker to inject SQL syntax that alters the semantics of the query executed against the backend database. The NVD description does not disclose specific endpoint paths, parameter names, function names, or the database engine (e.g., MariaDB/MySQL, which ERPNext commonly uses), so those specifics cannot be stated here without fabrication.
What can be confirmed from the description:
- The vulnerability spans "several endpoints" (more than one reachable code path).
- The root cause is missing input validation.
- Exploitation requires authentication but not privilege (no assigned roles needed).
- The demonstrated impact is two-fold: (1) reading other users' sensitive information, and (2) escalation to a privileged account.
The CVSS v3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) corroborates a network-reachable, low-complexity attack requiring low privileges (authenticated), no user interaction, and yielding High confidentiality, integrity, and availability impact within a single security scope. The High integrity and availability components suggest the injection is not limited to blind read access — the ability to modify or otherwise affect stored data (e.g., writing data used for privilege escalation) is consistent with the stated impact. No public proof-of-concept, exploit code, or Nuclei template is available, and the vulnerability is currently UNPATCHED in the sense that no patch evidence is present in any tracked source, despite the NVD description referencing fixed versions.
Exploitation Scenarios
No public PoC is available; the following attack chain is inferred strictly from the vulnerability class (SQL injection) and the impacts stated in the NVD description. No specific endpoint, parameter, or function names are invented here.
Reconnaissance / target identification An attacker first identifies an internet- or intranet-exposed Frappe ERPNext instance. This can be performed passively via search engines and Shodan using ERPNext fingerprints (e.g., HTTP title or HTML body references to "ERPNext"/"frappe"). The attacker then obtains any valid authenticated session — the description explicitly states a user with no assigned roles is sufficient, meaning even the lowest-privilege or default-created account qualifies.
Triggering the specific flaw class The attacker sends crafted HTTP requests to one or more vulnerable endpoints that fail to validate input. Because the endpoints are SQL-injection prone and not properly authorization-gated, the attacker supplies input containing SQL syntax that is incorporated into a backend query without proper neutralization. The "several endpoints" wording indicates the attacker may have multiple candidate injection points to probe.
Payload / execution method (vulnerability-class level) At the class level, the attacker crafts request input designed to alter the logic of the backend SQL query — for example, injecting conditional expressions, UNION-style constructs, or other SQL syntax that changes what data the query returns or how conditions are evaluated. Successful injection causes the database to return data outside the attacker's intended scope. The exact payload shape depends on the undisclosed backend query construction and database engine; no specific payload is presented here because none is documented.
Post-exploitation impact Consistent with the NVD description, a successful attacker can:
- Read other users' sensitive information (confidentiality breach), including data beyond their own account.
- Escalate to a privileged account (integrity/privilege escalation), enabling further actions as a higher-privileged user. Given the High integrity and availability CVSS components, broader manipulation of application/database state is plausible, potentially enabling further abuse of the ERP platform (e.g., data tampering, lateral movement within the application, or disruption). The exact escalation mechanics are not documented and are not speculated here.
Impact Assessment
Business impact: ERPNext is a widely deployed open-source ERP/CRM platform handling finance, HR, inventory, customer, and user identity data. A SQL injection that lets any authenticated — even zero-role — user read other users' sensitive data and escalate to a privileged account represents a severe confidentiality and integrity breach. In an ERP context, privilege escalation can unlock access to financial records, payroll, personally identifiable information (PII), supplier/customer data, and administrative functions, with downstream regulatory (GDPR/CCPA) and fraud implications.
Affected systems: All Frappe ERPNext deployments running versions before 15.121.0 and 16.x before 16.34.0.
Blast radius: Because exploitation requires only a valid authenticated session (PR:L) and no user interaction (UI:N) over the network (AV:N) at low complexity (AC:L), any instance that permits authenticated access — including via self-registration, default/low-privilege accounts, or compromised low-value credentials — is at risk. The single-scope (S:U) rating means impact is contained to the ERPNext application and its database, but within that scope, confidentiality, integrity, and availability are all rated High.
CVSS subscores referenced: AV:N (network-reachable), AC:L (no special conditions), PR:L (authenticated, but no privileges required per the description), UI:N (no interaction), S:U (unchanged scope), C:H/I:H/A:H (High impact across all three properties) → Base 8.8 (High).
Detection Guidance
Sigma Rule
title: Possible SQL Injection Against Frappe ERPNext Endpoints (CVE-2026-109608)
id: 9b1f7c2a-4d3e-4a8b-9c0d-1f2e3a4b5c6d
status: experimental
description: Detects SQL injection patterns in HTTP requests to Frappe ERPNext, consistent with CVE-2026-109608 which affects several endpoints lacking input validation.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-109608
author: valtersit.com
date: 2026/01/01
logsource:
category: webserver
product: frappe
detection:
selection_method:
cs-method:
- GET
- POST
selection_sqli:
- cs-uri-query|contains:
- "' OR "
- "'OR'"
- "UNION SELECT"
- "UNION%20SELECT"
- "SLEEP("
- "BENCHMARK("
- "information_schema"
- "' AND "
- "1=1"
- "1=2"
- cs-uri-query|contains|all:
- "'"
- "--"
filter_static:
cs-uri-query|contains:
- ".css"
- ".js"
- ".png"
condition: selection_method and selection_sqli and not filter_static
falsepositives:
- Legitimate use of apostrophes or SQL keywords in search fields
- Security scanners during authorized testing
level: high
YARA Rule
rule CVE_2026_109608_ERPNext_SQLi
{
meta:
description = "Detects SQL injection payload patterns targeting Frappe ERPNext endpoints (CVE-2026-109608)"
author = "valtersit.com"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-109608"
date = "2026-01-01"
severity = "high"
strings:
$sqli1 = "UNION SELECT" nocase
$sqli2 = "' OR " nocase
$sqli3 = "'OR'" nocase
$sqli4 = "information_schema" nocase
$sqli5 = "SLEEP(" nocase
$sqli6 = "BENCHMARK(" nocase
$sqli7 = "1=1" nocase
$sqli8 = "1=2" nocase
$sqli9 = "' AND " nocase
$erp1 = "erpnext" nocase
$erp2 = "frappe" nocase
condition:
uint16be(0) != 0x4D5A and
(2 of ($sqli*)) and
(1 of ($erp*))
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-109608 Frappe ERPNext SQL Injection Attempt"; flow:established,to_server; http.method; content:"GET"; http.method; content:"POST"; http.uri; content:"UNION"; nocase; http.uri; content:"SELECT"; nocase; distance:0; http.uri; pcre:"/(\%27)|(')|(--)|(\%23)|(#)/Ri"; http.header; content:"erpnext"; nocase; reference:cve,2026-109608; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-109608; classtype:web-application-attack; sid:2026109608; rev:1;)
Elastic Detection
sequence by source.ip, user.name with maxspan=5m
[ network where http.request.method in ("GET", "POST") and
wildcard(http.request.uri.query, "*UNION*SELECT*") ]
[ network where http.request.method in ("GET", "POST") and
wildcard(http.request.uri.query, "*information_schema*") or
wildcard(http.request.uri.query, "*' OR *") or
wildcard(http.request.uri.query, "*SLEEP(*") ]
Splunk SPL Query
index=web sourcetype=access_combined (uri="*erpnext*" OR uri="*frappe*")
| eval sqli_hit=case(
match(uri, "(?i)union.{0,10}select"), 1,
match(uri, "(?i)information_schema"), 1,
match(uri, "(?i)(%27|')\s*(or|and)\s+"), 1,
match(uri, "(?i)sleep\(|benchmark\("), 1,
match(uri, "(?i)1\s*=\s*[12]"), 1,
true(), 0)
| where sqli_hit=1
| stats count min(_time) as first_seen max(_time) as last_seen values(uri) as uris by clientip, status
| sort - count
Wazuh OSSEC Rule
<group name="web,appsec,frappe,">
<rule id="2026108" level="12">
<if_sid>31100</if_sid>
<url>erpnext|frappe</url>
<regex type="pcre2">(?i)(union[\s\+]{0,8}select|information_schema|(%27|')\s*(or|and)\s+|sleep\(|benchmark\()</regex>
<description>CVE-2026-109608: Possible SQL injection attempt against Frappe ERPNext endpoint</description>
<mitre>
<id>T1190</id>
</mitre>
<group>sql_injection,attack,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source).
- Immediate mitigations
- Restrict network exposure: do not expose ERPNext directly to the internet; place it behind a VPN, zero-trust proxy, or IP allowlist so that only trusted networks/users can reach authenticated endpoints.
- Tighten authentication: disable self-registration where possible, audit for accounts with no assigned roles, and remove or disable unnecessary accounts. Because a no-role user is sufficient to exploit, reducing the population of authenticated users reduces attack surface.
- Apply virtual patching: deploy a WAF or reverse-proxy filtering rule (see the Suricata/Sigma patterns above) to block requests containing SQL-injection indicators on ERPNext endpoints.
- Monitor and rate-limit: enable verbose web/database logging and alert on the detection rules in this report.
- Patch / upgrade steps
- Upgrade to ERPNext 15.121.0 or 16.34.0 (or later), which the NVD description identifies as the fixed releases. Until a verified vendor advisory, commit, or release note is available from a tracked source, validate the fix by reviewing the release notes for the stated versions and confirming the vulnerable endpoints now enforce input validation.
- Back up database and configuration before upgrading; test in a staging clone first.
- Long-term hardening
- Enforce parameterized queries / ORM usage across all application data access to eliminate string-concatenated SQL (root cause of CWE-89).
- Add robust, centralized input validation and output encoding at all HTTP entry points.
- Implement and enforce role-based access control (RBAC) so that even low-privilege endpoints cannot reach sensitive data operations.
- Conduct a source-level review of all endpoints for missing authorization and injection flaws; adopt secure SDLC with SAST/DAST in CI/CD.
- Maintain an inventory and patch cadence for ERPNext, and subscribe to Frappe security advisories.
References
- NVD — CVE-2026-109608: https://nvd.nist.gov/vuln/detail/CVE-2026-109608
- CWE-89 — Improper Neutralization of Special Elements used in an SQL Command: https://cwe.mitre.org/data/definitions/89.html
- MITRE ATT&CK T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
- Frappe / ERPNext security advisories and release notes (verify fixed versions 15.121.0 and 16.34.0): https://github.com/frappe/erpnext/releases
- CISA Known Exploited Vulnerabilities catalog (not currently listed): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Note: As of this report, no public proof-of-concept, exploit code, Nuclei template, or exploit-in-the-wild evidence has been identified for CVE-2026-109608. No named threat actor campaign is associated with this CVE. EPSS has not yet scored this vulnerability; no EPSS value is reported.
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.