GHSA-f85w-wvc7-crwc bumpalo has use-after-free due to a lifetime error in `Vec::into_iter()`
A lifetime error in bumpalo's Vec::into_iter allows use-after-free, potentially leading to memory corruption or crashes when the allocator is dropped.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Not stated
- Victim action needed
- Not needed
- Fix
- Available
What is GHSA-f85w-wvc7-crwc?
GHSA-f85w-wvc7-crwc is an use after free vulnerability in bumpalo, published on 14 Jan 2022.
Official description
In affected versions of this crate, the lifetime of the iterator produced by Vec::into_iter() is not constrained to the lifetime of the Bump that allocated the vector's memory. Using the iterator after the Bump is dropped causes use-after-free accesses.
The following example demonstrates memory corruption arising from a misuse of this unsoundness.
use bumpalo::{collections::Vec, Bump};
fn main() {
let bump = Bump::new();
let mut vec = Vec::new_in(&bump);
vec.extend([0x01u8; 32]);
let into_iter = vec.into_iter();
drop(bump);
for _ in 0..100 {
let reuse_bump = Bump::new();
let _reuse_alloc = reuse_bump.alloc([0x41u8; 10]);
}
for x in into_iter {
print!("0x{:02x} ", x);
}
println!();
}
The issue was corrected in version 3.11.1 by adding a lifetime to the IntoIter type, and updating the signature of Vec::into_iter() to constrain this lifetime.
Which versions are affected by GHSA-f85w-wvc7-crwc?
3 open source packages ship an affected version, including bumpalo.
| Package | Affected | Fixed in |
|---|---|---|
bumpalo crates.io | From 1.1.0 | 3.11.1 |
bumpalo crates.io | From 1.1.0 | 3.11.1 |
bumpalo crates.io | From 1.1.0 | 3.11.1 |
How do I fix GHSA-f85w-wvc7-crwc?
Upgrade bumpalo to 3.11.1 or later.
Upgrade to the fixed version. These bugs are found with fuzzing and sanitisers and avoided by memory-safe languages. More about Use after free.
Is GHSA-f85w-wvc7-crwc being exploited?
There is no known exploitation of GHSA-f85w-wvc7-crwc in the wild and no public exploit code.
Sources
Also known as RUSTSEC-2022-0078.