{"id":"CVE-2026-63395","kind":"vulnerability","aliases":["CVE-2026-63395"],"related":[],"title":"isomorphic-git: checkout follows symlinks and writes files outside the working tree","description":"isomorphic-git is a pure JavaScript implementation of Git for Node.js and browsers. Prior to 1.38.6, isomorphic-git's git.checkout writes new child paths through symlinked leading directory components without checking them. A malicious repository can first place a directory symlink and later replace the tree state with a child file beneath that path; the usual trigger is a clone followed by a later pull, while a single clone can trigger the issue when a symlink already exists or the consuming application accesses the tree. With Node fs on Linux or macOS, the operating system can resolve the write outside the working tree, permitting arbitrary host file writes and possible code execution. Node fs on Windows usually blocks the symlink plant without additional privilege, and browser or in-memory providers limit impact to their virtual filesystem and are affected only when they implement symlink creation and following. This issue is fixed in version 1.38.6.","summary":"isomorphic-git is a JavaScript Git library for Node.js and browsers. Before 1.38.6, git.checkout writes new files through symlinked directories without checking them, so a malicious repository can make a write land outside the working tree and possibly run code on Linux or macOS.","severity":"high","cvss":8.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["git-tooling","isomorphic-git","javascript","node.js","package"],"not_affected_if":["browser-or-memory-fs","trusted-repositories-only","upgraded-to-1.38.6","windows-node-fs"],"how_to_check":"- Run `npm ls isomorphic-git` in the project to find the installed version\n- Look for `isomorphic-git` in `package.json` and lockfiles, and check whether the app calls `git.checkout` or `git.pull` on untrusted repositories\n- Check whether the app uses Node fs on Linux or macOS (the affected setup), not Windows or browser/in-memory providers","fix":"- isomorphic-git: upgrade to `1.38.6` or later","status":"open","published_at":"2026-11-03T20:18:14+00:00","first_seen_at":"2026-11-03T20:49:22+00:00","triaged_at":"2026-11-03T20:49:47+00:00","updated_at":"2026-11-03T20:49:47+00:00","category":"package","confidence":0.75,"triage":{"at":"2026-11-03T20:49:47Z","model":"claude-haiku-5-5","output":{"fix":"- isomorphic-git: upgrade to `1.38.6` or later","reach":"internet","title":"isomorphic-git: checkout follows symlinks and writes files outside the working tree","impact":"high","summary":"isomorphic-git is a JavaScript Git library for Node.js and browsers. Before 1.38.6, git.checkout writes new files through symlinked directories without checking them, so a malicious repository can make a write land outside the working tree and possibly run code on Linux or macOS.","audience":"developers","category":"package","nicknames":[],"who_cares":["isomorphic-git","node.js","javascript","git-tooling"],"confidence":0.75,"fix_status":"available","needs_auth":"no","worst_case":"arbitrary host file writes and possible code execution on the server","analyst_note":"","how_to_check":"- Run `npm ls isomorphic-git` in the project to find the installed version\n- Look for `isomorphic-git` in `package.json` and lockfiles, and check whether the app calls `git.checkout` or `git.pull` on untrusted repositories\n- Check whether the app uses Node fs on Linux or macOS (the affected setup), not Windows or browser/in-memory providers","plain_action":"","needs_analyst":false,"not_affected_if":["windows-node-fs","browser-or-memory-fs","trusted-repositories-only","upgraded-to-1.38.6"],"who_is_affected":"Applications that use isomorphic-git with Node fs on Linux or macOS and check out repositories they do not fully trust, especially with clone followed by later pull. Windows Node fs usually blocks the symlink plant, and browser or in-memory providers are only affected if they implement symlink creation and following.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000746,"input_tokens":4353,"output_tokens":622,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':15A,18A '-63395':16A,19A '1.38.6':42B,90C,230C 'access':158C 'addit':198C 'affect':215C 'alreadi':152C 'applic':157C 'arbitrari':180C 'beneath':127C 'block':193C 'browser':40B,87C,201C 'check':51B,106C 'checkout':4A 'child':98C,125C 'clone':135C,144C 'code':69B,186C 'compon':104C 'consum':156C 'creation':221C 'cve':14A,17A 'directori':49B,103C,115C 'execut':187C 'exist':153C 'file':9A,46B,126C,182C 'filesystem':212C 'first':112C 'fix':227C 'follow':5A,136C,223C 'fs':163C,189C 'git':3A,21B,25B,31B,35B,76C,83C,93C 'git-tool':20B 'git.checkout':43B,95C 'host':181C 'impact':208C 'implement':81C,219C 'in-memori':203C 'isomorph':2A,24B,30B,75C,92C 'isomorphic-git':1A,23B,29B,74C,91C 'issu':148C,225C 'javascript':26B,34B,80C 'land':61B 'later':118C,139C 'lead':102C 'librari':36B 'limit':207C 'linux':71B,165C 'maco':73B,167C 'make':58B 'malici':55B,109C 'memori':205C 'new':45B,97C 'node':162C,188C 'node.js':27B,38B,85C 'oper':169C 'outsid':10A,62B,175C 'packag':28B 'path':99C,129C 'permit':179C 'place':113C 'plant':196C 'possibl':67B,185C 'prior':88C 'privileg':199C 'provid':206C 'pull':140C 'pure':79C 'replac':119C 'repositori':56B,110C 'resolv':172C 'run':68B 'singl':143C 'state':122C 'symlink':6A,48B,101C,116C,151C,195C,220C 'system':170C 'tool':22B 'tree':13A,65B,121C,160C,178C 'trigger':132C,146C 'usual':131C,192C 'version':229C 'virtual':211C 'window':191C 'without':50B,105C,197C 'work':12A,64B,177C 'write':8A,44B,60B,96C,174C,183C","nicknames":[],"mitigations":[],"who_affected":"Applications that use isomorphic-git with Node fs on Linux or macOS and check out repositories they do not fully trust, especially with clone followed by later pull. Windows Node fs usually blocks the symlink plant, and browser or in-memory providers are only affected if they implement symlink creation and following.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["gittooling","high","isomorphicgit","javascript","nodejs","package"],"campaign_type":null,"first_public_at":"2026-07-01T11:10:41+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-63395","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63395","severity":null,"published_at":"2026-11-03T20:18:14+00:00","modified_at":"2026-11-03T20:18:15+00:00","first_seen_at":"2026-11-03T20:49:22+00:00","fetched_at":"2026-11-03T20:49:22+00:00","note":null}],"documents":[{"id":60576,"url":"https://github.com/isomorphic-git/isomorphic-git/commit/823843d1cd19182df79bc907c767f5bcecb39a0b","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":60577,"url":"https://github.com/isomorphic-git/isomorphic-git/releases/tag/v1.38.6","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":60578,"url":"https://github.com/isomorphic-git/isomorphic-git/security/advisories/GHSA-9qw7-j9xw-fv9c","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-07-01T11:10:41+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}