{"id":"CVE-2026-115717","kind":"vulnerability","aliases":["CVE-2026-115717"],"related":[],"title":"Frappe Builder: convert_to_webp lets users make the server fetch internal URLs","description":"Frappe Builder versions before 1.36.1 contain a server-side request forgery vulnerability in the convert_to_webp API endpoint, which lacks the has_page_write access control applied to similar asset-ingest handlers and performs an unprotected requests.get call that follows redirects without re-validating resolved IP addresses. A low-privilege authenticated user can supply an image_url pointing to an internal address or use DNS rebinding and open redirects to make the server fetch internal network resources or cloud metadata endpoints, with successful image responses saved to a world-readable /files/ URL enabling data exfiltration or blind probing of internal hosts.","summary":"Frappe Builder versions before 1.36.1 have an API endpoint, convert_to_webp, that fetches a user-supplied image URL without the write-permission check used by similar handlers and without re-checking redirect targets. An authenticated low-privilege user can make the server request internal hosts or cloud metadata endpoints and read the saved response from a publicly readable /files/ URL.","severity":"high","cvss":7.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cloud","frappe","frappe-builder","package","self-hosted"],"not_affected_if":["already-on-1.36.1-or-later","builder-not-installed"],"how_to_check":"- Check the installed Frappe Builder version (`bench version` or the app's `pyproject.toml`) and confirm it is below `1.36.1`\n- Look for the `convert_to_webp` function in the builder app and check whether it calls `has_page_write` before `requests.get`\n- Review web server logs for outbound requests to internal addresses or `169.254.169.254` triggered by the convert_to_webp endpoint","fix":"- Upgrade Frappe Builder to `1.36.1` or later\n- Until upgraded, restrict who can reach the convert_to_webp endpoint and block outbound requests from the app server to internal ranges and cloud metadata addresses","status":"open","published_at":"2026-10-26T12:17:04+00:00","first_seen_at":"2026-10-26T12:29:53+00:00","triaged_at":"2026-10-26T12:31:40+00:00","updated_at":"2026-10-26T12:31:40+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-26T12:31:40Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Frappe Builder to `1.36.1` or later\n- Until upgraded, restrict who can reach the convert_to_webp endpoint and block outbound requests from the app server to internal ranges and cloud metadata addresses","reach":"internet","title":"Frappe Builder: convert_to_webp lets users make the server fetch internal URLs","impact":"medium","summary":"Frappe Builder versions before 1.36.1 have an API endpoint, convert_to_webp, that fetches a user-supplied image URL without the write-permission check used by similar handlers and without re-checking redirect targets. An authenticated low-privilege user can make the server request internal hosts or cloud metadata endpoints and read the saved response from a publicly readable /files/ URL.","category":"package","nicknames":[],"who_cares":["frappe","frappe-builder","self-hosted","cloud"],"confidence":0.7,"needs_auth":"yes","worst_case":"Server fetches internal resources and exposes responses via public files URL","analyst_note":"","how_to_check":"- Check the installed Frappe Builder version (`bench version` or the app's `pyproject.toml`) and confirm it is below `1.36.1`\n- Look for the `convert_to_webp` function in the builder app and check whether it calls `has_page_write` before `requests.get`\n- Review web server logs for outbound requests to internal addresses or `169.254.169.254` triggered by the convert_to_webp endpoint","needs_analyst":false,"not_affected_if":["already-on-1.36.1-or-later","builder-not-installed"],"who_is_affected":"Sites running Frappe Builder before 1.36.1 where users have a logged-in account. Exposure depends on the server being able to reach internal networks or cloud metadata services, which is common for self-hosted and cloud-hosted deployments. Sites without Frappe Builder installed, or already on 1.36.1 or later, can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000693,"input_tokens":3433,"output_tokens":700,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-115717':16A,19A '-2026':15A,18A '/files':92B,190C '1.36.1':33B,98C 'access':120C 'address':144C,160C 'api':36B,112C 'appli':122C 'asset':126C 'asset-ingest':125C 'authent':67B,149C 'blind':196C 'builder':2A,24B,30B,95C 'call':134C 'check':54B,63B 'cloud':20B,80B,177C 'contain':99C 'control':121C 'convert':3A,38B,109C 'cve':14A,17A 'data':193C 'dns':163C 'enabl':192C 'endpoint':37B,82B,113C,179C 'exfiltr':194C 'fetch':11A,42B,172C 'follow':136C 'forgeri':105C 'frapp':1A,21B,23B,29B,94C 'frappe-build':22B 'handler':58B,128C 'host':28B,78B,200C 'imag':47B,154C,182C 'ingest':127C 'intern':12A,77B,159C,173C,199C 'ip':143C 'lack':115C 'let':6A 'low':69B,147C 'low-privileg':68B,146C 'make':8A,73B,169C 'metadata':81B,178C 'network':174C 'open':166C 'packag':25B 'page':118C 'perform':130C 'permiss':53B 'point':156C 'privileg':70B,148C 'probe':197C 'public':90B 're':62B,140C 're-check':61B 're-valid':139C 'read':84B 'readabl':91B,189C 'rebind':164C 'redirect':64B,137C,167C 'request':76B,104C 'requests.get':133C 'resolv':142C 'resourc':175C 'respons':87B,183C 'save':86B,184C 'self':27B 'self-host':26B 'server':10A,75B,102C,171C 'server-sid':101C 'side':103C 'similar':57B,124C 'success':181C 'suppli':46B,152C 'target':65B 'unprotect':132C 'url':13A,48B,93B,155C,191C 'use':55B,162C 'user':7A,45B,71B,150C 'user-suppli':44B 'valid':141C 'version':31B,96C 'vulner':106C 'webp':5A,40B,111C 'without':49B,60B,138C 'world':188C 'world-read':187C 'write':52B,119C 'write-permiss':51B","nicknames":[],"mitigations":[],"who_affected":"Sites running Frappe Builder before 1.36.1 where users have a logged-in account. Exposure depends on the server being able to reach internal networks or cloud metadata services, which is common for self-hosted and cloud-hosted deployments. Sites without Frappe Builder installed, or already on 1.36.1 or later, can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T12:17:04+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/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","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-115717","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115717","severity":null,"published_at":"2026-10-26T12:17:04+00:00","modified_at":"2026-10-26T12:17:04+00:00","first_seen_at":"2026-10-26T12:29:53+00:00","fetched_at":"2026-10-26T12:29:53+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}