/

CVE-2026-109616

Severity:

HIGH RISK

(7.1)

Missing Authorization (CWE-862) in Frappe ERPNext API

CVE-2026-109616

Deferred

Vulnerability type

Category:

Missing Authorization

CWE:

CWE-862

Impact:

Unauthorized data modification and privilege boundary bypass

Severity:

HIGH RISK

(7.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 authorization gaps in certain endpoints, allowing authenticated users to perform data changes beyond the permissions assigned to their roles. The issue becomes risky when those endpoints are reachable by users whose access should be limited by role or document-level permissions.

Frappe ERPNext contains authorization gaps in certain endpoints, allowing authenticated users to perform data changes beyond the permissions assigned to their roles. The issue becomes risky when those endpoints are reachable by users whose access should be limited by role or document-level permissions.

Affected context

The vulnerability may affect ERPNext deployments using endpoint handlers that do not consistently enforce authorization checks after authentication. It is relevant where authenticated users can reach those endpoints and where application data or operations are expected to be constrained by assigned roles, permissions, or document-level access rules.

The vulnerability may affect ERPNext deployments using endpoint handlers that do not consistently enforce authorization checks after authentication. It is relevant where authenticated users can reach those endpoints and where application data or operations are expected to be constrained by assigned roles, permissions, or document-level access rules.

Exploit preconditions

  • Attack surface: ERPNext application endpoints that modify data
  • Required access: A valid authenticated user account
  • Trigger point: A request to an endpoint with incomplete or missing authorization enforcement
  • Why exploitation is possible: Authentication establishes identity, but the affected endpoint may fail to verify whether that identity is permitted to perform the requested operation
  • Attack surface: ERPNext application endpoints that modify data
  • Required access: A valid authenticated user account
  • Trigger point: A request to an endpoint with incomplete or missing authorization enforcement
  • Why exploitation is possible: Authentication establishes identity, but the affected endpoint may fail to verify whether that identity is permitted to perform the requested operation

Why this happens

The underlying bug is an authorization enforcement failure in which endpoint logic authenticates a request or assumes that upstream controls are sufficient without checking the user's effective permissions for the specific operation and resource. This maps to CWE-862: Missing Authorization, where a system does not properly enforce access restrictions after determining that a user is authenticated.

The underlying bug is an authorization enforcement failure in which endpoint logic authenticates a request or assumes that upstream controls are sufficient without checking the user's effective permissions for the specific operation and resource. This maps to CWE-862: Missing Authorization, where a system does not properly enforce access restrictions after determining that a user is authenticated.

Potential impact

  • An authenticated user may modify records outside their assigned role
  • Sensitive business data could be altered or corrupted
  • Workflow, approval, or accounting controls may be bypassed
  • Unauthorized changes could affect data integrity, reporting, or downstream processes
  • An authenticated user may modify records outside their assigned role
  • Sensitive business data could be altered or corrupted
  • Workflow, approval, or accounting controls may be bypassed
  • Unauthorized changes could affect data integrity, reporting, or downstream processes

General mitigation guidance

Mitigation generally focuses on enforcing authorization at every sensitive

endpoint and applying permissions to the specific action and resource.

Common defensive patterns include:

  • Centralizing authorization checks and using deny-by-default behavior
  • Verifying role, ownership, document, and field-level permissions server-side
  • Avoiding reliance on client-side controls or endpoint obscurity
  • Applying least privilege to user roles, service accounts, and integration identities
  • Rechecking authorization for bulk operations, alternate request methods, and indirect object references
  • Using consistent policy enforcement before data mutation occurs

Mitigation generally focuses on enforcing authorization at every sensitive

endpoint and applying permissions to the specific action and resource.

Common defensive patterns include:

  • Centralizing authorization checks and using deny-by-default behavior
  • Verifying role, ownership, document, and field-level permissions server-side
  • Avoiding reliance on client-side controls or endpoint obscurity
  • Applying least privilege to user roles, service accounts, and integration identities
  • Rechecking authorization for bulk operations, alternate request methods, and indirect object references
  • Using consistent policy enforcement before data mutation occurs

How teams detect issues like this

Organizations can identify missing authorization through:

  • Static analysis and code review for mutation endpoints lacking permission checks
  • Tests that exercise each sensitive operation with users holding different roles
  • Review of routes that trust client-supplied identifiers or permission-related fields
  • Policy enforcement requiring explicit authorization controls for data-changing handlers
  • Audit-log analysis for changes inconsistent with the acting user's role

Automated security review tools may help flag endpoints whose authorization paths

are absent, inconsistent, or bypassable.

Organizations can identify missing authorization through:

  • Static analysis and code review for mutation endpoints lacking permission checks
  • Tests that exercise each sensitive operation with users holding different roles
  • Review of routes that trust client-supplied identifiers or permission-related fields
  • Policy enforcement requiring explicit authorization controls for data-changing handlers
  • Audit-log analysis for changes inconsistent with the acting user's role

Automated security review tools may help flag endpoints whose authorization paths

are absent, inconsistent, or bypassable.

Sources

SourceLink
github.comgithub.com/frappe/erpnext/security/advisories/GHSA-cgjf-xw8x-qjjc
vulncheck.comvulncheck.com/advisories/frappe-erpnext-before-15.121.3-missing-authorization-allows-unauthorized-data-modification

Frequently asked

questions

It may be exploitable through network-accessible ERPNext endpoints when an attacker has a valid authenticated account and the endpoint is exposed to that account.

The described issue requires authentication. The account may have limited permissions; the vulnerability concerns operations that do not properly honor those limits.

Enforce server-side, deny-by-default authorization for every sensitive endpoint and verify permissions for the specific action and resource before modifying data.

Use centralized authorization policies, least-privilege roles, negative permission tests, and audit monitoring for unauthorized or anomalous data changes.

It may be exploitable through network-accessible ERPNext endpoints when an attacker has a valid authenticated account and the endpoint is exposed to that account.

The described issue requires authentication. The account may have limited permissions; the vulnerability concerns operations that do not properly honor those limits.

Enforce server-side, deny-by-default authorization for every sensitive endpoint and verify permissions for the specific action and resource before modifying data.

Use centralized authorization policies, least-privilege roles, negative permission tests, and audit monitoring for unauthorized or anomalous data changes.

Find out what's already
exploitable in your codebase.