GHSA-4v52-7q2x-v4xj Parts of Report are dropped as the wrong type during downcast

Not scored Published

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 type D to be dropped. It is incorrectly "dropped" by running E's drop behavior, rather than D's. For example if D is &str and E is std::io::Error, there would be a call of std::io::Error::drop in which the reference received by the Drop impl does not refer to a valid value of type std::io::Error, but instead to &str.

  • If downcasting to D, there remains a value of type E to be dropped. When D and E do not happen to be the same size, E's drop behavior is incorrectly executed in the wrong location. The reference received by the Drop impl may point left or right of the real E value 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.

PackageAffectedFixed in
eyre crates.ioFrom 0.6.90.6.12
eyre crates.ioFrom 0.6.90.6.12
eyre crates.ioFrom 0.6.90.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.

Is GHSA-4v52-7q2x-v4xj in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free