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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-accessible API requires a low-privilege authenticated session (PR:L); scope unchanged, integrity impact limited to unauthorized file attachment, no confidentiality or availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Frappe is a full-stack web application framework. Prior to 16.20.0 and 15.110.0, users without write access could attach files to any doctype through file-handling API endpoints such as add_attachments. This issue is fixed in versions 16.20.0 and 15.110.0.
AnalysisAI
Unauthorized file attachment in Frappe, a Python/JavaScript full-stack web framework, allows any authenticated low-privilege user to attach files to arbitrary doctypes through file-handling API endpoints such as add_attachments, bypassing per-document write permission enforcement. Affected are all Frappe v15 releases prior to 15.110.0 and all v16 releases prior to 16.20.0. No public exploit code has been identified at time of analysis and this vulnerability is not listed in the CISA KEV catalog, but the low attack complexity and network accessibility make exploitation straightforward for any valid account holder on a multi-tenant instance.
Technical ContextAI
Frappe is a metadata-driven, open-source full-stack web framework underpinning business applications such as ERPNext. Its core abstraction is the 'DocType' system, where each document type carries its own permission model (read, write, create, delete). CWE-862 (Missing Authorization) is the root cause: the file attachment API endpoints - including add_attachments - perform authentication checks to confirm the caller has a valid session but do not subsequently verify that the caller holds write-level permission on the target DocType record before persisting the attachment. The affected software is identified by CPE cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:*, covering the entire Frappe package across all platforms prior to the patched versions.
RemediationAI
Upgrade Frappe to version 16.20.0 or later on the v16 branch, or to version 15.110.0 or later on the v15 branch; these are vendor-confirmed patched releases per https://github.com/frappe/frappe/releases/tag/v16.20.0 and https://github.com/frappe/frappe/releases/tag/v15.110.0. The upstream fixes were delivered via pull requests #39407, #39550, and #39553 (https://github.com/frappe/frappe/pull/39407, /39550, /39553) and associated commits. If patching cannot be applied immediately, restrict network access to the file-attachment API endpoints (add_attachments and related file upload routes) for non-privileged users at the reverse proxy or WAF layer - note this will disable legitimate file attachment functionality for restricted users as a side effect. Do not rely on application-level role configuration alone as a compensating control, since the authorization check at the API layer is the gap being exploited.
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
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
In Frappe ERPNext 15.57.5, the function get_stock_balance_for() at erpnext/stock/doctype/stock_reconciliation/stock_reco
In Frappe ERPNext 15.57.5, the function get_blanket_orders() at erpnext/controllers/queries.py is vulnerable to SQL Inje
In Frappe ERPNext 15.57.5, the function get_material_requests_based_on_supplier() at erpnext/stock/doctype/material_requ
Same weakness CWE-862 – Missing Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-43104