{"id":"CVE-2026-115718","kind":"vulnerability","aliases":["CVE-2026-115718"],"related":[],"title":"Frappe Builder: missing authorization lets any logged-in user spend LLM credits","description":"Frappe Builder versions 1.33.0 before1.36.0 contain a missing authorization vulnerability in the improve_prompt endpoint that allows any authenticated non-Guest session to invoke LLM completions without proper permission checks. Attackers can call the improve_prompt API to leverage the site owner's stored OpenRouter API key via resolve_api_key, consuming paid LLM credits and effectively turning the site into a free LLM proxy.","summary":"Frappe Builder's improve_prompt endpoint does not check permissions, so any authenticated non-Guest session can call it. An attacker can use the site owner's stored OpenRouter API key to make paid LLM calls.","severity":"medium","cvss":5.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["frappe","frappe-builder","openrouter","package","self-hosted"],"not_affected_if":["default-config","no-openrouter-key"],"how_to_check":"- Check the installed Frappe Builder version with `bench version` or the app list in the Frappe site, and see whether it is between `1.33.0` and `1.36.0`.\n- Confirm whether an OpenRouter API key is stored for the site (unknown from sources where it is kept).","fix":"- Upgrade Frappe Builder to `1.36.0` or later.\n- Rotate the stored OpenRouter API key if the site was running an affected version with non-Guest users.","status":"open","published_at":"2026-10-26T12:17:05+00:00","first_seen_at":"2026-10-26T12:29:53+00:00","triaged_at":"2026-10-26T12:31:44+00:00","updated_at":"2026-10-26T12:31:44+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-26T12:31:44Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Frappe Builder to `1.36.0` or later.\n- Rotate the stored OpenRouter API key if the site was running an affected version with non-Guest users.","reach":"internet","title":"Frappe Builder: missing authorization lets any logged-in user spend LLM credits","impact":"low","summary":"Frappe Builder's improve_prompt endpoint does not check permissions, so any authenticated non-Guest session can call it. An attacker can use the site owner's stored OpenRouter API key to make paid LLM calls.","category":"package","nicknames":[],"who_cares":["frappe","frappe-builder","self-hosted","openrouter"],"confidence":0.7,"needs_auth":"yes","worst_case":"Attackers spend the site owner's paid LLM credits through its stored key.","analyst_note":"","how_to_check":"- Check the installed Frappe Builder version with `bench version` or the app list in the Frappe site, and see whether it is between `1.33.0` and `1.36.0`.\n- Confirm whether an OpenRouter API key is stored for the site (unknown from sources where it is kept).","needs_analyst":false,"not_affected_if":["default-config","no-openrouter-key"],"who_is_affected":"Sites running Frappe Builder from 1.33.0 up to but not including 1.36.0 that have an OpenRouter API key configured and allow any logged-in user to reach the builder. Sites without a stored OpenRouter key or with no non-Guest accounts are less exposed. unknown whether other key providers are reachable through the same endpoint.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000627,"input_tokens":3374,"output_tokens":579,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-115718':16A,19A '-2026':15A,18A '1.33.0':69C 'allow':82C 'api':59B,103C,112C,116C 'attack':50B,97C 'authent':41B,84C 'author':4A,74C 'before1.36.0':70C 'builder':2A,23B,30B,67C 'call':47B,65B,99C 'check':37B,96C 'complet':92C 'consum':118C 'contain':71C 'credit':13A,121C 'cve':14A,17A 'effect':123C 'endpoint':34B,80C 'frapp':1A,20B,22B,29B,66C 'frappe-build':21B 'free':129C 'guest':44B,87C 'host':28B 'improv':32B,78C,101C 'invok':90C 'key':60B,113C,117C 'let':5A 'leverag':105C 'llm':12A,64B,91C,120C,130C 'log':8A 'logged-in':7A 'make':62B 'miss':3A,73C 'non':43B,86C 'non-guest':42B,85C 'openrout':24B,58B,111C 'owner':55B,108C 'packag':25B 'paid':63B,119C 'permiss':38B,95C 'prompt':33B,79C,102C 'proper':94C 'proxi':131C 'resolv':115C 'self':27B 'self-host':26B 'session':45B,88C 'site':54B,107C,126C 'spend':11A 'store':57B,110C 'turn':124C 'use':52B 'user':10A 'version':68C 'via':114C 'vulner':75C 'without':93C","nicknames":[],"mitigations":[],"who_affected":"Sites running Frappe Builder from 1.33.0 up to but not including 1.36.0 that have an OpenRouter API key configured and allow any logged-in user to reach the builder. Sites without a stored OpenRouter key or with no non-Guest accounts are less exposed. unknown whether other key providers are reachable through the same endpoint.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T12:17:05+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:L/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","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-115718","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115718","severity":null,"published_at":"2026-10-26T12:17:05+00:00","modified_at":"2026-10-26T12:17:05+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"}