Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft OAuth URL with malicious state
-
ExploitPhish victim into clicking link
-
ExecutionVictim completes legitimate OAuth login
-
ImpactUnsanitized state redirects browser to attacker site
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Redirect URL validation
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The affected Frappe instance must have OAuth / social login configured and enabled (the frappe.utils.oauth login_via_oauth2 flow), and the attacker must deliver a crafted OAuth login link to a victim who then clicks it and completes authentication at the provider - exploitation cannot occur passively or against instances without social login. Key limiting factors: required active user interaction (UI:A), dependency on the OAuth login feature being in use, impact restricted to redirection (no code execution, data write, or availability loss), and applicability only to versions prior to 15.116.0 (v15 line) and 16.29.0 (v16 line). |
| Impact | This is a genuine but modest-severity issue, best treated as routine patch-cycle work rather than an emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N, 5.1 Medium) correctly captures the shape of a CWE-601 open redirect: network-reachable, low complexity, no attacker privileges, but requiring active victim interaction and yielding only low confidentiality impact with no integrity or availability effect. No EPSS score was provided in the input, and the CVE is NOT present in CISA KEV, so there is no evidence of active exploitation. The 'Source code evidence' is the vendor fix (PR #40962 and associated commits), not a weaponized exploit, so this should not be mistaken for public POC exploit code. The signals are internally consistent - a network open redirect gated behind user interaction and a configured OAuth flow - so there is no CVSS-versus-description conflict. The realistic danger is phishing/credential-harvesting amplification (a trusted Frappe domain bouncing users to an attacker site post-login) rather than direct system compromise; prioritize for the next maintenance window, with urgency raised only if the instance exposes OAuth/social login to untrusted users. |
| Exploit ScenarioDerived | An attacker crafts a Frappe OAuth login URL containing a malicious client-controlled state value and sends it to a victim via phishing. After the victim authenticates through the legitimate OAuth provider, the application uses the unsanitized state to navigate them to an attacker-chosen external location, lending the attacker's landing page the credibility of the trusted Frappe domain. No public exploit code was identified at time of analysis, and the network vector with low complexity makes the link trivial to construct, but success depends on the victim clicking and completing login. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 13, 2026
An open redirect in the Frappe Framework OAuth/social login flow lets a crafted 'state' value control where a user is sent after completing third-party authentication, so a victim who clicks an attacker-supplied login link can be bounced to an attacker-chosen site under the trusted Frappe domain. Only instances that have OAuth social login configured and enabled are affected, and exploitation requires the victim to click the link and finish authenticating at the provider (CVSS 5.1, UI:A, PR:N, S:C, with impact limited to low confidentiality/redirection). No public exploit code or confirmed active exploitation was identified at time of analysis; the issue is modest severity and best handled as routine patch-cycle work, with fixes shipped in Frappe 15.116.0 and 16.29.0.
RemediationAI
Vendor-released patch: upgrade to Frappe Framework 15.116.0 (v15 line) or 16.29.0 (v16 line) or later, per the advisory GHSA-78c5-55xg-jm7m and the release tags v15.116.0/v16.29.0. Because the patch changes the state parameter from a client-readable base64 JSON blob to an opaque single-use server-side token (create_oauth_state/consume_oauth_state, 600-second cache TTL, redeemed once), any custom code, test fixtures, or integrations that construct or parse the old JSON/base64 state format must be updated and re-issued through create_oauth_state, or logins will fail with an HTTP 417 'Invalid Request' page - a functional side effect to expect immediately after upgrade. If upgrading cannot be done promptly, the most effective compensating control is to disable the configured social login keys (frappe.integrations.doctype.social_login_key) or the OAuth callback route until patched, whose trade-off is that legitimate federated/SSO sign-in stops working for all users; restricting inbound access to the OAuth callback endpoint to expected identity-provider infrastructure offers only partial mitigation because the crafted link is delivered to the victim's browser and the redirect is triggered client-side, and the token-expiry/one-time-use weakness in the old code cannot be reproduced by configuration. There is no vendor workaround that preserves the vulnerable flow without the code fix.
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
The root cause is CWE-601 (URL Redirection to Untrusted Site / 'Open Redirect') in the OAuth2 authorization-code flow implemented in frappe/utils/oauth.py. Before the fix, the OAuth 'state' parameter was a base64-encoded, client-visible JSON blob containing site, token, and redirect_to fields; on callback, login_oauth_user base64-decoded the attacker-controllable state, JSON-parsed it, and used its redirect_to value directly as the post-authentication navigation target - only checking that a token key was present, not that the state was server-issued. Because state is a request parameter that round-trips through the browser and the identity provider, an attacker could forge it. The upstream patch (PR 40962, commits 12568e2d, 1e0a3b94, 6ed8acd) replaces this with server-side state handling: create_oauth_state() mints a 32-character random token stored in the cache under the key frappe_oauth_login:<state> with a 600-second TTL, holding the intended redirect_to; consume_oauth_state() looks the token up and immediately deletes it, so tokens are single-use and unknown or replayed values resolve to None and now yield an 'Invalid Request' web response with HTTP status 417 instead of a redirect. The test suite explicitly verifies that forged tokens are rejected end-to-end and that legitimate tokens cannot be replayed. The affected CPE is cpe:2.3:a:frappe:frappe:*:*:*:*:*:*:*:* (the Frappe/ERPNext web framework package).
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:N/UI:A/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Network-reachable with no attacker privileges but requires the victim to click and complete login (UI:R); redirect sends the browser to a different security authority (S:C) with only low confidentiality impact and no integrity/availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Frappe is a full-stack web application framework. Prior to 15.116.0 and 16.29.0, the OAuth login flow uses an unsanitized client-controlled state parameter to select post-authentication navigation, allowing a crafted state value to redirect a user to an attacker-chosen location. This issue is fixed in versions 15.116.0 and 16.29.0.
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
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-98927
NVD
CVE.org
EPSS
GitHub
Exploit-DB