Skip to main content

Frappe HR CVE-2026-55796

| EUVDEUVD-2026-103172 MEDIUM
SQL Injection (CWE-89)
2026-10-16 GitHub_M
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as HR/payroll user
  2. Exploit
    Submit crafted filter value to ECS report
  3. Execution
    Inject SQL into unparameterized WHERE clause
  4. Impact
    Read sensitive salary and employee records

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

Requires an authenticated user with HR/Payroll privileges sufficient to access the 'Salary Payments via ECS' report; the attacker injects SQL through the report's filter values (department, branch, company, month, or year), which were concatenated directly into the query string. Exploitation is limited to Frappe HR versions prior to 15.60.3 (15.x line) and 16.7.1 (16.x line). The principal limiting factor is the authentication and authorization requirement - a valid HR-level account is needed - so this is an insider or post-credential-compromise vector rather than an anonymous remote attack; no special non-default configuration is required for the vulnerable report itself.

Impact

This is a moderate, authentication-gated SQL injection (CWE-89) with a self-consistent CVSS 3.1 vector (6.5, AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N). The signals align and present no contradictions: network-reachable but requiring valid credentials (PR:L), low complexity, and confidentiality-only impact (C:H, I/A:N), consistent with a read-oriented report query that exposes employee, gross_pay, and net_pay data. No EPSS score, no CISA KEV listing, and no public exploit code were provided, so there is no evidence of active or at-scale exploitation. The practical risk is therefore bounded by the requirement for an authenticated HR user - the attacker is already a semi-trusted insider or someone who has compromised HR credentials. This is a legitimate 'patch in normal cycle' issue rather than an emergency: the SQL injection is real and confirmed by the vendor fix commit (migration from string interpolation to the parameterized frappe.qb query builder), but the privilege prerequisite and absence of exploitation signals keep it well below the urgency of an unauthenticated RCE. Missing data to note: EPSS probability is absent (cannot quantify likelihood) and KEV status is not confirmed, so prioritization relies on CVSS and code evidence alone.

Exploit ScenarioDerived

An authenticated user with access to the HR/Payroll module opens the 'Salary Payments via ECS' report and enters a crafted value into a filter field (department, branch, company, month, or year). Because the report built its WHERE clause via unsafe Python string interpolation, the injected SQL executes against the database, letting the attacker read sensitive salary and employee records beyond their intended scope. No public exploit code was identified at the time of analysis, but the vulnerable pattern is clearly visible in the vendor's fix commit.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

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

Alert me

AnalysisAIv1 – Oct 16, 2026

SQL injection in the 'Salary Payments via ECS' report of Frappe HR (HRMS) lets an authenticated HR/payroll user read sensitive database records by supplying crafted report filter values. The vulnerability affects Frappe HR releases before 15.60.3 on the 15.x line and before 16.7.1 on the 16.x line, and is rated CVSS 3.1 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N); because the CVSS vector specifies PR:L, exploitation requires a valid low-privileged account and is therefore an insider or post-compromise vector rather than an anonymous remote attack. No public exploit code and no confirmed active exploitation (CISA KEV) were identified at time of analysis, and the issue is resolved by vendor patches 15.60.3 and 16.7.1.

RemediationAI

Vendor-released patch: upgrade to Frappe HR 15.60.3 or 16.7.1 (or later) as published at https://github.com/frappe/hrms/releases/tag/v15.60.3 and https://github.com/frappe/hrms/releases/tag/v16.7.1; the fix commits are d823d20c49493c2959e809d41c862c037c8109e6 and e9eef45425072b4e3cefea71683d515d63906d66, and the advisory is https://github.com/frappe/hrms/security/advisories/GHSA-c32r-q985-64xr. Where immediate upgrading is not possible, the most effective compensating control is to restrict who can run the 'Salary Payments via ECS' report: remove the HR/Payroll report permissions from untrusted or broadly provisioned accounts (Frappe Role Permission Manager and report-level role restrictions), since the attack requires an authenticated HR-privileged user and no anonymous path exists - the trade-off is that legitimate HR staff lose access to this payroll reconciliation report. Additionally, reduce the blast radius of the database account used by the Frappe site (least-privilege DB user, no cross-application grants) and monitor/review payroll report execution logs for anomalous filter values containing SQL syntax such as quotes, UNION, or stacked statements; these measures limit exposure but do not remove the injection flaw itself, so patching remains the primary remediation.

Affected VersionsENISA

hrms < 15.60.3
hrms 16.0.0, < 16.7.1

Affected Packages

euvd hrms fix: 15.60.3, 16.7.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

The root cause is CWE-89, improper neutralization of special elements used in an SQL command. In hrms/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py, the get_conditions() function built a WHERE fragment by performing Python string interpolation of user-controlled filter values (department, branch, company, month, year) into fragments such as "department = '%s'", and get_data() then passed that fragment directly into a frappe.db.sql() call against the tabSalary Slip table via a %-format. The upstream fix (commit d823d20c49493c2959e809d41c862c037c8109e6, with a companion commit e9eef45425072b4e3cefea71683d515d63906d66) replaces the raw SQL string with the Frappe query builder: it constructs typed filter clauses (SalarySlip.department filters['department'], Extract('month', SalarySlip.start_date) int(filters['month']), and so on) combined with the docstatus = 1 predicate and executed through frappe.qb.from_(SalarySlip).select(...).where(base_where).run(as_dict=True). This parameterization/escaping through the ORM layer removes the injection primitive entirely. The affected component is the HRMS application layer on top of the Frappe framework, and the CPE cpe:2.3:a:frappe:hrms:*:*:*:*:*:*:*:* confirms the whole product line is treated as affected prior to the fixed releases. Successful exploitation yields read access to database records reachable by the report query, which the assessment scores as high confidentiality impact with no integrity or availability impact.

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 (GitHub_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 6.5 MEDIUM

Network-accessible web report requiring an authenticated HR user (PR:L), low complexity; the injected query reads records so C:H, with no write or availability impact (I:N/A:N).

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Oct 16, 2026 - 22:03 EUVD

DescriptionCVE.org

Frappe HR is an open-source human resources management solution (HRMS). Prior to 15.60.3 and 16.7.1, the Salary Payments via ECS report constructs report conditions with unsafe SQL string interpolation. An authenticated HR user supplies crafted Salary Payments via ECS report filter values. The affected Salary Payments via ECS report allows the user to inject SQL through report filter values. Successful exploitation can access sensitive database records. This issue is fixed in versions 15.60.3 and 16.7.1.

Threat Intelligence Overview

Prevalence
Low
niche open-source HRMS module within the Frappe/ERPNext ecosystem
Social Media
1
Sightings
Data Quality
3 sources
Confidence: Low

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 N/A
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

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

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

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