Severity by source
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/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
Local access and low privileges required to invoke the function; no scope change; file read/write impact bounded by process user permissions.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
Lifecycle Timeline
4DescriptionCVE.org
A flaw has been found in abracadabra50 claude-sesh 1.0.0. This issue affects the function getEnrichedData/enrichSession of the file src/services/enricher.ts. Executing a manipulation of the argument sessionId can lead to path traversal. The attack needs to be launched locally. This patch is called 786c9d74800e6d0858b65778f31beb71b3983a50. Applying a patch is advised to resolve this issue.
AnalysisAI
Path traversal in claude-sesh 1.0.0 allows a local attacker with low privileges to escape the intended enrichment directory by supplying a crafted sessionId containing directory traversal sequences to the getEnrichedData or enrichSession functions in src/services/enricher.ts. The unvalidated sessionId is passed directly to path.join(), permitting reads and writes to arbitrary files accessible by the process user account. A proof-of-concept is indicated by the E:P threat metric in the provided CVSS 4.0 vector; no active exploitation or CISA KEV listing is confirmed.
Technical ContextAI
claude-sesh (CPE: cpe:2.3:a:abracadabra50:claude-sesh:*:*:*:*:*:*:*:*) is a TypeScript/Node.js session enrichment tool for Claude Code, previously using the Hono web framework (removed in the patching commit). The enricher service stores JSON blobs in a designated ENRICHED_DIR and constructed file paths via path.join(ENRICHED_DIR, ${sessionId}.json) without any sanitization. CWE-22 (Improper Limitation of a Pathname to a Restricted Directory) applies directly: Node.js path.join() does not strip traversal sequences, so a sessionId of '../../etc/shadow' resolves cleanly outside ENRICHED_DIR. The patch introduces a SAFE_SESSION_ID allowlist regex (/^[A-Za-z0-9_-]+$/) and a secondary path.resolve() plus dirname comparison in a new enrichedPathFor() helper, replacing all three raw path.join() call sites in the file.
RemediationAI
Apply the upstream fix via commit 786c9d74800e6d0858b65778f31beb71b3983a50, available at https://github.com/abracadabra50/claude-sesh/commit/786c9d74800e6d0858b65778f31beb71b3983a50. The commit replaces all raw path.join() calls in src/services/enricher.ts with the new enrichedPathFor() helper, which enforces an alphanumeric-plus-hyphen allowlist and a path.resolve() boundary check. Note that no tagged release version incorporating this fix has been independently confirmed - the fix exists as a commit only, so users should pin to or cherry-pick this commit directly. As a compensating control prior to patching, restrict OS-level permissions on ENRICHED_DIR so the Node.js process user cannot read or write to sensitive paths outside it, and limit local shell access to the host running claude-sesh to trusted operators only. Disabling or firewalling whatever local interface exposes the enrichSession endpoint is also advisable if operationally feasible, with the trade-off of disabling session enrichment functionality.
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-54858
GHSA-rm8c-j3vq-fv9j