/

CVE-2026-111389

Severity:

HIGH RISK

(7.7)

SQL Injection (CWE-89) in Frappe HRMS API Endpoints

CVE-2026-111389

Deferred

Vulnerability type

Category:

SQL Injection

CWE:

CWE-89

Impact:

Unauthorized Database Access and Sensitive Data Disclosure

Severity:

HIGH RISK

(7.7)

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 HRMS contains SQL injection vulnerabilities in certain endpoints because request inputs are not adequately validated before database queries are constructed or executed. An authenticated attacker, including a low-privilege user, may submit crafted requests to retrieve sensitive information from the underlying database.

Frappe HRMS contains SQL injection vulnerabilities in certain endpoints because request inputs are not adequately validated before database queries are constructed or executed. An authenticated attacker, including a low-privilege user, may submit crafted requests to retrieve sensitive information from the underlying database.

Affected context

The vulnerability affects certain Frappe HRMS endpoints in impacted 14.x, 15.x, and 16.x releases. It becomes risky where authenticated users can reach the affected endpoints and supplied parameters influence database queries without sufficient validation, parameterization, or authorization checks.

The vulnerability affects certain Frappe HRMS endpoints in impacted 14.x, 15.x, and 16.x releases. It becomes risky where authenticated users can reach the affected endpoints and supplied parameters influence database queries without sufficient validation, parameterization, or authorization checks.

Exploit preconditions

  • Attack surface: HTTP endpoints exposed by the Frappe HRMS application
  • Required access: An authenticated account; a low-privilege account may be sufficient
  • Trigger point: Processing of crafted request parameters by affected endpoints
  • Why exploitation is possible: Input is not adequately validated or safely separated from SQL query logic, allowing attacker-controlled data to influence database operations
  • Attack surface: HTTP endpoints exposed by the Frappe HRMS application
  • Required access: An authenticated account; a low-privilege account may be sufficient
  • Trigger point: Processing of crafted request parameters by affected endpoints
  • Why exploitation is possible: Input is not adequately validated or safely separated from SQL query logic, allowing attacker-controlled data to influence database operations

Why this happens

The underlying issue is SQL injection, mapped to CWE-89. The application permits request-controlled input to reach database query construction or execution without consistently using parameterized queries, safe query builders, or strict allowlisted validation. As a result, data intended to be treated as a value may instead affect the structure or behavior of a database statement.

The underlying issue is SQL injection, mapped to CWE-89. The application permits request-controlled input to reach database query construction or execution without consistently using parameterized queries, safe query builders, or strict allowlisted validation. As a result, data intended to be treated as a value may instead affect the structure or behavior of a database statement.

Potential impact

  • Sensitive database records could be disclosed
  • Confidential employee, organizational, or application data may be exposed
  • Database query behavior could be altered
  • Integrity of stored information could be affected if write-capable paths are reachable
  • Further compromise could become possible through exposed credentials, tokens, or administrative data
  • Sensitive database records could be disclosed
  • Confidential employee, organizational, or application data may be exposed
  • Database query behavior could be altered
  • Integrity of stored information could be affected if write-capable paths are reachable
  • Further compromise could become possible through exposed credentials, tokens, or administrative data

General mitigation guidance

Mitigation generally focuses on removing attacker-controlled input from SQL syntax and reducing the privileges available to application database accounts.

Common defensive patterns include:

  • Use parameterized queries or vetted query-builder APIs for all dynamic values
  • Apply strict allowlist validation for identifiers, sort fields, filters, and other query-shaping inputs
  • Avoid string concatenation when constructing database statements
  • Enforce endpoint-level authorization independently from input validation
  • Run the application with a database account limited to necessary operations and records
  • Centralize database access patterns so unsafe query construction is less likely to recur
  • Treat error messages and query responses as sensitive, limiting unnecessary database detail

Mitigation generally focuses on removing attacker-controlled input from SQL syntax and reducing the privileges available to application database accounts.

Common defensive patterns include:

  • Use parameterized queries or vetted query-builder APIs for all dynamic values
  • Apply strict allowlist validation for identifiers, sort fields, filters, and other query-shaping inputs
  • Avoid string concatenation when constructing database statements
  • Enforce endpoint-level authorization independently from input validation
  • Run the application with a database account limited to necessary operations and records
  • Centralize database access patterns so unsafe query construction is less likely to recur
  • Treat error messages and query responses as sensitive, limiting unnecessary database detail

How teams detect issues like this

Organizations commonly detect SQL injection risks through:

  • Static analysis rules identifying string concatenation or interpolation in SQL-related code
  • Code review checks for raw query APIs, dynamic identifiers, and missing parameter binding
  • Dynamic application testing using safe, non-destructive probes against authorized test environments
  • Monitoring for unusual query errors, repeated database enumeration patterns, or abnormal response sizes
  • Policy enforcement requiring parameterized database access and security review for new endpoints
  • Automated code review and software composition tools that flag injection-prone data flows

Organizations commonly detect SQL injection risks through:

  • Static analysis rules identifying string concatenation or interpolation in SQL-related code
  • Code review checks for raw query APIs, dynamic identifiers, and missing parameter binding
  • Dynamic application testing using safe, non-destructive probes against authorized test environments
  • Monitoring for unusual query errors, repeated database enumeration patterns, or abnormal response sizes
  • Policy enforcement requiring parameterized database access and security review for new endpoints
  • Automated code review and software composition tools that flag injection-prone data flows

Sources

SourceLink
github.comgithub.com/frappe/hrms/security/advisories/GHSA-jfmr-9jv9-mrw4
vulncheck.comvulncheck.com/advisories/frappe-hrms-14.0.0-before-14.38.2-sql-injection-via-missing-validation

Frequently asked

questions

Yes. It can be reached through affected application endpoints over the network, provided the attacker can authenticate and access those endpoints.

No. The described issue may be exploitable by a low-privilege authenticated user, depending on endpoint exposure and authorization behavior.

Use parameterized queries or trusted query-builder interfaces, validate query-shaping inputs with allowlists, and ensure endpoint authorization is enforced separately.

Standardize safe database access APIs, review all request-to-query data flows, limit database account privileges, and include static and dynamic injection testing in development and release processes.

Yes. It can be reached through affected application endpoints over the network, provided the attacker can authenticate and access those endpoints.

No. The described issue may be exploitable by a low-privilege authenticated user, depending on endpoint exposure and authorization behavior.

Use parameterized queries or trusted query-builder interfaces, validate query-shaping inputs with allowlists, and ensure endpoint authorization is enforced separately.

Standardize safe database access APIs, review all request-to-query data flows, limit database account privileges, and include static and dynamic injection testing in development and release processes.

Find out what's already
exploitable in your codebase.