Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege HRMS user
-
DeliveryIdentify target employee's Leave Allocation name
-
ExploitPOST to whitelisted expire_allocation method
-
ExecutionServer expires allocation without permission check
-
ImpactVictim's remaining leave balance wiped
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a valid authenticated session on the Frappe HR instance - any ordinary logged-in user/employee, explicitly WITHOUT HR roles, is sufficient (PR:L). The attacker must know or enumerate the target's Leave Allocation document name, then issue a POST request to the whitelisted expire_allocation method, which is exposed by default and performs no permission check (CWE-862). Limiting factors: exploitation needs an authenticated account (not reachable by fully anonymous attackers), no user interaction from the victim, and impact is confined to integrity of leave-balance data (no confidentiality or availability impact); affects all 14.x and 15.x releases through 15.64.3 and versions before 16.11.0 in default configuration. |
| Impact | This is a medium-severity, insider-oriented data-integrity flaw rather than a mass-exploitation emergency. The vendor-supplied CVSS 4.0 vector (5.3, AV:N/AC:L/AT:N/PR:L/UI:N) confirms network reachability and low complexity but requires an authenticated low-privilege account (PR:L), and the impact is limited to integrity of leave data (VI:L) with no confidentiality (VC:N) or availability (VA:N) impact - consistent with CWE-862 Missing Authorization. No EPSS score and no SSVC decision data are present in the input, so exploitation probability and the automatable/technical-impact dimensions cannot be quantified; this gap should be noted when prioritizing. The CVE is NOT in CISA KEV and there is no explicit POC flag, though a detailed public technical writeup (HackMD) and a VulnCheck advisory exist, lowering the effort to reproduce. Netting the signals: the PR:L requirement means the realistic threat actor is a malicious or compromised internal user, and the blast radius is limited to overwriting another employee's leave balance - meaningful HR-data tampering, but not remote code execution or data theft. Treat as a prompt patch item (fix is available in 16.11.0) rather than a drop-everything priority; the absence of EPSS/KEV supports targeted/opportunistic insider abuse over widespread automated exploitation. |
| Exploit ScenarioDerived | A disgruntled employee holding an ordinary HRMS login (no HR role) sends a crafted POST request to the whitelisted expire_allocation method, naming a coworker's Leave Allocation document. Because the method omits an authorization check, the server expires that allocation and zeroes the victim's remaining leave balance. A public technical writeup on HackMD describes the flaw in detail, lowering the barrier to reproduction, though no formal exploit-code flag is provided in the input. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 11, 2026
Missing authorization in Frappe HR (hrms) lets any authenticated user - including ordinary employees with no HR role - zero out another employee's leave allocation by POSTing the target Leave Allocation record name to the whitelisted expire_allocation method, silently wiping that employee's remaining leave balance. The flaw affects all 14.x and 15.x releases through 15.64.3 and every build before 16.11.0, is exploitable in the default configuration with only a low-privileged session and no victim interaction, and is confined to data integrity (no confidentiality or availability impact). No public exploit identified at time of analysis, and a vendor-released patch (16.11.0) is available, so this is best treated as a medium-severity, insider-oriented data-integrity issue rather than a mass-exploitation emergency.
RemediationAI
Upgrade Frappe HR to 16.11.0 or later (release tag: https://github.com/frappe/hrms/releases/tag/v16.11.0), which contains the vendor fix; sites pinned to the 15.x or 14.x branches should backport or cherry-pick upstream commit 6ab7a50347367413b78ad5bd5d9e4b8c6653c81f, noting that it applies permission guards across many doctypes, so partial application may leave sibling endpoints vulnerable. If immediate upgrade is not possible, the targeted compensating control is to remove or restrict the expire_allocation whitelist entry - e.g. strip the @frappe.whitelist() decorator from expire_allocation on the Leave Allocation controller or gate it behind a custom role check - understanding that such edits are overwritten by the next app update and therefore must be tracked as temporary. A lower-touch alternative is to tighten Frappe role permissions on Leave Allocation and Leave Ledger Entry so that only HR Manager/HR User roles hold write or submit rights and the endpoint's internal document access fails closed; the trade-off is that misconfigured role permissions can break legitimate leave accrual, expiry, and payroll jobs, so test in staging and keep the custom roles narrow. Regardless of approach, audit Leave Ledger Entry and Leave Allocation records for unexplained zero-balance or expiry entries and alert on POSTs to /api/method/...expire_allocation originating from accounts without HR roles.
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
Frappe HR is the HR/payroll application built on the Frappe framework (the same low-code platform behind ERPNext), where server-side functions decorated with @frappe.whitelist() become directly reachable over HTTP as /api/method/<dotted.path> endpoints. The vulnerable method expire_allocation sits on the Leave Allocation domain object and manipulates Leave Ledger Entry records - the append-only ledger that computes an employee's available leave - via the code path visible in hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.py (lines 199-228). Because the method never called frappe.has_permission() against the Leave Allocation or Leave Ledger Entry doctype before mutating the ledger, the framework's default doctype/role permission model was simply bypassed; the root cause maps to CWE-862 (Missing Authorization), a broken-access-control class in which authentication is enforced but object-level authorization is not. The provided upstream commit 6ab7a50347367413b78ad5bd5d9e4b8c6653c81f shows the vendor applying the same fix pattern broadly across the codebase - inserting frappe.has_permission("<Doctype>", "read"/"write", <docname>, throw=True) and self.check_permission("write") guards in attendance, appraisal, expense claim, onboarding, roster, and file-upload paths - indicating this CVE is one instance of a systemic authorization-hardening sweep rather than an isolated coding error. The CPE cpe:2.3:a:frappe:hrms:*:*:*:*:*:*:*:* captures the entire hrms package across all versions prior to the fix.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Remote whitelisted endpoint reachable by any authenticated user (AV:N/AC:L/PR:L/UI:N); only another user's leave data is tampered, so C:N, I:L, A:N and no scope change.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Frappe HR (hrms) before 16.11.0, including all 14.x and 15.x releases through 15.64.3, contains a missing authorization vulnerability in the whitelisted expire_allocation method that allows authenticated users to expire any leave allocation. Attackers without HR roles can name another employee's Leave Allocation in a POST request to zero its allocated leaves and wipe that employee's remaining leave balance.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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 server-side template injection in Frappe ERPNext through 15.89.0 lets a user who can create or modify an A
An SQL injection vulnerability exists in the frappe.desk.reportview.get functionality of ERPNext 11.1.38. Rated high sev
Arbitrary file read in the Frappe full-stack web application framework allows remote unauthenticated attackers to retrie
SQL injection in Frappe HelpDesk 1.14.0 dashboard functionality allows authenticated attackers to execute arbitrary SQL
In Frappe ERPNext 15.57.5, the function get_rfq_containing_supplier() at erpnext/buying/doctype/request_for_quotation/re
EUVD-2026-96899
GHSA-7xfq-498m-4hrf
NVD
CVE.org
EPSS
Exploit-DB