CVE-2026-115720: Frappe Builder before 1.36.1 SSRF Guard Bypass via HTTP Redirect
Frappe Builder before 1.36.1 contains a server-side request forgery vulnerability in builder/api.py where the assertnotprivateurl() guard validates only the initial hostname before callers invoke requests.get(url) with default redirect-following and no IP pinning, allowing an attacker-supplied public URL to HTTP-redirect to internal or link-local addresses the guard never validated. An authenticated attacker can call the converttowebp endpoint, which lacks a permission decorator, with a URL that redirects to internal targets such as cloud metadata services to perform SSRF, internal port scanning, or trigger a request-hang denial of service due to the missing timeout.
Affected Software
Event History
Frequently Asked Questions
Who can exploit this issue?
An authenticated attacker can exploit it by calling the convert_to_webp endpoint. The endpoint lacks a permission decorator, so the described access requirement is authentication rather than a specific permission.
What conditions make an installation vulnerable?
Frappe Builder versions before 1.36.1 are affected when an attacker can supply a public URL that redirects to an internal or link-local address. The guard validates only the initial hostname, while the subsequent request follows redirects without validating the redirect destination.
What could an attacker access or do through the SSRF?
The issue can be used to send requests to internal targets, including cloud metadata services, and to perform internal port scanning. A request to a target that does not respond can also cause a denial of service because the request has no timeout.
How can teams determine whether they are affected?
Check whether the deployed Frappe Builder version is earlier than 1.36.1. Also review whether authenticated users can reach convert_to_webp and provide externally hosted URLs that could redirect to internal or link-local addresses.