{"id":"CVE-2026-32232","aliases":["EUVD-2026-11669","GHSA-2m67-cxxq-c3h8"],"status":"published","title":"ZeptoClaw: Path boundary checks bypass via symlink, TOCTOU, and hardlink","description":"ZeptoClaw is a personal AI assistant. Prior to 0.7.6, there is a Dangling Symlink Component Bypass, TOCTOU Between Validation and Use, and Hardlink Alias Bypass. This vulnerability is fixed in 0.7.6.","severity":{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00703,"percentile":0.53552,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-22","CWE-62"],"published":"2026-03-12T16:37:49Z","modified":"2026-10-28T02:30:25Z","fixes":[{"ecosystem":"crates.io","package":"zeptoclaw","fixed_in":["0.7.6"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"crates.io","package":"zeptoclaw","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.7.5"},{"fixed":"0.7.6"}]}]},{"source":"osv","ecosystem":"crates.io","package":"zeptoclaw","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.7.6"}]}]}],"products":[{"vendor":"aisarlabs","product":"zeptoclaw"},{"vendor":"qhkm","product":"zeptoclaw"}],"references":[{"url":"https://github.com/qhkm/zeptoclaw/security/advisories/GHSA-2m67-cxxq-c3h8","tags":["x_refsource_CONFIRM","Exploit","Patch","Vendor Advisory","advisory","web"]},{"url":"https://github.com/qhkm/zeptoclaw/commit/f50c17e11ae3e2d40c96730abac41974ef2ee2a8","tags":["x_refsource_MISC","Patch","fix","web"]},{"url":"https://github.com/qhkm/zeptoclaw/pull/324","tags":["web"]},{"url":"https://github.com/qhkm/zeptoclaw/commit/bf004a20d3687a0c1a9e052ec79536e30d6de134","tags":["web"]},{"url":"https://github.com/qhkm/zeptoclaw/releases/tag/v0.7.6","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-32232","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-2m67-cxxq-c3h8"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/32xxx/CVE-2026-32232.json","tags":["advisory"]},{"url":"https://github.com/qhkm/zeptoclaw","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-32232","title":"ZeptoClaw: Path boundary checks bypass via symlink, TOCTOU, and hardlink","description":"ZeptoClaw is a personal AI assistant. Prior to 0.7.6, there is a Dangling Symlink Component Bypass, TOCTOU Between Validation and Use, and Hardlink Alias Bypass. This vulnerability is fixed in 0.7.6.","status":"published","published":"2026-03-12T18:24:35.225Z","modified":"2026-03-12T20:46:56.857Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P","level":"high","assessor":"cna"}],"cwes":["CWE-22","CWE-62"],"updated_at":"2026-11-02T14:19:57.47301Z"}],"euvd":[{"id":"EUVD-2026-11669","description":"ZeptoClaw is a personal AI assistant. Prior to 0.7.6, there is a Dangling Symlink Component Bypass, TOCTOU Between Validation and Use, and Hardlink Alias Bypass. This vulnerability is fixed in 0.7.6.","status":"published","published":"2026-03-12T18:24:35Z","modified":"2026-03-12T20:46:56Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"updated_at":"2026-11-02T19:25:35.389351Z"}],"ghsa":[{"id":"GHSA-2m67-cxxq-c3h8","title":"ZeptoClaw: Path boundary checks bypass via symlink, TOCTOU, and hardlink","description":"### Summary\nWorkspace boundary enforcement currently has three related bypass risks. This issue tracks fixing all three in one pull request.\n\n### Details\n\n#### R1 - Dangling Symlink Component Bypass\n- What happens: Path validation can miss dangling symlink components during traversal checks.\n- Why it matters: A symlink that is unresolved at validation time can later resolve to an external location.\n- Impact: Read and write operations may escape workspace boundaries.\n- Affected area: src/security/path.rs (check_symlink_escape).\n\n#### R2 - TOCTOU Between Validation and Use\n- What happens: The path is validated first, then used later for filesystem operations.\n- Why it matters: A concurrent filesystem change can swap path components after validation but before open/write.\n- Impact: Race-based workspace escape is possible.\n- Affected area: Filesystem and file-consuming tools that call validate_path_in_workspace before I/O.\n\n#### R3 - Hardlink Alias Bypass\n- What happens: A file inside workspace can be a hardlink to an inode outside the intended workspace trust boundary.\n- Why it matters: Prefix and symlink checks can pass while data access still mutates or reads external content.\n- Impact: Policy bypass for read/write operations.\n- Affected area: Any tool that reads or writes via validated paths.\n\n#### Risk Matrix\n\n| ID | Risk | Severity | Likelihood | Impact |\n|---|---|---|---|---|\n| R1 | Dangling symlink component bypass | High | Medium | Workspace boundary escape for read/write |\n| R2 | Validate/use TOCTOU race | High | Medium | Race-based boundary escape during file I/O |\n| R3 | Hardlink alias bypass | Medium | Low-Medium | External inode read/write through in-workspace path |\n\n### PoC\n\n#### R1 - Dangling symlink component bypass\n1. Create a symlink inside workspace pointing to a missing target.\n2. Validate a path traversing that symlink.\n3. Create the target directory outside workspace after validation.\n4. Perform file operation and observe potential boundary escape if not fail-closed.\n\n#### R2 - TOCTOU between validation and use\n1. Validate a candidate in-workspace path.\n2. Before open/write, replace an intermediate component with a link to external location.\n3. Continue with the file operation.\n4. Observe boundary escape if operation trusts only stale validation result.\n\n#### R3 - Hardlink alias bypass\n1. Place a hardlink inside workspace that points to an external inode.\n2. Validate the in-workspace hardlink path.\n3. Read or write through this path.\n4. Observe external inode access through a path that appears in-scope.\n\n### Impacts\nUnauthorized cross path boundary\n\n## Credit\n[@zpbrent](https://github.com/zpbrent)\n\n### Patch\n[f50c17e11ae3e2d40c96730abac41974ef2ee2a8](https://github.com/qhkm/zeptoclaw/commit/f50c17e11ae3e2d40c96730abac41974ef2ee2a8)","status":"published","published":"2026-03-12T16:37:49Z","modified":"2026-03-13T13:36:01Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"cwes":["CWE-22","CWE-62"],"updated_at":"2026-11-02T14:39:35.644357Z"}],"nvd":[{"id":"CVE-2026-32232","description":"ZeptoClaw is a personal AI assistant. Prior to 0.7.6, there is a Dangling Symlink Component Bypass, TOCTOU Between Validation and Use, and Hardlink Alias Bypass. This vulnerability is fixed in 0.7.6.","status":"published","published":"2026-03-12T19:16:17.263Z","modified":"2026-06-17T10:35:23.66Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P/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","level":"high","assessor":"secondary"},{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary"}],"cwes":["CWE-22","CWE-62"],"updated_at":"2026-11-02T14:12:09.358914Z"}],"osv":[{"id":"CVE-2026-32232","title":"ZeptoClaw: Path boundary checks bypass via symlink, TOCTOU, and hardlink","description":"ZeptoClaw is a personal AI assistant. Prior to 0.7.6, there is a Dangling Symlink Component Bypass, TOCTOU Between Validation and Use, and Hardlink Alias Bypass. This vulnerability is fixed in 0.7.6.","status":"published","published":"2026-03-12T18:24:35.225Z","modified":"2026-10-28T02:30:25.469289747Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"cwes":["CWE-22","CWE-62"],"updated_at":"2026-11-02T15:45:01.218144Z"},{"id":"GHSA-2m67-cxxq-c3h8","title":"ZeptoClaw: Path boundary checks bypass via symlink, TOCTOU, and hardlink","description":"### Summary\nWorkspace boundary enforcement currently has three related bypass risks. This issue tracks fixing all three in one pull request.\n\n### Details\n\n#### R1 - Dangling Symlink Component Bypass\n- What happens: Path validation can miss dangling symlink components during traversal checks.\n- Why it matters: A symlink that is unresolved at validation time can later resolve to an external location.\n- Impact: Read and write operations may escape workspace boundaries.\n- Affected area: src/security/path.rs (check_symlink_escape).\n\n#### R2 - TOCTOU Between Validation and Use\n- What happens: The path is validated first, then used later for filesystem operations.\n- Why it matters: A concurrent filesystem change can swap path components after validation but before open/write.\n- Impact: Race-based workspace escape is possible.\n- Affected area: Filesystem and file-consuming tools that call validate_path_in_workspace before I/O.\n\n#### R3 - Hardlink Alias Bypass\n- What happens: A file inside workspace can be a hardlink to an inode outside the intended workspace trust boundary.\n- Why it matters: Prefix and symlink checks can pass while data access still mutates or reads external content.\n- Impact: Policy bypass for read/write operations.\n- Affected area: Any tool that reads or writes via validated paths.\n\n#### Risk Matrix\n\n| ID | Risk | Severity | Likelihood | Impact |\n|---|---|---|---|---|\n| R1 | Dangling symlink component bypass | High | Medium | Workspace boundary escape for read/write |\n| R2 | Validate/use TOCTOU race | High | Medium | Race-based boundary escape during file I/O |\n| R3 | Hardlink alias bypass | Medium | Low-Medium | External inode read/write through in-workspace path |\n\n### PoC\n\n#### R1 - Dangling symlink component bypass\n1. Create a symlink inside workspace pointing to a missing target.\n2. Validate a path traversing that symlink.\n3. Create the target directory outside workspace after validation.\n4. Perform file operation and observe potential boundary escape if not fail-closed.\n\n#### R2 - TOCTOU between validation and use\n1. Validate a candidate in-workspace path.\n2. Before open/write, replace an intermediate component with a link to external location.\n3. Continue with the file operation.\n4. Observe boundary escape if operation trusts only stale validation result.\n\n#### R3 - Hardlink alias bypass\n1. Place a hardlink inside workspace that points to an external inode.\n2. Validate the in-workspace hardlink path.\n3. Read or write through this path.\n4. Observe external inode access through a path that appears in-scope.\n\n### Impacts\nUnauthorized cross path boundary\n\n## Credit\n[@zpbrent](https://github.com/zpbrent)\n\n### Patch\n[f50c17e11ae3e2d40c96730abac41974ef2ee2a8](https://github.com/qhkm/zeptoclaw/commit/f50c17e11ae3e2d40c96730abac41974ef2ee2a8)","status":"published","published":"2026-03-12T16:37:49Z","modified":"2026-03-14T01:56:22.45098Z","cvss":[{"version":"4.0","score":8.8,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"cwes":["CWE-22","CWE-62"],"updated_at":"2026-11-02T15:46:34.338541Z"}]}}
