GHSA-4v52-7q2x-v4xj Parts of Report are dropped as the wrong type during downcast
Incorrect type handling during error downcasting causes memory corruption or leaks, potentially leading to code execution or crashes in applications using this Rust library.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Not stated
- Victim action needed
- Not needed
- Fix
- Available
What is GHSA-4v52-7q2x-v4xj?
GHSA-4v52-7q2x-v4xj is a memory corruption vulnerability in eyre, published on 5 Mar 2024.
Official description
In affected versions, after a Report is constructed using wrap_err or
wrap_err_with to attach a message of type D onto an error of type E, then
using downcast to recover ownership of either the value of type D or the
value of type E, one of two things can go wrong:
If downcasting to
E, there remains a value of typeDto be dropped. It is incorrectly "dropped" by runningE's drop behavior, rather thanD's. For example ifDis&strandEisstd::io::Error, there would be a call ofstd::io::Error::dropin which the reference received by theDropimpl does not refer to a valid value of typestd::io::Error, but instead to&str.If downcasting to
D, there remains a value of typeEto be dropped. WhenDandEdo not happen to be the same size,E's drop behavior is incorrectly executed in the wrong location. The reference received by theDropimpl may point left or right of the realEvalue that is meant to be getting dropped.
In both cases, when the Report contains an error E that has nontrivial drop
behavior, the most likely outcome is memory corruption.
When the Report contains an error E that has trivial drop behavior (for
example a Utf8Error) but where D has nontrivial drop behavior (such as
String), the most likely outcome is that downcasting to E would leak D.
Which versions are affected by GHSA-4v52-7q2x-v4xj?
3 open source packages ship an affected version, including eyre.
| Package | Affected | Fixed in |
|---|---|---|
eyre crates.io | From 0.6.9 | 0.6.12 |
eyre crates.io | From 0.6.9 | 0.6.12 |
eyre crates.io | From 0.6.9 | 0.6.12 |
How do I fix GHSA-4v52-7q2x-v4xj?
Upgrade eyre to 0.6.12 or later.
Upgrade to the fixed version. Memory-safe languages, compiler hardening and fuzzing prevent most new cases. More about Memory corruption.
Is GHSA-4v52-7q2x-v4xj being exploited?
There is no known exploitation of GHSA-4v52-7q2x-v4xj in the wild and no public exploit code.
Sources
Also known as RUSTSEC-2024-0021.