Skip to main content

Frappe Framework EUVDEUVD-2026-98928

| CVE-2026-55823 HIGH
SQL Injection (CWE-89)
2026-10-13 GitHub_M
8.7
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate with low-privilege Frappe account
  2. Delivery
    Craft malicious report query input
  3. Exploit
    Submit to reportview get_count() endpoint
  4. Execution
    Injected SQL executed via raw DB path
  5. Impact
    Exfiltrate or tamper with database contents

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 session (CVSS PR:L) with access to Frappe's report/list view API, and the ability to supply crafted report input (fields/filters) that reaches the get_count() method in frappe/desk/reportview.py; in affected versions (<16.23.0) that input was composed into a raw 'select count(*) from ( ... )' statement via frappe.db.sql() f-string interpolation, allowing SQL to be altered. Limiting factors: exploitation is not anonymous - a valid Frappe/ERPNext account with report access is needed - which restricts the attacker population to registered or compromised users; no special non-default configuration is indicated, so default deployments running a version prior to 16.23.0 are exposed to authenticated users.

Impact

This is a genuine, actionable SQL injection (CWE-89) in Frappe's reportview get_count() path, not merely a high-number-but-low-risk issue. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) and score of 8.7 indicate a network-reachable, low-complexity flaw with high confidentiality and integrity impact (VC:H/VI:H) and limited availability impact (VA:L), requiring only low privileges (PR:L) - i.e., an authenticated but not necessarily highly-privileged user. The PR:L requirement is the main dampener: exploitation needs a valid session with access to the report/list view API, so this is not fully anonymous mass-exploitable, which argues for targeted rather than internet-wide abuse. No EPSS score, no CISA KEV listing, and no SSVC decision data were provided, so automatable/exploitation signals cannot be cross-referenced; absence of KEV/EPSS here is a data gap, not evidence of low risk. Public fix commits and a detailed patch diff exist (PRs 40022/40027), which materially lowers the effort to reverse-engineer a working exploit even though no standalone exploit code was supplied. Net: treat as a real patching priority for any internet-facing or multi-tenant Frappe/ERPNext deployment, while noting the authenticated-access precondition narrows the realistic threat population.

Exploit ScenarioDerived

An authenticated low-privilege user (or an attacker who has phished/obtained any valid Frappe account) submits a crafted report query to the list/report view endpoint whose count operation flows into get_count(), where report input is composed into raw SQL via a raw database execution path. The injected SQL alters the executed query, letting the attacker read or tamper with database data beyond their authorization. No public standalone exploit was provided, but the upstream fix commits and patch diff are public, making the vulnerable code path easy to identify and weaponize.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 13, 2026

Authenticated SQL injection in Frappe Framework before 16.23.0 lets a user with report access alter the raw SQL statement executed by the reportview get_count() method, potentially reading or modifying data the account should not reach. The flaw is reachable through the report/list view API by supplying crafted report input (fields/filters) that was interpolated into a 'select count(*) from ( ... )' query via frappe.db.sql(); the fix rewrites the count using the query builder's Count function with parameterized execution. No public exploit code was identified at time of analysis and the issue is not confirmed as actively exploited (CISA KEV), but exploitation requires only a valid account with report access (CVSS PR:L, AV:N), and default deployments older than 16.23.0 are exposed.

RemediationAI

Upgrade to Frappe Framework 16.23.0 or later, which is the vendor-released fix (release tag v16.23.0); the patch is delivered through the upstream commits 49dbde7460fa41528154088d23b6c6e12f733f9b and f4f2df926e3c2db2da5fc79983f285397c028690 referenced in advisory https://github.com/frappe/frappe/security/advisories/GHSA-mf6r-q34j-pjw7. Where an immediate upgrade is not possible, compensating controls should target the prerequisite - an authenticated session with report access: restrict report and list view permissions to trusted roles (removing broad System Manager/Report Manager grants), audit and rotate credentials of accounts with report access since injected reads or writes may have occurred, and monitor database logs for anomalous 'select count(*)' statements carrying stacked queries or unexpected subqueries. These controls reduce but do not eliminate risk because any remaining legitimate report user can still reach the vulnerable code path, and permission tightening may block normal business reporting until the upgrade is deployed. Patching to 16.23.0 is the only complete fix.

Affected VersionsENISA

frappe < 16.23.0

Affected Packages

euvd frappe fix: 16.23.0

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 vulnerable code path lives in frappe/desk/reportview.py, the backend for Frappe's desk report and list view. In get_count(), the method built a partial query from user-supplied report field/filter input, converted it to SQL text, and wrapped it in a raw database execution via frappe.db.sql(f"select count(*) from ( {partial_query} ) p"). Because the partial query text was composed with string interpolation rather than bound parameters, crafted report input could inject or reshape SQL executed by the application - a classic CWE-89 improper neutralization of special elements used in an SQL command. The same method also prefixed a MariaDB-specific 'SET STATEMENT max_statement_time=1 FOR' clause, showing the query ran directly against MariaDB/MySQL backends. The upstream fix (PRs 40022 and 40027, commits 49dbde7460fa41528154088d23b6c6e12f733f9b and f4f2df926e3c2db2da5fc79983f285397c028690) replaces the f-string composition with frappe.qb.from_(partial_query).select(Count('*')) and executes the generated query with the query builder's walk() output passed as bound parameters to frappe.db.sql(), restoring parameterization and (incidentally) correcting the trailing space in the MariaDB timeout clause. The affected product is Frappe's own framework (CPE cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:*), which also underpins downstream applications such as ERPNext running on a vulnerable Frappe version.

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 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N
vuln.today AI 8.3 HIGH

Network-reachable SQLi via an authenticated report API (AV:N/AC:L/PR:L/UI:N); same-DB scope unchanged (S:U) with high read/write impact and limited availability from query manipulation.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 13, 2026 - 18:19 EUVD
CVE Published
Oct 13, 2026 - 16:49 cve.org
HIGH 8.7

DescriptionCVE.org

Frappe is a full-stack web application framework. Prior to 16.23.0, the get_count() method in reportview composes a count operation around generated SQL through a raw database execution path, allowing crafted report input to alter SQL executed by the application. This issue is fixed in version 16.23.0.

Technical POC Analysis

CWE-89 (SQL injection) in the Frappe Framework Python package (pip package frappe).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A high-severity flaw in Frappe Framework (CVSS 8.7) allows any authenticated account that can run reports to manipulate the database queries behind report and list views, potentially reading or altering records that account was never meant to reach. Because report access is commonly granted broadly across business users, finance, and operations staff, the exposure extends well beyond technical administrators and can undermine the integrity of transactional and reporting data. The vulnerability is remotely reachable and affects default deployments below version 16.23.0, making it a priority for any organization running Frappe/ERPNext in production.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis; the advisory indicates the vulnerable count logic was rewritten using the query builder's Count function with parameterized execution in version 16.23.0, so upgrading to 16.23.0 or later is the remediation target. Until that upgrade is applied, restrict report and list-view access to the minimum set of users, review and reduce roles that grant report permissions, enforce least-privilege database credentials for the application account, and monitor report/list API traffic for crafted fields and filter parameters indicative of SQL injection attempts.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Medium
popular open-source ERP/web framework (Frappe/ERPNext), common in SMBs but not ubiquitous
Data Quality
4 sources
Confidence: Medium

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 HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
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