CVE-2026-23745
Medium · 6.1CVSS
6.1
EPSS
0.4%
Published
Jan 16, 2026
CISA due date
—
Cloudanix analysis
A malicious archive could make affected software write or link files outside the folder it was supposed to use, potentially damaging files or changing how an application runs.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Path Traversal
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
node-tar versions 7.5.2 and earlier do not correctly sanitize the linkpath field for tar archive hardlink and symbolic link entries when extracting archives with preservePaths set to false, which is intended to keep extraction confined to the chosen destination directory. A crafted archive can use an absolute or otherwise unsafe link target to create links that point outside the extraction root. This can result in arbitrary file overwrite through hardlink behavior and symlink poisoning where later file operations follow attacker-controlled links to sensitive locations outside the intended directory.
Why it matters to the business
Applications, build systems, package managers, CI/CD jobs, developer tools, or services that extract untrusted tar archives with affected node-tar versions may allow an attacker-supplied archive to overwrite files or plant dangerous links outside the expected working directory. The most likely consequences are corrupted application files, poisoned build artifacts, altered configuration, credential exposure, or a path to code execution if overwritten files are later executed or loaded. The issue is not listed in CISA KEV, has low EPSS, and requires user or application interaction with a malicious archive, but node-tar is commonly used in JavaScript tooling, so indirect exposure through dependencies should be treated seriously.
How an attack unfolds
An attacker prepares a tar archive containing Link or SymbolicLink entries whose linkpath points to an absolute path or another location outside the intended extraction directory. The attacker then gets a vulnerable application, developer workflow, or automation process to extract that archive using node-tar 7.5.2 or earlier. Even when preservePaths is false, the vulnerable code sanitizes the archive entry path but fails to apply equivalent restrictions to the link target. As a result, extraction can create a hardlink or symlink that escapes the destination directory. The attacker can then include additional archive entries or rely on subsequent application behavior to write through the link, causing files outside the extraction root to be overwritten or redirecting future reads/writes to attacker-selected locations. Impact depends heavily on the privileges of the extracting process and which files are reachable or later consumed.
How to fix it
Upgrade node-tar to version 7.5.3 or later wherever it is used directly or transitively. For source builds from isaacs/node-tar, ensure the code includes the fix at commit 03138441b238f48070fb22824b2529c445bc70c7 or a later release containing it. Refresh lockfiles and rebuild containers or deployed artifacts so the updated package is actually present at runtime. As defense in depth, do not extract untrusted archives in privileged directories, run extraction in a temporary sandbox with least privilege, block absolute link targets and parent-directory traversal in archive validation, reject archives containing hardlinks or symlinks when they are not required, and avoid following symlinks during post-extraction processing.
How to confirm the fix worked
Confirm that all application and build environments resolve node-tar to 7.5.3 or later by checking package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, and deployed node_modules/tar/package.json files. Use dependency scanners such as npm audit, osv-scanner, Snyk, GitHub Dependabot, or equivalent SCA tooling to verify that no direct or transitive dependency still pulls node-tar 7.5.2 or earlier. Validate runtime artifacts, not only source repositories, because vulnerable versions may remain in containers, CI images, serverless bundles, or packaged desktop applications. For functional validation, test extraction of a controlled tar archive containing absolute symlink and hardlink targets and confirm the upgraded library rejects or neutralizes out-of-root link targets and does not create files or links outside the destination directory.
Typical attack path
- Identify an application, build process, upload workflow, or developer tool that extracts tar archives using node-tar 7.5.2 or earlier.
- Create a malicious tar archive containing hardlink or symbolic link entries with unsafe absolute or out-of-root linkpath targets.
- Deliver the archive through an upload feature, package import, source dependency, CI artifact, support bundle, or social engineering route.
- Trigger extraction by the vulnerable Node.js process with preservePaths disabled or left at its default value.
- Use the unsafe link target to create links outside the intended extraction directory.
- Cause the extraction process or a later workflow to write through the link, overwrite files, poison configuration, expose data, or influence code that is later executed.
How to detect it
To investigate prior exploitation, focus on workflows that processed untrusted or externally supplied tar archives before node-tar was upgraded. Review application upload logs, CI/CD job logs, package import logs, artifact-processing logs, and endpoint file integrity telemetry around archive extraction events. Look for tar archives containing symbolic links or hardlinks whose link targets are absolute paths or resolve outside the extraction directory. On hosts that performed extraction, examine filesystem timeline data for new or modified symlinks, hardlinks, configuration files, scripts, package manifests, shell startup files, service definitions, or application files created shortly after archive extraction. Compare modified files against known-good baselines and check whether changes were made by the Node.js process, CI runner, package manager, or application account. If suspicious archives are retained, inspect them with safe offline tooling and list link entries without extracting them. Because public exploit maturity is currently reported as none and there are no known KEV or named threat actor associations, detection should emphasize behavioral evidence: unsafe archive link entries, out-of-directory file creation, and unexpected writes by archive-processing processes.
- node_modules/tar/package.json
- "version": "7.5.2"
- "version":"7.5.2"
- "tar": "7.5.2"
- "tar":"7.5.2"
- node-tar
- preservePaths
- SymbolicLink
- linkpath=/
- linkpath: /
- -> /
- link to /
- type=SymbolicLink
- type=Link
- hardlink to /
- symlink to /
What your security team should do
- Inventory all direct and transitive uses of node-tar across applications, build pipelines, developer tooling, containers, and packaged artifacts.
- Prioritize upgrades for systems that extract archives supplied by users, third parties, package registries, CI jobs, or external integrations.
- Upgrade to node-tar 7.5.3 or later and regenerate lockfiles to prevent dependency resolution from retaining vulnerable versions.
- Add archive safety checks that reject absolute paths, parent-directory traversal, hardlinks, and symlinks to absolute targets before extraction.
- Run archive extraction with low-privilege accounts in isolated temporary directories or containers, never in application roots, home directories, or system paths.
- Search recent logs and uploaded artifacts for suspicious tar archives containing hardlinks or symlinks with absolute link targets.
- Monitor build and deployment systems for unexpected file modifications immediately after archive extraction steps.
The record
node-tar is a Tar for Node.js. The node-tar library (<= 7.5.2) fails to sanitize the linkpath of Link (hardlink) and SymbolicLink entries when preservePaths is false (the default secure behavior). This allows malicious archives to bypass the extraction root restriction, leading to Arbitrary File Overwrite via hardlinks and Symlink Poisoning via absolute symlink targets. This vulnerability is fixed in 7.5.3.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | tar | 0 | 7.5.3 |
| Chainguard | actions-runner | 0 | 2.331.0-r1 |
| Chainguard | code-server | 0 | 4.106.3-r2 |
| Chainguard | graalvm-25-ce-nodejs | 0 | 25.0.2-r1 |
| Chainguard | kibana-8.17 | 0 | 8.17.10-r8 |
| Chainguard | kibana-8.17-bitnami | 0 | 8.17.10-r8 |
| Chainguard | kibana-8.17-iamguarded | 0 | 8.17.10-r8 |
| Chainguard | kibana-8.18 | 0 | 8.18.8-r8 |
| Chainguard | kibana-8.18-bitnami | 0 | 8.18.8-r8 |
| Chainguard | kibana-8.18-iamguarded | 0 | 8.18.8-r8 |
| Chainguard | kibana-8.19 | 0 | 8.19.10-r2 |
| Chainguard | kibana-8.19-iamguarded | 0 | 8.19.10-r2 |
| Chainguard | kibana-9.0 | 0 | 9.0.8-r8 |
| Chainguard | kibana-9.0-bitnami | 0 | 9.0.8-r8 |
| Chainguard | kibana-9.0-iamguarded | 0 | 9.0.8-r8 |
| Chainguard | kibana-9.1 | 0 | 9.1.10-r3 |
| Chainguard | kibana-9.1-iamguarded | 0 | 9.1.10-r3 |
| Chainguard | kibana-9.2 | 0 | 9.2.3-r5 |
| Chainguard | kibana-9.2-iamguarded | 0 | 9.2.3-r5 |
| Chainguard | kubeflow-centraldashboard | 0 | 1.10.0-r10 |
| Chainguard | kubeflow-pipelines-frontend | 0 | 2.15.0-r10 |
| Chainguard | lerna | 0 | 9.0.3-r1 |
| Chainguard | node-gyp | 0 | 12.2.0-r0 |
| Chainguard | npm | 0 | 11.8.0-r0 |
| Chainguard | opensearch-dashboards-2 | 0 | 2.19.4-r15 |
| Chainguard | opensearch-dashboards-2-fips | 0 | 2.19.5-r0 |
| Chainguard | opensearch-dashboards-3 | 0 | 3.5.0-r0 |
| Chainguard | opensearch-dashboards-3-fips | 0 | 3.5.0-r0 |
| Chainguard | prism | 0 | 5.14.3-r2 |
| Chainguard | pulumi-language-nodejs | 0 | 3.215.0-r1 |
| Chainguard | redisinsight | 0 | 3.0.2-r1 |
| Chainguard | renovate | 0 | 43.2.4-r0 |
| Chainguard | sqlpad | 0 | 7.5.7-r6 |
| Chainguard | tileserver-gl | 0 | 5.5.0-r2 |
| Chainguard | tileserver-gl-fips | 0 | 5.5.0-r3 |
| Chainguard | vitess-22 | 0 | 22.0.3-r0 |
| Chainguard | vitess-23 | 0 | 23.0.1-r0 |
| Wolfi | code-server | 0 | 4.106.3-r2 |
| Wolfi | kubeflow-centraldashboard | 0 | 1.10.0-r10 |
| Wolfi | kubeflow-pipelines-frontend | 0 | 2.15.0-r10 |
| Wolfi | lerna | 0 | 9.0.3-r1 |
| Wolfi | node-gyp | 0 | 12.2.0-r0 |
| Wolfi | npm | 0 | 11.8.0-r0 |
| Wolfi | opensearch-dashboards-2 | 0 | 2.19.4-r15 |
| Wolfi | opensearch-dashboards-3 | 0 | 3.5.0-r0 |
| Wolfi | prism | 0 | 5.14.3-r2 |
| Wolfi | pulumi-language-nodejs | 0 | 3.215.0-r1 |
| Wolfi | renovate | 0 | 43.2.4-r0 |
| Wolfi | sqlpad | 0 | 7.5.7-r6 |
| Wolfi | tileserver-gl | 0 | 5.5.0-r2 |
| Wolfi | vitess-22 | 0 | 22.0.3-r0 |
| Wolfi | vitess-23 | 0 | 23.0.1-r0 |
Related vulnerabilities
- GHSA-8qq5-rm4j-mr97 node-tar is Vulnerable to Arbitrary File Overwrite and Symlink Poisoning via Insufficient… Same vulnerability
- CVE-2026-53655 node-tar is a full-featured Tar for Node.js. Also affects tar
- GHSA-vmf3-w455-68vh node-tar applies PAX size override to intermediary GNU long-name/long-link headers… Also affects tar
- GHSA-9ppj-qmqm-q256 node-tar Symlink Path Traversal via Drive-Relative Linkpath Also affects tar
- CVE-2026-31802 node-tar is a full-featured Tar for Node.js. Also affects tar
- CVE-2026-29786 node-tar is a full-featured Tar for Node.js. Also affects tar
- GHSA-qffp-2rhf-9h96 tar has Hardlink Path Traversal via Drive-Relative Linkpath Also affects tar
- CVE-2026-26960 node-tar is a full-featured Tar for Node.js. Also affects tar