RUSTSEC-2026-0425
Vulnerability from osv_rustsec – Published: 2026-10-30 12:00 – Updated: 2026-10-30 10:42 – Source websiteDecoder::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_diratsrc/dec.rs:201andOpenOptions::openatsrc/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.
{
"affected": [
{
"database_specific": {
"categories": [
"code-execution"
],
"cvss": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N",
"informational": null
},
"ecosystem_specific": {
"affected_functions": null,
"affects": {
"arch": [],
"functions": [
"nix_nar::Decoder::unpack"
],
"os": []
}
},
"package": {
"ecosystem": "crates.io",
"name": "nix-nar",
"purl": "pkg:cargo/nix-nar"
},
"ranges": [
{
"events": [
{
"introduced": "0.0.0-0"
},
{
"fixed": "0.6.0"
}
],
"type": "SEMVER"
}
],
"versions": []
}
],
"aliases": [],
"database_specific": {
"license": "CC0-1.0"
},
"details": "`Decoder::unpack` does not safely contain the paths it extracts, so a malicious NAR\narchive can create files **outside** the destination directory \u2014 a path traversal\n(CWE-22).\n\nIn `src/dec.rs` (`Decoder::unpack`):\n\n- A symlink entry\u0027s target is written without checking where it points\n (`src/dec.rs:153`), so the archive can create a symlink that escapes the\n destination directory.\n- The out-of-destination containment check compares path **strings** only and does\n not account for symlinks created earlier in the same unpack\n (`src/dec.rs:176-181`), before reaching the write sinks\n (`std::fs::create_dir` at `src/dec.rs:201` and `OpenOptions::open` at\n `src/dec.rs:218`).\n- The parser also accepts entry names containing `/` (`src/parser.rs:138-147`).\n\nCombined, a malicious archive can include a symlink `a` pointing at an external\ndirectory and then an entry named `a/b`, causing `b` to be written to\n`\u003cexternal\u003e/b`, outside the destination. This can create new files anywhere the\nprocess can write (it cannot overwrite existing files), which is escalatable to code\nexecution by planting files in attacker-chosen locations.",
"id": "RUSTSEC-2026-0425",
"modified": "2026-10-30T10:42:08Z",
"published": "2026-10-30T12:00:00Z",
"references": [
{
"type": "PACKAGE",
"url": "https://crates.io/crates/nix-nar"
},
{
"type": "ADVISORY",
"url": "https://rustsec.org/advisories/RUSTSEC-2026-0425.html"
},
{
"type": "WEB",
"url": "https://codeberg.org/scvalex/nix-nar-rs/issues/3"
}
],
"related": [],
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N",
"type": "CVSS_V3"
}
],
"summary": "`nix-nar`: `Decoder::unpack` writes archive entries outside the destination directory (path traversal)"
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.