Skip to main content

Frappe ERPNext EUVDEUVD-2026-85344

| CVE-2026-96672 MEDIUM
Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection') (CWE-470)
2026-09-23 VulnCheck GHSA-vjc2-5pxv-9jpv
5.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as Accounts Manager
  2. Delivery
    Create Financial Report Template with malicious calculation_formula
  3. Exploit
    Set dotted path to non-whitelisted internal method
  4. Execution
    Run report to trigger frappe.call()
  5. Impact
    Read invoked method return values

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V15 - Secure Coding and Architecture Reflection safety, class allowlisting
Exploitation Conditions

Requires an authenticated account holding the ERPNext Accounts Manager role with permission to create or edit Financial Report Template documents; the attacker must set a Custom API row's calculation_formula to an attacker-chosen dotted Python path. Exploitation is limited to ERPNext versions before 16.34.1 where financial_report_engine.py passes api_path straight to frappe.call() without validating it against whitelisted, GET-permitting methods. Limiting factors: the Accounts Manager role is a privileged, non-default identity that must be granted, no user interaction by a victim is needed, and after patching only whitelisted GET-enabled methods can be invoked. Impact is bounded to invoking internal methods and reading their return values rather than direct code execution.

Impact

This is a genuine but modest-severity issue best treated as medium-low priority. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) scores 5.3, and every signal points to a privilege-gated, limited-impact flaw rather than a wormable RCE: exploitation requires an authenticated user holding the Accounts Manager role (PR:L), and the technical impact is bounded - CWE-470 unsafe reflection lets the attacker resolve arbitrary dotted Python paths and invoke non-whitelisted internal methods, then READ their return values (VC:L/VI:L, no availability impact). No EPSS score, no CISA KEV listing, and no public POC were provided in the input, so there is no evidence of active or automated exploitation - no public exploit identified at time of analysis. Note a tension worth verifying: the vendor rated confidentiality/integrity only Low and set subsequent-system metrics SC:L/SI:L, implying some cross-boundary effect, yet the described impact (reading internal method return values) is largely a same-system information-disclosure primitive; the real-world danger depends entirely on WHICH internal methods an attacker can reach and whether any have sensitive side effects, which is not enumerated. This is not a high-CVSS-but-illusory issue, but it is firmly a post-authentication, high-privilege-role problem, so real risk is concentrated in environments where the Accounts Manager role is broadly or loosely assigned.

Exploit ScenarioDerived

An authenticated user with the ERPNext Accounts Manager role creates or edits a Financial Report Template and sets a row's calculation_formula (Custom API data source) to an arbitrary dotted path such as a sensitive internal server-side method instead of a whitelisted one. When the report runs, frappe.call() invokes that unvalidated method and returns its output to the attacker, enabling unauthorized invocation and data readback. No public exploit was identified at time of analysis; the low complexity (AC:L) means the attack is trivial once the required role is held.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 23, 2026

Authenticated users holding the ERPNext Accounts Manager role can invoke arbitrary non-whitelisted server-side Python methods and read back their return values in Frappe ERPNext versions before 16.34.1. The flaw lives in Financial Report Template handling: a Custom API row's calculation_formula is passed straight to frappe.call() without verifying that the dotted path resolves to a whitelisted, GET-permitting method, so an attacker with rights to create or edit such templates can point the formula at internal methods that were never meant to be remotely callable. The assessed impact is limited information disclosure and limited integrity impact (CVSS 3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N; CVSS 4.0 5.3), exploitation requires a privileged non-default role, no public exploit code has been identified at time of analysis, and no EPSS or CISA KEV data indicates active exploitation. This is a genuine but modest-severity issue best treated as medium-low priority.

RemediationAI

