Track vulnerabilities like this one. Sign up free to get alerted when software you use is affected.

Salsa could release data while it is still in use

published 1 month ago
Summary

The Salsa library versions before 0.28.5 could mistakenly discard stored information while an application is still reading it, which might let malicious input expose memory or run unwanted code. The problem occurs when the library reuses cached results without confirming they belong to the current data set. Updating Salsa to version 0.28.5 or later fixes the issue; apply the update to any software that uses this library.

What to do
  • Update nikomatsakis salsa to version 0.28.5.
Affected software
Ecosystem VendorProductAffected versions
crates.io nikomatsakis salsa >= 0.23.0, < 0.28.5
Fix: upgrade to 0.28.5
Original advisory text
Use-after-free in interned values and cached function results
When an application reads an interned value's fields or uses that value as an input to a tracked function, Salsa must ensure that reusable storage has been validated for the current database revision. This prevents the value's fields and associated cached function results from being freed while in use. Affected versions checked this invariant only with `debug_assert!` when reading fields, and did not check it when using an interned value to access a tracked function's cached result.

Bugs in Salsa's dependency tracking, or an application-provided `Eq` implementation that incorrectly treats a changed query result as unchanged, can cause Salsa to reuse cached results containing stale interned values. If the application accesses these values and then interns additional values, Salsa can free the old fields or cached function results while references to them are still in use. This causes use-after-free through safe Rust APIs. Depending on the consuming application, attacker-controlled input may expose process memory or permit arbitrary code execution.

The fix asserts that an interned value's reusable storage has been validated for the current database revision before allowing an application to read its fields or access a tracked function's cached result using that value as input. If the assertion fails, Salsa panics before returning references to storage that could be freed while in use.

Salsa 0.28.5 and newer address this vulnerability. Dependent applications should update Salsa and rebuild.

Applications that disable garbage collection for all explicitly declared interned structs using `#[salsa::interned(revisions = usize::MAX)]` and do not use implicitly interned query arguments are not affected by this vulnerability.
Timeline
Published24 Sep 2026
Updated30 Sep 2026
First seen30 Sep 2026
Sources
Track software like this
Free during beta