/

CVE-2026-109640

Severity:

HIGH RISK

(8.1)

Missing Authorization (CWE-862) in Frappe ERPNext APIs

CVE-2026-109640

Deferred

Vulnerability type

Category:

Missing Authorization

CWE:

CWE-862

Impact:

Unauthorized Data Modification

Severity:

HIGH RISK

(8.1)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Frappe ERPNext contains endpoints that do not consistently enforce authorization checks before allowing authenticated users to modify records. An authenticated attacker may exploit these endpoints to change data outside the permissions granted by their assigned role.

Frappe ERPNext contains endpoints that do not consistently enforce authorization checks before allowing authenticated users to modify records. An authenticated attacker may exploit these endpoints to change data outside the permissions granted by their assigned role.

Affected context

The vulnerability may occur in ERPNext deployments where authenticated users can reach record-modification endpoints that rely on incomplete or inconsistent server-side authorization checks. Risk is higher when endpoint access is broader than the permissions enforced by the application's role and document access model.

The vulnerability may occur in ERPNext deployments where authenticated users can reach record-modification endpoints that rely on incomplete or inconsistent server-side authorization checks. Risk is higher when endpoint access is broader than the permissions enforced by the application's role and document access model.

Exploit preconditions

  • Attack surface: ERPNext application endpoints that modify records
  • Required access: A valid authenticated user account
  • Trigger point: Invocation of a record-modification endpoint lacking an effective authorization check
  • Why exploitation is possible: The server may process the requested change without confirming that the user's role permits the targeted operation or record access
  • Attack surface: ERPNext application endpoints that modify records
  • Required access: A valid authenticated user account
  • Trigger point: Invocation of a record-modification endpoint lacking an effective authorization check
  • Why exploitation is possible: The server may process the requested change without confirming that the user's role permits the targeted operation or record access

Why this happens

The underlying issue is a missing authorization control in one or more application endpoints. The endpoint performs a state-changing operation without reliably enforcing the caller's permissions for the target record, mapping to CWE-862: Missing Authorization. Authentication confirms the user's identity, but the affected paths do not adequately verify whether that identity is allowed to perform the requested action.

The underlying issue is a missing authorization control in one or more application endpoints. The endpoint performs a state-changing operation without reliably enforcing the caller's permissions for the target record, mapping to CWE-862: Missing Authorization. Authentication confirms the user's identity, but the affected paths do not adequately verify whether that identity is allowed to perform the requested action.

Potential impact

  • Unauthorized users may modify business records
  • Data integrity could be damaged or manipulated
  • Workflow, financial, inventory, or operational information could be altered
  • Changes could undermine audit accuracy and downstream business processes
  • An attacker could use modified records to support further abuse of the application
  • Unauthorized users may modify business records
  • Data integrity could be damaged or manipulated
  • Workflow, financial, inventory, or operational information could be altered
  • Changes could undermine audit accuracy and downstream business processes
  • An attacker could use modified records to support further abuse of the application

General mitigation guidance

Mitigation generally focuses on enforcing authorization at every state-changing server-side operation rather than relying on the client or on authentication alone.

Common defensive patterns include:

  • Applying centralized, deny-by-default authorization checks to record-modification endpoints
  • Verifying both the requested action and access to the specific target record
  • Reusing a single policy enforcement layer across web, API, and background operation paths
  • Preventing client-supplied roles, ownership values, or permission indicators from determining access
  • Running sensitive operations with the least privilege necessary
  • Preserving tamper-resistant audit logs for authorization decisions and record changes
  • Testing authorization behavior with users assigned different roles and record scopes

Mitigation generally focuses on enforcing authorization at every state-changing server-side operation rather than relying on the client or on authentication alone.

Common defensive patterns include:

  • Applying centralized, deny-by-default authorization checks to record-modification endpoints
  • Verifying both the requested action and access to the specific target record
  • Reusing a single policy enforcement layer across web, API, and background operation paths
  • Preventing client-supplied roles, ownership values, or permission indicators from determining access
  • Running sensitive operations with the least privilege necessary
  • Preserving tamper-resistant audit logs for authorization decisions and record changes
  • Testing authorization behavior with users assigned different roles and record scopes

How teams detect issues like this

Organizations can look for missing authorization through:

  • Static analysis and code review searches for state-changing endpoints without policy or permission checks
  • Review of controller and API handlers that accept record identifiers from callers
  • Tests that attempt horizontal access across peer records and vertical access to privileged operations
  • Monitoring for authenticated users modifying records outside their normal role, ownership, or business scope
  • API gateway or application policy rules requiring authorization decisions for write operations
  • Automated security testing that compares endpoint behavior across representative roles

Neutral automated review tools may help identify inconsistent authorization patterns, but findings should be validated against the application's intended permission model.

Organizations can look for missing authorization through:

  • Static analysis and code review searches for state-changing endpoints without policy or permission checks
  • Review of controller and API handlers that accept record identifiers from callers
  • Tests that attempt horizontal access across peer records and vertical access to privileged operations
  • Monitoring for authenticated users modifying records outside their normal role, ownership, or business scope
  • API gateway or application policy rules requiring authorization decisions for write operations
  • Automated security testing that compares endpoint behavior across representative roles

Neutral automated review tools may help identify inconsistent authorization patterns, but findings should be validated against the application's intended permission model.

Sources

SourceLink
github.comgithub.com/frappe/erpnext/security/advisories/GHSA-c496-q7g2-62vv
vulncheck.comvulncheck.com/advisories/frappe-erpnext-before-16.22.0-missing-authorization-allows-unauthorized-record-modification

Frequently asked

questions

It may be exploitable through network-accessible ERPNext endpoints when those endpoints are exposed to an attacker who has authenticated successfully.

The described issue requires an authenticated account, but the account may have fewer privileges than the requested record modification requires.

Enforce server-side, deny-by-default authorization for every record-changing operation, including checks for both the requested action and the target record.

Define centralized authorization policies, test endpoints across role boundaries, reject client-controlled permission claims, and monitor for anomalous record changes.

It may be exploitable through network-accessible ERPNext endpoints when those endpoints are exposed to an attacker who has authenticated successfully.

The described issue requires an authenticated account, but the account may have fewer privileges than the requested record modification requires.

Enforce server-side, deny-by-default authorization for every record-changing operation, including checks for both the requested action and the target record.

Define centralized authorization policies, test endpoints across role boundaries, reject client-controlled permission claims, and monitor for anomalous record changes.

Find out what's already
exploitable in your codebase.