getsentry / getsentry/sentry-cli

RUSTSEC-2026-0253: Potential use-after-free due to lack of panic safety in `LruCache::pop()`

Aperta
#3,394 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
rust
Lingua principale
Rust
Stelle
1k
Fork
255
Merge medio
5g 13h
PR unite (30g)
8

Descrizione

> Potential use-after-free due to lack of panic safety in `LruCache::pop()`

| Details | |
| ------------------- | ---------------------------------------------- |
| Status | unsound |
| Package | `lru` |
| Version | `0.16.4` |
| URL | [https://github.com/jeromefroe/lru-rs/pull/238](https://github.com/jeromefroe/lru-rs/pull/238) |
| Date | 2026-05-12 |

`LruCache::pop()` in `lru` was not panic-safe. If the `Drop` implementation of a stored key panics during `pop()`, `self.detach()` is never called, leaving dangling pointers in the internal doubly-linked list.

A subsequent cache operation that triggers eviction can then dereference these dangling pointers:
- The node is freed from the map, but remains linked in the LRU list due to the skipped `detach()` call
- When a new insertion causes eviction, the LRU traversal encounters the dangling pointer
- This results in a write to already-freed memory during the eviction process

## Impact

- **CWE-416 (Use-After-Free):** memory corruption when subsequent cache operations access freed node pointers in the linked list
- **CWE-415 (Double Free):** potential heap corruption when the same memory is freed multiple times

Both types of undefined behavior can be invoked in safe Rust, but only if unwinding panics are enabled and `std::panic::catch_unwind` is used with key types that have potentially-panicking `Drop` implementations.

## Fix

Fixed in `lru` 0.18.2 by detaching the node from the linked list before freeing it and dropping the key ([lru-rs#238](https://github.com/jeromefroe/lru-rs/pull/238)).

See [advisory page](https://rustsec.org/advisories/RUSTSEC-2026-0253.html) for additional details.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia tracciando il modo in cui sentry-cli dipende dal pacchetto lru e identifica il manifest delle dipendenze o il file di lock che seleziona la versione 0.16.4. Aggiorna la dipendenza risolta alla versione corretta 0.18.2, quindi esegui i controlli disponibili nel repository per confermare che la risoluzione delle dipendenze e il comportamento esistente rimangano integri.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
rust
Ambito
security
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
58/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.