ZeroHour

CVE-2026-86766

moderate

TOCTOU race condition in Snipe-IT consumable checkout API over-allocates inventory

CVSS 4.0
7.1 high
EPSS
<1%p14
Published
()
Modified
AI analysis

Snipe-IT versions up to and including 8.6.3 contain a time-of-check-to-time-of-use race condition (CWE-362) in the consumable checkout API endpoint (POST /api/v1/consumables/{consumable_id}/checkout). The remaining quantity is validated before the database transaction starts, and the transaction then creates checkout records without locking the consumable row or re-checking availability, so concurrent requests can all pass the check. An authenticated user with permission to check out consumables can exploit this by submitting simultaneous checkout requests against the same consumable, over-allocating stock and driving the remaining count negative (for example, 1 remaining unit becomes -1 after two concurrent 1-unit checkouts). The impact is limited to data integrity of inventory records; there is no code execution or data exposure, and exploitation requires valid API credentials with checkout rights on an affected deployment. No exploitation in the wild, KEV listing, or public proof-of-concept is known; the flaw is fixed in 8.7.0, which re-fetches the consumable row under lockForUpdate inside the transaction and re-validates availability.

What to do: Upgrade Snipe-IT to version 8.7.0 or later, which re-checks availability under a row lock inside the transaction. Until upgraded, limit consumable checkout permissions to trusted users and consider rate-limiting or serializing requests to the checkout API endpoint, and audit consumable records for negative remaining-quantity values as evidence of over-allocation.

Affected
Grokability (Snipe-IT project) Snipe-ITall versions up to and including 8.6.3; fixed in 8.7.0
Estimated exposure
moderate≈10,000–100,000 self-hosted instances (order of 10^4+; no authoritative install counts available) — Snipe-IT is a widely adopted open-source IT asset-management application typically self-hosted one-per-organization, and in the absence of public scan or plugin-install data this is a coarse order-of-magnitude estimate based on the…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

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.

Weakness
CWE-362
Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

No ingested article mentions this CVE yet.