Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain low-privilege ERPNext credentials
-
DeliverySend crafted transaction request with injected SQL in posting_date or args field
-
ExploitTrigger get_tax_template SQL construction in tax_rule.py
-
ExecutionMalicious payload executes in database context
-
ImpactExtract sensitive tables (users, financials, PII) via UNION or blind injection
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a valid authenticated session with at least low-privilege access to ERPNext - any user role that can initiate or view sales orders, purchase orders, or other transaction types that trigger tax template resolution is sufficient. No administrator privileges, no special configuration, and no non-default feature enablement are required beyond basic authenticated access. Exploitation is limited by the authentication requirement: unauthenticated external attackers cannot reach the vulnerable function. The CVSS vector PR:L confirms this: low-privilege authentication is necessary but the barrier is low in any multi-user ERPNext deployment. There is no indication that specific modules must be enabled beyond standard accounts and tax rule configuration, which is present in virtually all ERPNext installations. |
| Impact | The CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N accurately reflects the exploitation profile: network-reachable, low attack complexity, requiring only low-privilege authentication, with high confidentiality impact and no integrity or availability impact. No EPSS score was provided in the source data, so probability-of-exploitation estimates cannot be quantified beyond qualitative assessment. No CISA KEV listing and no public exploit code have been identified, which meaningfully reduces the immediacy of opportunistic mass exploitation compared to what the CVSS score alone might imply. However, the low privilege requirement - any authenticated ERP user with access to transactional workflows can trigger the vulnerable function - substantially widens the attacker population in multi-tenant or shared ERPNext deployments. Integrity and availability impacts are absent from the CVSS vector, meaning confirmed exploitation is limited to data exfiltration rather than data manipulation or denial of service, though secondary chained attacks using extracted credentials are plausible. Given that ERPNext installations routinely store financial records, supplier data, employee information, and customer PII, the confidentiality impact in practice is high-value. The combination of low-complexity exploitation and high-value data targets makes this a genuine remediation priority for any organization running unpatched versions, despite the absence of confirmed in-the-wild exploitation. |
| Exploit ScenarioDerived | An attacker with any valid ERPNext account - including a minimal-privilege role such as a sales user or purchase user - crafts a request to a transaction endpoint that invokes get_tax_template, injecting a SQL fragment into the posting_date or a transaction argument field. The injected payload appends a UNION SELECT or boolean-based blind condition that extracts data from sensitive tables such as tabUser, tabEmployee, or tabBank Account. No public exploit code has been identified, but the vulnerability class and the publicly visible PR diff provide sufficient technical detail for a skilled attacker to independently develop an exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 10, 2026
SQL injection in ERPNext's tax rule engine allows any authenticated low-privilege user to extract arbitrary database content. The get_tax_template function in erpnext/accounts/doctype/tax_rule/tax_rule.py directly interpolated request-supplied posting_date and args dictionary values into raw SQL WHERE clauses via Python f-strings and .format() calls, bypassing all parameterization. Vendor-released patches exist as versions 15.109.0 and 16.20.0; no public exploit code or active exploitation (CISA KEV) has been identified at time of analysis.
RemediationAI
Upgrade ERPNext to version 15.109.0 (release tag: https://github.com/frappe/erpnext/releases/tag/v15.109.0) or 16.20.0 (https://github.com/frappe/erpnext/releases/tag/v16.20.0), both of which contain the complete fix via migration to the Frappe query builder. The vendor security advisory is at https://github.com/frappe/erpnext/security/advisories/GHSA-grhp-m55m-63f8. If immediate patching is not possible, restrict authenticated access to ERPNext to only trusted internal users and disable or firewall the application from untrusted network segments, accepting the operational trade-off of reduced accessibility. There is no documented configuration flag to disable the vulnerable get_tax_template code path without breaking tax rule resolution entirely, so network restriction is the only meaningful compensating control. Do not rely on WAF SQL injection rules alone, as Frappe's internal routing may not surface the injection payload in a form that generic WAF signatures reliably detect.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
ERPNext is an open-source ERP platform built on the Frappe framework (CPE: cpe:2.3:a:frappe:erpnext:*:*:*:*:*:*:*:*). The vulnerable function get_tax_template, invoked during sales and purchase transaction processing to resolve applicable tax templates, constructed SQL WHERE clauses by embedding user-influenced values directly into raw strings passed to frappe.db.sql(). The PR diff confirms that posting_date was interpolated as a bare f-string literal, and args values for fields such as tax_category, customer_group, and billing_city were inserted via .format() with inconsistent or absent escaping. CWE-89 (SQL Injection) is the exact root cause class - the absence of prepared statements or ORM parameterization in a code path reachable via normal authenticated ERP workflows. The fix, introduced in PR #55127 and commits 2a91c72, c45d2a3, and f98975f, migrated the entire query construction to Frappe's query builder (frappe.qb), which generates parameterized queries internally and eliminates the injection surface.
Know when Erpnext gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Network-reachable via standard HTTP, low complexity, low-privilege auth required; high confidentiality only, no integrity or availability impact confirmed.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
ERPNext is a free and open source Enterprise Resource Planning tool. Prior to 15.109.0 and 16.20.0, the get_tax_template function in erpnext/accounts/doctype/tax_rule/tax_rule.py constructs an SQL WHERE clause from request-influenced posting_date and args values, allowing an authenticated low-privilege user to inject SQL and extract sensitive information. This issue is fixed in versions 15.109.0 and 16.20.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
Stored cross-site scripting leading to code execution in Frappe Framework 15.89.0 (and the ERPNext application built on
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS
Authenticated SQL injection in Frappe ERPNext through 15.89.0 allows low-privilege users to extract arbitrary database c
SQL injection in Frappe ERPNext through 15.89.0 lets an authenticated attacker with a valid session and access to the Pa
Authenticated attackers with permission to create or modify Print Format documents in Frappe ERPNext through 15.89.0 can
Authenticated server-side template injection in Frappe ERPNext through 15.89.0 lets a user who can create or modify an A
Authenticated server-side template injection in Frappe ERPNext through 15.89.0 allows users with privileges to configure
An SQL injection vulnerability exists in the frappe.desk.reportview.get functionality of ERPNext 11.1.38. Rated high sev
Frappe Framework ERPNext 13.4.0 contains a sandbox escape vulnerability in RestrictedPython that allows authenticated us
EUVD-2026-55830
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB