{"id":"GHSA-5xjx-9qx6-jcrv","revision":null,"records":[{"revision":"b981cd2d04754c1b93cf2be9d3308f02","observedAt":"2026-11-03T22:57:17.07+00:00","statement":{"source":"cve-program","id":"CVE-2026-88968","aliases":[],"title":"Claude Code: TOCTOU Race in Edit Tool Allows File Writes Outside the Workspace","description":"Claude Code is an agentic coding tool. Prior to 2.1.251, the Edit tool validates a target using pathname and symlink resolution that is not bound to the underlying directory inode or file descriptor. On macOS, attacker-controlled code running in the Bash sandbox can atomically replace an in-workspace parent directory with a symlink after validation, causing the unsandboxed Edit implementation to overwrite a user-writable file outside the workspace. Exploitation requires attacker-controlled code to run inside the sandbox, such as from a malicious repository or dependency script. This issue is fixed in version 2.1.251.","state":0,"publishedAt":"2026-11-03T20:08:47.362+00:00","modifiedAt":"2026-11-03T21:29:17.279+00:00","affected":[{"ecosystem":"Vendor product","name":"claude-code","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"anthropics\",\n                    \"product\": \"claude-code\",\n                    \"versions\": [\n                        {\n                            \"version\": \"< 2.1.251\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":7.7,"severity":"HIGH"}],"references":["https://github.com/anthropics/claude-code/security/advisories/GHSA-5xjx-9qx6-jcrv","https://github.com/anthropics/claude-code/releases/tag/v2.1.251"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-88968","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-88968","identifiers":["CVE-2026-88968"]},"retained":false,"historicalAffected":[]},{"revision":"dfd03d62cf8c428c9420fb62d6770659","observedAt":"2026-11-14T07:04:00.369+00:00","statement":{"source":"euvd","id":"EUVD-2026-116209","aliases":["CVE-2026-88968","GHSA-5xjx-9qx6-jcrv"],"title":"Claude Code is an agentic coding tool. Prior to 2.1.251, the Edit tool validates a target using pathname and symlink resolution that is not bound to the underlying directory inode or file descriptor. On macOS, attacker-controlled code runni…","description":"Claude Code is an agentic coding tool. Prior to 2.1.251, the Edit tool validates a target using pathname and symlink resolution that is not bound to the underlying directory inode or file descriptor. On macOS, attacker-controlled code running in the Bash sandbox can atomically replace an in-workspace parent directory with a symlink after validation, causing the unsandboxed Edit implementation to overwrite a user-writable file outside the workspace. Exploitation requires attacker-controlled code to run inside the sandbox, such as from a malicious repository or dependency script. This issue is fixed in version 2.1.251.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":7.7,"severity":null}],"references":["https://github.com/anthropics/claude-code/security/advisories/GHSA-5xjx-9qx6-jcrv","https://github.com/anthropics/claude-code/releases/tag/v2.1.251"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-116209","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Nov 3, 2026, 8:08:47 PM","dateUpdated":"Nov 3, 2026, 9:29:17 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-116209","identifiers":["EUVD-2026-116209","CVE-2026-88968","GHSA-5xjx-9qx6-jcrv"]},"retained":false,"historicalAffected":[]},{"revision":"9132c3146f01437ebc7ffeb71b53f6cc","observedAt":"2026-11-10T00:04:26.048+00:00","statement":{"source":"nvd","id":"CVE-2026-88968","aliases":[],"title":"Claude Code is an agentic coding tool. Prior to 2.1.251, the Edit tool validates a target using pathname and symlink resolution that is not bound to the underlying directory inode or file descriptor. On macOS, attacker-controlled code runni…","description":"Claude Code is an agentic coding tool. Prior to 2.1.251, the Edit tool validates a target using pathname and symlink resolution that is not bound to the underlying directory inode or file descriptor. On macOS, attacker-controlled code running in the Bash sandbox can atomically replace an in-workspace parent directory with a symlink after validation, causing the unsandboxed Edit implementation to overwrite a user-writable file outside the workspace. Exploitation requires attacker-controlled code to run inside the sandbox, such as from a malicious repository or dependency script. This issue is fixed in version 2.1.251.","state":0,"publishedAt":"2026-11-03T20:18:19.01+00:00","modifiedAt":"2026-11-03T22:19:50.413+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · security-advisories@github.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/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","score":7.7,"severity":"HIGH"}],"references":["https://github.com/anthropics/claude-code/releases/tag/v2.1.251","https://github.com/anthropics/claude-code/security/advisories/GHSA-5xjx-9qx6-jcrv"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-88968","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-59","CWE-367"],"productCriteria":[],"sourceDates":{"published":"2026-11-03T20:18:19.010","lastModified":"2026-11-03T22:19:50.413"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-88968","identifiers":["CVE-2026-88968"]},"retained":false,"historicalAffected":[]},{"revision":"a0675248e0b245edb443cdf617f9c1a8","observedAt":"2026-11-10T00:02:23.885+00:00","statement":{"source":"osv","id":"GHSA-5xjx-9qx6-jcrv","aliases":["CVE-2026-88968"],"title":"Claude Code: TOCTOU Race in Edit Tool Allows File Writes Outside the Workspace","description":"Claude Code validated Edit tool targets using point-in-time pathname and symlink resolution that was not bound to the underlying directory inodes or file descriptors. On macOS, a process running inside Claude Code's Bash sandbox could exploit the resulting time-of-check to time-of-use window by atomically swapping an in-workspace parent directory with a symlink after validation completed, causing the unsandboxed Edit implementation to overwrite an attacker-selected user-writable file outside the workspace. Exploiting this required the ability to run attacker-controlled code inside the sandbox, such as through a malicious repository or dependency script.\n\nUsers on standard Claude Code auto-update have received this fix automatically. Users performing manual updates are advised to update to the latest version.\n\nClaude Code thanks hackerone.com/mahoraga007 (Sunder Singh) for reporting this issue.","state":0,"publishedAt":"2026-11-09T22:42:03+00:00","modifiedAt":"2026-11-09T23:00:03.851746+00:00","affected":[{"ecosystem":"npm","name":"@anthropic-ai/claude-code","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.1.251"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/anthropics/claude-code/security/advisories/GHSA-5xjx-9qx6-jcrv","https://nvd.nist.gov/vuln/detail/CVE-2026-88968","https://github.com/anthropics/claude-code","https://github.com/anthropics/claude-code/releases/tag/v2.1.251"],"sourceUrl":"https://github.com/advisories/GHSA-5xjx-9qx6-jcrv","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-5xjx-9qx6-jcrv","identifiers":["GHSA-5xjx-9qx6-jcrv","CVE-2026-88968"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-15T01:46:55.4086044+00:00","complete":true,"records":1781,"lastAttemptAt":"2026-11-15T01:46:55.4086044+00:00","lastSuccessAt":"2026-11-15T01:46:55.6001265+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.6001272+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-7de4d7559a5263003f03d9f70577ab06f92ba4178309f26fce53e22a4a959294-6d7324039073d7c231ba830a084e1f9dd49e3546760dbb1c1c5420bea3fe5eb4","complete":true,"records":425760,"lastAttemptAt":"2026-11-15T01:44:29.7063286+00:00","lastSuccessAt":"2026-11-15T01:44:29.696786+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:44:29.7063286+00:00","snapshotPublishedAt":"2026-11-15T01:24:40+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-7d2e436ba5044010b7284865b03901df","complete":false,"records":13821,"lastAttemptAt":"2026-11-15T01:56:11.6575512+00:00","lastSuccessAt":"2026-11-15T01:56:10.64+00:00","error":"20 identifier lookups failed; latest failures include AccessDenied (HTTP 403). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-15T01:56:10.64+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13854,"expectedIdentifiers":13874,"failedIdentifiers":20},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-15T01:46:55.4086044+00:00","complete":true,"records":1125,"lastAttemptAt":"2026-11-15T01:46:55.4086044+00:00","lastSuccessAt":"2026-11-15T01:46:55.6012797+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.6012836+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-a2d6726fa6984ccea1afed1a3e59d87e","complete":false,"records":13833,"lastAttemptAt":"2026-11-15T01:47:00.8199552+00:00","lastSuccessAt":"2026-11-15T00:31:15.078+00:00","error":"13 identifier lookups failed; latest failures include HttpError (HTTP 503). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-15T00:31:15.078+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13861,"expectedIdentifiers":13874,"failedIdentifiers":13},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-64eea06dbd27de8464d5dbce1b78cc794cc59e2d901516ae0d3ea76e624cdae0","complete":true,"records":9955,"lastAttemptAt":"2026-11-15T01:46:55.2267037+00:00","lastSuccessAt":"2026-11-14T13:57:23.1208135+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.2267037+00:00","snapshotPublishedAt":"2026-11-14T13:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-f4424d7d4861b1af1404bd15abcb83f295dcd003412a9340ca99dc8200aa148a","complete":true,"records":2014,"lastAttemptAt":"2026-11-15T01:44:50.4630562+00:00","lastSuccessAt":"2026-11-13T19:57:08.2864435+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:44:50.4630562+00:00","snapshotPublishedAt":"2026-11-13T19:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-012aff9b2fb349d53e2c4bace6ca57956b6f5f9d82c1dc9fdc1c9b3c738f8977","complete":true,"records":3148,"lastAttemptAt":"2026-11-15T01:46:55.3300683+00:00","lastSuccessAt":"2026-11-14T04:57:03.8279646+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.3300683+00:00","snapshotPublishedAt":"2026-11-14T03:02:50+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-deb41cb32d3b3d67de7960b1647d789a5218551d33a54a4b027ba315bcba590f","complete":true,"records":232473,"lastAttemptAt":"2026-11-15T01:46:55.093583+00:00","lastSuccessAt":"2026-11-15T01:46:53.6377511+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.093583+00:00","snapshotPublishedAt":"2026-11-15T00:48:23+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}