`nix-nar`: `Decoder::unpack` writes archive entries outside the destination directory (path traversal)
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 0.6.0
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
The `nix-nar` Rust crate, which parses and unpacks Nix NAR archives, is affected. A specially crafted archive can make it create files outside the intended destination directory, which could let an attacker plant files in arbitrary locations writable by the user running the process and potentially lead to code execution.
Summarized by anthropic/claude-haiku-5.5. Verify details against the original sources.
Read the original description
`Decoder::unpack` does not safely contain the paths it extracts, so a malicious NAR archive can create files outside the destination directory — a path traversal (CWE-22). In `src/dec.rs` (`Decoder::unpack`): • A symlink entry's target is written without checking where it points (`src/dec.rs:153`), so the archive can create a symlink that escapes the destination directory. • The out-of-destination containment check compares path strings only and does not account for symlinks created earlier in the same unpack (`src/dec.rs:176-181`), before reaching the write sinks (`std::fs::create_dir` at `src/dec.rs:201` and `OpenOptions::open` at `src/dec.rs:218`). • The parser also accepts entry names containing `/` (`src/parser.rs:138-147`). Combined, a malicious archive can include a symlink `a` pointing at an external directory and then an entry named `a/b`, causing `b` to be written to `<external>/b`, outside the destination. This can create new files anywhere the process can write (it cannot overwrite existing files), which is escalatable to code execution by planting files in attacker-chosen locations.
Timeline
- First seen by cve.now
- Advisory published
Affected versions
- nix-narcrates.io
From 0.0.0-0 · fixed in 0.6.0