{"id":"GHSA-j4xf-2g29-59ph","summary":"tar-rs `unpack_in` can chmod arbitrary directories by following symlinks","details":"## Summary\n\nWhen 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.\n\n## Reproducer\n\nA 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.\n\n## Fix \n\nThe fix is very simple, we now use `fs::symlink_metadata()` in `unpack_dir`, so symlinks are detected and rejected rather than followed.\n\n## Credit\n\nThis issue was reported by @xokdvium - thank you!","aliases":["CVE-2026-33056","RUSTSEC-2026-0067"],"modified":"2026-09-10T03:50:39.751471613Z","published":"2026-03-20T17:25:09Z","database_specific":{"github_reviewed_at":"2026-03-20T17:25:09Z","nvd_published_at":"2026-03-20T08:16:11Z","cwe_ids":["CWE-61"],"severity":"MODERATE","github_reviewed":true},"references":[{"type":"WEB","url":"https://github.com/alexcrichton/tar-rs/security/advisories/GHSA-j4xf-2g29-59ph"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33056"},{"type":"WEB","url":"https://github.com/alexcrichton/tar-rs/commit/17b1fd84e632071cb8eef9d3709bf347bd266446"},{"type":"PACKAGE","url":"https://github.com/alexcrichton/tar-rs"},{"type":"WEB","url":"https://rustsec.org/advisories/RUSTSEC-2026-0067.html"}],"affected":[{"package":{"name":"tar","ecosystem":"crates.io","purl":"pkg:cargo/tar"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.4.45"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-j4xf-2g29-59ph/GHSA-j4xf-2g29-59ph.json","last_known_affected_version_range":"\u003c= 0.4.44"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N"},{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N"}]}