{"id":"CVE-2025-55002","kind":"vulnerability","aliases":["CVE-2025-55002"],"related":[],"title":"JupyterLab Desktop for macOS: local code can inherit granted file-access permissions","description":"JupyterLab Desktop is the cross-platform desktop application for JupyterLab. Prior to 4.6.2-1, JupyterLab Desktop for macOS shipped with Electron's RunAsNode fuse enabled, allowing ELECTRON_RUN_AS_NODE to execute arbitrary Node.js code in the application process. An attacker who can already execute code as the current user can therefore run code in JupyterLab Desktop's context and inherit TCC permissions previously granted to the application, including access to protected Documents, Desktop, or Downloads folders without another macOS prompt. Exploitation requires existing local code execution and prior TCC grants; it does not provide initial or remote code execution. Windows and Linux are not affected. This vulnerability is fixed in 4.6.2-1.","summary":"JupyterLab Desktop for macOS shipped with Electron's RunAsNode fuse enabled, so ELECTRON_RUN_AS_NODE can run arbitrary Node.js code inside the app. An attacker who already runs code as the user can borrow the app's macOS privacy grants, such as access to Documents, Desktop, or Downloads, without a new prompt.","severity":"medium","cvss":5.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["data-science","electron","jupyterlab-desktop","macos","package"],"not_affected_if":["linux","no-existing-local-code-execution","version-4.6.2-1-or-later","windows"],"how_to_check":"- Check the installed JupyterLab Desktop version on macOS in the app's About dialog or `Info.plist`; versions before `4.6.2-1` are affected.\n- Windows and Linux builds are not affected according to the description.","fix":"- JupyterLab Desktop for macOS: upgrade to `4.6.2-1`.","status":"open","published_at":"2026-11-06T21:17:04+00:00","first_seen_at":"2026-11-06T21:45:07+00:00","triaged_at":"2026-11-06T21:46:48+00:00","updated_at":"2026-11-06T21:46:48+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-06T21:46:48Z","model":"claude-haiku-5-5","output":{"fix":"- JupyterLab Desktop for macOS: upgrade to `4.6.2-1`.","reach":"local","title":"JupyterLab Desktop for macOS: local code can inherit granted file-access permissions","impact":"medium","summary":"JupyterLab Desktop for macOS shipped with Electron's RunAsNode fuse enabled, so ELECTRON_RUN_AS_NODE can run arbitrary Node.js code inside the app. An attacker who already runs code as the user can borrow the app's macOS privacy grants, such as access to Documents, Desktop, or Downloads, without a new prompt.","audience":"developers","category":"package","nicknames":[],"who_cares":["jupyterlab-desktop","macos","electron","data-science"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"local code gains app's macOS folder permissions without a prompt","analyst_note":"","how_to_check":"- Check the installed JupyterLab Desktop version on macOS in the app's About dialog or `Info.plist`; versions before `4.6.2-1` are affected.\n- Windows and Linux builds are not affected according to the description.","plain_action":"","needs_analyst":false,"not_affected_if":["windows","linux","version-4.6.2-1-or-later","no-existing-local-code-execution"],"who_is_affected":"Only macOS installs of JupyterLab Desktop before 4.6.2-1 are exposed, and only to an attacker who already runs code as the same user. Windows and Linux builds are not affected. Machines where the app has no protected-folder permissions granted gain little from this.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000741,"input_tokens":4422,"output_tokens":597,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-1':96C,195C '-2025':15A,18A '-55002':16A,19A '4.6.2':95C,194C 'access':12A,72B,152C 'affect':188C 'allow':108C 'alreadi':56B,126C 'anoth':161C 'app':52B,65B 'applic':90C,120C,150C 'arbitrari':47B,115C 'attack':54B,123C 'borrow':63B 'code':6A,49B,58B,117C,128C,136C,168C,181C 'context':141C 'cross':87C 'cross-platform':86C 'current':131C 'cve':14A,17A 'data':21B 'data-sci':20B 'desktop':2A,26B,30B,75B,83C,89C,98C,139C,156C 'document':74B,155C 'download':77B,158C 'electron':23B,35B,41B,103C,109C 'enabl':39B,107C 'execut':114C,127C,169C,182C 'exist':166C 'exploit':164C 'file':11A 'file-access':10A 'fix':192C 'folder':159C 'fuse':38B,106C 'grant':9A,69B,147C,173C 'includ':151C 'inherit':8A,143C 'initi':178C 'insid':50B 'jupyterlab':1A,25B,29B,82C,92C,97C,138C 'jupyterlab-desktop':24B 'linux':185C 'local':5A,167C 'maco':4A,27B,32B,67B,100C,162C 'new':80B 'node':44B,112C 'node.js':48B,116C 'packag':28B 'permiss':13A,145C 'platform':88C 'previous':146C 'prior':93C,171C 'privaci':68B 'process':121C 'prompt':81B,163C 'protect':154C 'provid':177C 'remot':180C 'requir':165C 'run':42B,46B,57B,110C,135C 'runasnod':37B,105C 'scienc':22B 'ship':33B,101C 'tcc':144C,172C 'therefor':134C 'user':61B,132C 'vulner':190C 'window':183C 'without':78B,160C","nicknames":[],"mitigations":[],"who_affected":"Only macOS installs of JupyterLab Desktop before 4.6.2-1 are exposed, and only to an attacker who already runs code as the same user. Windows and Linux builds are not affected. Machines where the app has no protected-folder permissions granted gain little from this.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["datascience","electron","jupyterlabdesktop","macos","medium","package"],"campaign_type":null,"search_a":"'-2025':15A,18A '-55002':16A,19A 'access':12A 'code':6A 'cve':14A,17A 'desktop':2A 'file':11A 'file-access':10A 'grant':9A 'inherit':8A 'jupyterlab':1A 'local':5A 'maco':4A 'permiss':13A","search_b":"'access':72B 'alreadi':56B 'app':52B,65B 'arbitrari':47B 'attack':54B 'borrow':63B 'code':49B,58B 'data':21B 'data-sci':20B 'desktop':26B,30B,75B 'document':74B 'download':77B 'electron':23B,35B,41B 'enabl':39B 'fuse':38B 'grant':69B 'insid':50B 'jupyterlab':25B,29B 'jupyterlab-desktop':24B 'maco':27B,32B,67B 'new':80B 'node':44B 'node.js':48B 'packag':28B 'privaci':68B 'prompt':81B 'run':42B,46B,57B 'runasnod':37B 'scienc':22B 'ship':33B 'user':61B 'without':78B","search_c":"'-1':96C,195C '4.6.2':95C,194C 'access':152C 'affect':188C 'allow':108C 'alreadi':126C 'anoth':161C 'applic':90C,120C,150C 'arbitrari':115C 'attack':123C 'code':117C,128C,136C,168C,181C 'context':141C 'cross':87C 'cross-platform':86C 'current':131C 'desktop':83C,89C,98C,139C,156C 'document':155C 'download':158C 'electron':103C,109C 'enabl':107C 'execut':114C,127C,169C,182C 'exist':166C 'exploit':164C 'fix':192C 'folder':159C 'fuse':106C 'grant':147C,173C 'includ':151C 'inherit':143C 'initi':178C 'jupyterlab':82C,92C,97C,138C 'linux':185C 'local':167C 'maco':100C,162C 'node':112C 'node.js':116C 'permiss':145C 'platform':88C 'previous':146C 'prior':93C,171C 'process':121C 'prompt':163C 'protect':154C 'provid':177C 'remot':180C 'requir':165C 'run':110C,135C 'runasnod':105C 'ship':101C 'tcc':144C,172C 'therefor':134C 'user':132C 'vulner':190C 'window':183C 'without':160C","first_public_at":"2026-07-24T09:12:48+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2025-55002","url":"https://nvd.nist.gov/vuln/detail/CVE-2025-55002","severity":null,"published_at":"2026-11-06T21:17:04+00:00","modified_at":"2026-11-06T21:17:04+00:00","first_seen_at":"2026-11-06T21:45:07+00:00","fetched_at":"2026-11-06T21:45:07+00:00","note":null}],"documents":[{"id":90288,"url":"https://github.com/jupyterlab/jupyterlab-desktop/commit/5ea4bf3323b0b7acc943a867522819a7064bec38","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":90286,"url":"https://github.com/jupyterlab/jupyterlab-desktop/releases/tag/v4.6.2-1","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":90290,"url":"https://github.com/jupyterlab/jupyterlab-desktop/security/advisories/GHSA-5c3f-5gj7-p9xh","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-07-24T09:12:48+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}