Upgrade to Frappe ERPNext 16.34.1 or later, which is the vendor-released patch; the fix is carried in commit 7aad59b129711e9bba17b25665428d1fc57bf37c and is described in the GitHub security advisory GHSA-794x-fhm7-58j7. After the upgrade, only methods that are both whitelisted and permitted to accept GET requests can be referenced from a Financial Report Template's Custom API calculation_formula, and the same get_valid_api_method() check runs at save time so invalid formulas are rejected in the UI rather than at report execution. There is no standalone configuration flag that closes the hole on unpatched builds, so if immediate upgrading is not possible, the practical compensating controls are to restrict and audit the Accounts Manager role so that only trusted finance staff can create or edit Financial Report Template documents, to review existing templates for Custom API rows referencing unexpected or internal dotted paths (a malicious formula would be a leading indicator of prior abuse), and to apply the validation helper back-ported into financial_report_validation.py if a custom patch is feasible. Restricting the role trades off normal finance-team self-service, and template review only detects configuration-level changes rather than any already-exposed method returns, so upgrade should remain the primary action. Advisory and patch references: https://github.com/frappe/erpnext/security/advisories/GHSA-794x-fhm7-58j7 and https://github.com/frappe/erpnext/commit/7aad59b129711e9bba17b25665428d1fc57bf37c.

Affected VersionsENISA

ERPNext 16.0.0 <16.34.1

Affected Packages

euvd erpnext fix: 16.34.1

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 the flagship application of the Frappe framework, which exposes server-side Python functions to the client tier through an explicit RPC whitelist: functions decorated with @frappe.whitelist() are registered so that frappe.call() and the /api endpoint can dispatch to them, and each carries an allowed HTTP-method set consulted via frappe.allowed_http_methods_for_whitelisted_func. The vulnerability is a classic CWE-470 (Use of Externally-Controlled Input to Select Classes or Code) case: financial_report_engine.py took the user-supplied calculation_formula string, treated it as a dotted Python path, and handed it to frappe.call() via frappe.get_attr(), which will happily resolve and execute any importable attribute - whitelisted or not. Because the path was never checked against the whitelist and never constrained to read-only (GET) methods, an Accounts Manager could select internal framework or application methods as their 'report data source'. The upstream fix (commit 7aad59b129711e9bba17b25665428d1fc57bf37c) adds a get_valid_api_method() helper in financial_report_validation.py that resolves the path with frappe.get_attr, enforces is_whitelisted() and verifies that the resolved method permits GET requests before returning it, and the same helper is wired into both the save-time FormulaValidator and the runtime _process_account_row path. The accompanying JS change documents the new requirement that custom formula methods be whitelisted with @frappe.whitelist(methods=["GET"]).

Know when Frappe 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

Vendor (VulnCheck) PRIMARY 5.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Network-reachable web app, low complexity, but requires the privileged Accounts Manager role (PR:L); impact limited to invoking internal methods and reading returns (C:L/I:L), no availability effect and no clear scope change.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

Frappe ERPNext versions before 16.34.1 fail to validate that Financial Report Template calculation_formula values reference whitelisted methods before passing them to frappe.call(). Accounts Managers can supply arbitrary dotted Python paths to invoke non-whitelisted internal server-side methods and read their return values.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Medium
Popular open-source ERP, common in SMBs but not ubiquitous infrastructure
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Frappe

View all
CVE-2025-67289 CRITICAL POC
9.6 Dec 22

Stored cross-site scripting leading to code execution in Frappe Framework 15.89.0 (and the ERPNext application built on

CVE-2018-3885 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2018-3884 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2018-3883 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2018-3882 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2025-66440 HIGH POC
8.8 Dec 15

Authenticated SQL injection in Frappe ERPNext through 15.89.0 allows low-privilege users to extract arbitrary database c

CVE-2025-66439 HIGH POC
8.8 Dec 15

SQL injection in Frappe ERPNext through 15.89.0 lets an authenticated attacker with a valid session and access to the Pa

CVE-2025-66437 HIGH POC
8.8 Dec 15

Authenticated server-side template injection in Frappe ERPNext through 15.89.0 lets a user who can create or modify an A

CVE-2020-6145 HIGH POC
8.8 Aug 10

An SQL injection vulnerability exists in the frappe.desk.reportview.get functionality of ERPNext 11.1.38. Rated high sev

CVE-2026-39352 HIGH POC
8.7 May 20

Arbitrary file read in the Frappe full-stack web application framework allows remote unauthenticated attackers to retrie

CVE-2025-10655 HIGH POC
8.6 Dec 09

SQL injection in Frappe HelpDesk 1.14.0 dashboard functionality allows authenticated attackers to execute arbitrary SQL

CVE-2025-52042 HIGH POC
8.2 Oct 01

In Frappe ERPNext 15.57.5, the function get_rfq_containing_supplier() at erpnext/buying/doctype/request_for_quotation/re

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy