{"id":"CVE-2026-123790","kind":"vulnerability","aliases":["CVE-2026-123790"],"related":[],"title":"ComfyUI-Easy-Use: unauthenticated path traversal lets attackers plant code in custom nodes","description":"ComfyUI-Easy-Use version 1.3.6 contains a path traversal vulnerability in the `save_preview()` handler for POST `/easyuse/save/{name}`. The handler checks the source directory before appending a user-supplied filename and allows the request to select the `custom_nodes` directory as a copy destination. An unauthenticated attacker who can reach the ComfyUI server can overwrite an installed custom node’s Python entry point with an uploaded file. When ComfyUI restarts and loads the modified node, the attacker’s code runs with the privileges of the ComfyUI process.","summary":"ComfyUI-Easy-Use 1.3.6 has a path traversal flaw in the save_preview() handler at POST /easyuse/save/{name}, which lets a request pick the custom_nodes directory as a copy destination. An unauthenticated attacker who can reach the ComfyUI server can overwrite an installed custom node's Python entry point, and the attacker's code runs with ComfyUI's privileges after a restart.","severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"ComfyUI-Easy-Use","fixed":[],"affected":"1.3.6","ecosystem":"pip"}],"ecosystems":[],"tags":["ai-tooling","comfyui","comfyui-easy-use","no-fix","python","self-hosted"],"not_affected_if":["auth-required","extension-not-installed","localhost-only","no-easy-use-node","server-not-reachable"],"how_to_check":"Look for ComfyUI/custom_nodes/ComfyUI-Easy-Use and read its version (1.3.6 is the confirmed vulnerable one; other versions are untested, not known safe). Check whether the ComfyUI port is reachable from untrusted networks (default bind is 127.0.0.1). Also check custom_nodes/*/__init__.py for unexpected changes and the input directory for stray .py files.","fix":"No fixed version known as of 2026-11-12: CERT/CC says the ComfyUI-Easy-Use maintainer could not be reached. Only 1.3.6 is confirmed vulnerable (by the reporter). Remove the extension or restrict network access to ComfyUI.","status":"open","published_at":"2026-11-12T15:17:46+00:00","first_seen_at":"2026-11-12T15:41:57+00:00","triaged_at":"2026-11-12T15:44:07+00:00","updated_at":"2026-11-12T15:44:45+00:00","category":"ai-tooling","confidence":0.8,"triage":{"at":"2026-11-12T15:44:07Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"internet","title":"ComfyUI-Easy-Use: unauthenticated path traversal lets attackers plant code in custom nodes","impact":"high","summary":"ComfyUI-Easy-Use 1.3.6 has a path traversal flaw in the save_preview() handler at POST /easyuse/save/{name}, which lets a request pick the custom_nodes directory as a copy destination. An unauthenticated attacker who can reach the ComfyUI server can overwrite an installed custom node's Python entry point, and the attacker's code runs with ComfyUI's privileges after a restart.","audience":"developers","category":"ai-tooling","nicknames":[],"who_cares":["comfyui","comfyui-easy-use","self-hosted","python"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"Attacker code runs with ComfyUI process privileges after restart","analyst_note":"Find the fixed version of ComfyUI-Easy-Use after 1.3.6 and the vendor advisory, if any, from the NVD entry.","how_to_check":"- Check whether the `ComfyUI-Easy-Use` custom node is installed and what version it is, for example in the `custom_nodes` directory of the ComfyUI install.\n- Check whether the ComfyUI server is reachable from untrusted networks, since the endpoint needs no login.\n- Check whether `/easyuse/save/` is reachable on the ComfyUI server.","plain_action":"","product_name":"","needs_analyst":true,"not_affected_if":["no-easy-use-node","server-not-reachable","auth-required"],"who_is_affected":"Teams running ComfyUI with the ComfyUI-Easy-Use custom node version 1.3.6 are exposed, especially if the ComfyUI server accepts connections from networks they do not control. The sources do not name a fixed version. Installations where the server is only reachable locally or behind authentication are less exposed, as the flaw needs no login only when the server is reachable.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.00083,"input_tokens":4652,"output_tokens":729,"severity_before":"unknown"},"analyst_status":"done","analyst_note":"Find the fixed version of ComfyUI-Easy-Use after 1.3.6 and the vendor advisory, if any, from the NVD entry.","search":"'-123790':17A,20A '-2026':16A,19A '/easyuse/save':57B,122C '1.3.6':44B,109C 'ai':26B 'ai-tool':25B 'allow':138C 'append':131C 'attack':9A,74B,93B,153C,183C 'check':126C 'code':11A,95B,185C 'comfyui':2A,22A,28B,30B,41B,79B,98B,105C,158C,175C,192C 'comfyui-easy-us':1A,29B,40B,104C 'comfyui-easy-use':21A 'contain':110C 'copi':70B,149C 'custom':13A,65B,85B,144C,164C 'cve':15A,18A 'destin':71B,150C 'directori':67B,129C,146C 'easi':3A,31B,42B,106C 'easy':23A 'entri':89B,168C 'file':173C 'filenam':136C 'fix':35B 'flaw':49B 'handler':54B,119C,125C 'host':39B 'instal':84B,163C 'let':8A,60B 'load':178C 'modifi':180C 'name':58B,123C 'no-fix':33B 'node':14A,66B,86B,145C,165C,181C 'overwrit':82B,161C 'path':6A,47B,112C 'pick':63B 'plant':10A 'point':90B,169C 'post':56B,121C 'preview':53B,118C 'privileg':100B,189C 'process':193C 'python':36B,88B,167C 'reach':77B,156C 'request':62B,140C 'restart':103B,176C 'run':96B,186C 'save':52B,117C 'select':142C 'self':38B 'self-host':37B 'server':80B,159C 'sourc':128C 'suppli':135C 'tool':27B 'travers':7A,48B,113C 'unauthent':5A,73B,152C 'upload':172C 'use':4A,24A,32B,43B,107C 'user':134C 'user-suppli':133C 'version':108C 'vulner':114C","nicknames":[],"mitigations":[],"who_affected":"Teams running ComfyUI with the ComfyUI-Easy-Use custom node (1.3.6 confirmed) where the ComfyUI server is reachable by untrusted users, since the endpoint needs no login. An attacker can upload a Python file to the input directory, copy it over an installed custom node's __init__.py with save_preview(), and get code execution at the next ComfyUI restart. Instances bound to localhost only, or behind network access controls, or without this extension can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"none","audience":"developers","plain_action":null,"pkeys":["comfyuieasyuse"],"ptokens":["comfyui","easy","use"],"labels":["aitooling","comfyui","comfyuieasyuse","critical","nofix","python","selfhosted"],"campaign_type":null,"search_a":"'-123790':17A,20A '-2026':16A,19A 'attack':9A 'code':11A 'comfyui':2A,22A 'comfyui-easy-us':1A 'comfyui-easy-use':21A 'custom':13A 'cve':15A,18A 'easi':3A 'easy':23A 'let':8A 'node':14A 'path':6A 'plant':10A 'travers':7A 'unauthent':5A 'use':4A,24A","search_b":"'/easyuse/save':57B '1.3.6':44B 'ai':26B 'ai-tool':25B 'attack':74B,93B 'code':95B 'comfyui':28B,30B,41B,79B,98B 'comfyui-easy-us':29B,40B 'copi':70B 'custom':65B,85B 'destin':71B 'directori':67B 'easi':31B,42B 'entri':89B 'fix':35B 'flaw':49B 'handler':54B 'host':39B 'instal':84B 'let':60B 'name':58B 'no-fix':33B 'node':66B,86B 'overwrit':82B 'path':47B 'pick':63B 'point':90B 'post':56B 'preview':53B 'privileg':100B 'python':36B,88B 'reach':77B 'request':62B 'restart':103B 'run':96B 'save':52B 'self':38B 'self-host':37B 'server':80B 'tool':27B 'travers':48B 'unauthent':73B 'use':32B,43B","search_c":"'/easyuse/save':122C '1.3.6':109C 'allow':138C 'append':131C 'attack':153C,183C 'check':126C 'code':185C 'comfyui':105C,158C,175C,192C 'comfyui-easy-us':104C 'contain':110C 'copi':149C 'custom':144C,164C 'destin':150C 'directori':129C,146C 'easi':106C 'entri':168C 'file':173C 'filenam':136C 'handler':119C,125C 'instal':163C 'load':178C 'modifi':180C 'name':123C 'node':145C,165C,181C 'overwrit':161C 'path':112C 'point':169C 'post':121C 'preview':118C 'privileg':189C 'process':193C 'python':167C 'reach':156C 'request':140C 'restart':176C 'run':186C 'save':117C 'select':142C 'server':159C 'sourc':128C 'suppli':135C 'travers':113C 'unauthent':152C 'upload':172C 'use':107C 'user':134C 'user-suppli':133C 'version':108C 'vulner':114C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T15:17:46+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-123790","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123790","severity":null,"published_at":"2026-11-12T15:17:46+00:00","modified_at":"2026-11-12T15:17:46+00:00","first_seen_at":"2026-11-12T15:41:57+00:00","fetched_at":"2026-11-12T15:41:57+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-123790:3747","url":"https://kb.cert.org/vuls/id/944667","severity":null,"published_at":"2026-11-12T15:44:45+00:00","modified_at":"2026-11-12T15:44:45+00:00","first_seen_at":"2026-11-12T15:44:45+00:00","fetched_at":"2026-11-12T15:44:45+00:00","note":"CERT/CC VU#944667 (published 2026-11-12) is the only source: no vendor advisory, maintainer unreachable, no fix, no PoC or exploitation reported. Not verified: CERT's page is not the maintainer's own words. NVD page was empty. X not checked.","cites":["https://kb.cert.org/vuls/id/944667"]}],"documents":[{"id":136117,"url":"https://kb.cert.org/vuls/id/944667","title":"VU#944667 ComfyUI-Easy-Use unauthenticated path traversal (CERT/CC)","kind":"advisory","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}