RUSTSEC-2026-0403

Source
https://rustsec.org/advisories/RUSTSEC-2026-0403
Import Source
https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2026-0403.json
JSON Data
https://api.osv.dev/v1/vulns/RUSTSEC-2026-0403
Published
2026-10-16T12:00:00Z
Modified
2026-10-26T14:00:05Z
Summary
Uninitialized memory exposed when streaming decompression of a legacy frame fails
Details

When decompression fails inside a legacy (zstd v0.4 to v0.7) frame, the bundled zstd library reports the output buffer as fully written although nothing was written. DCtx::decompress_stream committed that position even on error, and for a Vec<u8> destination this extended the vector's length over uninitialized memory.

Legacy support is enabled by default. A 5- or 6-byte corrupt legacy frame is enough: through zstd::stream::write::Decoder, up to 32 KiB of stale heap memory is then passed to the wrapped writer on the next write() or flush(), or when an auto_flush()/on_flush() decoder is dropped. Whether this reaches an attacker depends on where the application sends the decompressed output. zstd::stream::read::Decoder, zstd::decode_all and the bulk API are not affected.

Before zstd-safe 4.0.0, output buffers could only be initialized slices. The zstd crate's own writer had the same flaw from 0.4.22 to 0.7.x, which is covered by a separate advisory.

The flaw was corrected by only committing the buffer positions of a successful call.

Database specific
{
    "license":  "CC0-1.0"
}
References

Affected packages

crates.io / zstd-safe

Package

Name
zstd-safe
View open source insights on deps.dev
Purl
pkg:cargo/zstd-safe

Affected ranges

Type
SEMVER
Events
Introduced
4.0.0
Fixed
8.2.0

Ecosystem specific

{
    "affected_functions":  null,
    "affects":  {
        "arch":  [],
        "functions":  [
            "zstd_safe::DCtx::decompress_stream"
        ],
        "os":  []
    }
}

Database specific

categories
[
    "memory-exposure"
]
cvss
null
informational
null
source
"https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2026-0403.json"