Stream: git-wasmtime

Topic: wasmtime / issue #15005 RUSTSEC-2026-0403: Uninitialized ...


view this post on Zulip Wasmtime GitHub notifications bot (Oct 27 2026 at 00:13):

github-actions[bot] opened issue #15005:

Uninitialized memory exposed when streaming decompression of a legacy frame fails

Details
Package zstd-safe
Version 7.0.0
URL https://github.com/gyscos/zstd-rs/commit/006e1d1ad1eeaf6b5d4c28329e70217adabcec43
Date 2026-10-16
Patched versions >=8.2.0
Unaffected versions <4.0.0

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&lt;u8&gt; 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.

See advisory page for additional details.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 27 2026 at 00:39):

pchickey closed issue #15005:

Uninitialized memory exposed when streaming decompression of a legacy frame fails

Details
Package zstd-safe
Version 7.0.0
URL https://github.com/gyscos/zstd-rs/commit/006e1d1ad1eeaf6b5d4c28329e70217adabcec43
Date 2026-10-16
Patched versions >=8.2.0
Unaffected versions <4.0.0

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&lt;u8&gt; 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.

See advisory page for additional details.


Last updated: Oct 31 2026 at 23:03 UTC