Katalog CVE

CVE-2026-86766

ŚrednieCVSS 6.5
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.23%

Percentyl 14 - wyżej niż 14% wszystkich znanych CVE

Streszczenie

Snipe-IT do wersji 8.6.3 włącznie zawiera warunek wyścigu (TOCTOU) w punkcie końcowym API wydawania materiałów eksploatacyjnych (POST /api/v1/consumables/{consumable_id}/checkout). Żądana ilość jest weryfikowana względem liczby pozostałych jednostek przed rozpoczęciem transakcji bazy danych, a transakcja tworzy rekordy wydania bez blokowania wiersza materiału ani ponownego sprawdzania dostępności. Uwierzytelniony użytkownik z uprawnieniem do wydawania materiałów może wysyłać równoczesne żądania wydania dla tego samego materiału, tak że oba żądania przechodzą kontrolę dostępności i kończą się sukcesem, nadprzydzielając stan magazynowy i doprowadzając do ujemnego stanu (np. materiał z 1 pozostałą jednostką kończy na -1 po dwóch równoczesnych wydaniach po 1 jednostce). Problem naprawiono w wersji 8.7.0, która ponownie pobiera wiersz nadrzędny z lockForUpdate wewnątrz transakcji i ponownie weryfikuje dostępność.

Ocena ryzyka

Nadprzydzielenie zapasów może prowadzić do błędnych stanów magazynowych, problemów z dostępnością materiałów i naruszenia integralności danych.

Rekomendacja

Zaktualizuj Snipe-IT do wersji 8.7.0 lub nowszej, która zawiera poprawkę eliminującą warunek wyścigu.

Inne podatności w Snipe-IT

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

Snipe-IT versions up to and including 8.6.3 contain a race condition (TOCTOU) in the consumable checkout API endpoint (POST /api/v1/consumables/{consumable_id}/checkout). The requested quantity is validated against the number of remaining units before the database transaction begins, and the transaction then creates the checkout records without locking the consumable row or re-checking availability. An authenticated user with permission to check out consumables can submit concurrent checkout requests for the same consumable so that both requests pass the availability check and succeed, over-allocating stock and driving the remaining inventory negative (e.g., a consumable with 1 remaining unit ends at -1 after two concurrent 1-unit checkouts). The issue is fixed in 8.7.0, which re-fetches the parent row under lockForUpdate inside the transaction and re-validates availability.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS