GitHub Advisoryadvisory · crates.io
GHSA-j4xf-2g29-59ph tar-rs `unpack_in` can chmod arbitrary directories by following symlinks
MEDIUM
Official page ↗
- Aliases
- CVE-2026-33056
- Ecosystem
- crates.io
- Packages
- tar
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
- Weaknesses
- CWE-61
- Reviewed
- 2026-03-20
Affected packages
• crates.io tar: < 0.4.45 → fixed in 0.4.45
Description
Summary
When unpacking a tar archive, the `tar` crate's `unpack_dir` function uses `fs::metadata()` to check whether a path that already exists is a directory. Because `fs::metadata()` follows symbolic links, a crafted tarball containing a symlink entry followed by a directory entry with the same name causes the crate to treat the symlink target as a valid existing directory — and subsequently apply `chmod` to it. This allows an attacker to modify the permissions of arbitrary directories outside the extraction root.
Reproducer
A malicious tarball contains two entries: (1) a symlink `foo` pointing to an arbitrary external directory, and (2) a directory entry `foo/.` (or just `foo`). When unpacked, `create_dir("foo")` fails with `EEXIST` because the symlink is already on disk. The `fs::metadata()` check then follows the symlink, sees a directory at the target, and allows processing to continue. The directory entry's mode bits are then applied via `chmod`, which also follows the symlink — modifying the permissions of the external target directory.
Fix
The fix is very simple, we now use `fs::symlink_metadata()` in `unpack_dir`, so symlinks are detected and rejected rather than followed.
Credit
This issue was reported by @xokdvium - thank you!
Related
Alias · CVE (1)
- CVE-2026-33056 tar-rs is a tar archive reading/writing library for Rust. vulnerability
Weakness · CWE (1)
- CWE-61 UNIX Symbolic Link (Symlink) Following weakness
References
- https://github.com/alexcrichton/tar-rs/security/advisories/GHSA-j4xf-2g29-59ph web
- https://nvd.nist.gov/vuln/detail/CVE-2026-33056 advisory
- https://github.com/alexcrichton/tar-rs/commit/17b1fd84e632071cb8eef9d3709bf347bd266446 web
- https://github.com/alexcrichton/tar-rs package
- https://rustsec.org/advisories/RUSTSEC-2026-0067.html web