Public mode

No access to your tenant or devices. Every item links to its source. What this means

Some sources or documents need attention: 275/275 feeds/APIs · 469/469 docs · 9/9 advisories · checked 16:11 UTC Customize Public modeDiscuss ChangeIntel on Discord

Unbounded memory allocation in `thrift` binary protocol `read_bytes`

Exact source revision recorded 2 Nov 2026 13:57:24 UTC. It does not establish the source's current position. Latest evidence.

osv · RUSTSEC-2026-0435

Published

Affected versions of the `thrift` crate size a buffer directly from an attacker-controlled 4-byte length read off the wire, before reading any payload and with no upper bound, allowing a hostile peer to force a large eager allocation or an immediate abort (denial of service, CWE-400 / CWE-789). This is the Rust implementation's instance of the CVE-2020-13949 pattern, published by the Apache Thrift PMC as CVE-2026-43868. ## Details In `TBinaryInputProtocol::read_bytes` (`src/protocol/binary.rs`), the length is read as a `i32` from the transport and cast straight to `usize` to size a zeroing buffer **before** any payload is read: ```rust fn read_bytes(&mut self) -> crate::Result<Vec<u8>> { let num_bytes = self.transport.read_i32::<BigEndian>()? as usize; // length from the wire let mut buf = vec![0u8; num_bytes]; // unbounded eager allocation self.transport.read_exact(&mut buf).map(|_| buf).map_err(From::from) } ``` There is no check that `num_bytes` is non-negative or that it fits within the data actually available: - A length of `0x7FFFFFFF` forces a ~2 GiB allocation; `0x20000000` forces 512 MiB; and so on, from only a 4-byte input. - A negative length casts to a huge `usize` (up to `usize::MAX`), causing an immediate allocation failure / abort. `read_string` routes through `read_bytes`, so string fields are affected the same way. The sink is reachable from any peer sending binary-protocol data, so this is an unauthenticated, network-reachable denial of service. ## The fix From `thrift` 0.23.0 onward, `read_bytes` goes through `read_binary_len`, which rejects negative sizes and enforces `TConfiguration::max_string_size` (default 100 MiB), alongside default message, frame, and recursion limits. A separate, related gap on the non-strict message-name path was published as CVE-2026-58389 and fixed in 0.24.0; this advisory covers the `read_bytes` unbounded allocation (CVE-2026-43868), fixed in 0.23.0.

Source published
2 Nov 2026 12:00:00 UTC
Source modified
2 Nov 2026 12:10:42 UTC
Observed here
2 Nov 2026 13:57:24 UTC
Source terms
OSV · upstream source license applies

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · OSV · upstream source license applies. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS_V3 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 7 Nov 16:11 UTC · 275 of 275 readable · 274 fully read · documentation 469/469 current