ZeroHour

CVE-2026-86744

PoC moderate

Race Condition in Snipe-IT Asset Checkout Allows Duplicate Checkout Records (<=8.6.3)

CVSS 4.0
2.1 low
EPSS
<1%p12
Published
()
Modified
AI analysis

Snipe-IT versions 8.6.3 and earlier (including develop-branch pre-release commits prior to the fix) contain a TOCTOU race condition (CWE-362) in the asset checkout paths: Api\AssetsController::checkout() and Assets\AssetCheckoutController::store() check Asset::availableForCheckout() outside the mutation path and then call Asset::checkOut() without a row lock or a re-check, so two concurrent requests can both see an asset as available and both commit. An authenticated attacker with the assets.checkout permission (or superuser) who times simultaneous checkout requests for the same asset gains duplicated checkout-history rows, a doubled checkout_counter, and two CheckoutableCheckedOut events for a single-assignment asset — corrupting the audit trail and skewing utilization and reconciliation reports. The asset's final assigned_to value remains singular, so the visible assignment itself stays intact, limiting impact to data integrity of records. All self-hosted Snipe-IT deployments on affected versions are exposed, though exploitation requires privileged credentials and precise timing. The vendor published a security advisory (GHSA-h992-9438-26v8) and no exploitation in the wild is known.

What to do: Upgrade Snipe-IT to 8.7.0, which adds proper serialization/availability re-checking in the checkout path. After upgrading, audit checkout-history tables and checkout_counter values for assets showing duplicate checkout events from the same timestamp window, and reconcile affected reporting. Since exploitation requires an authenticated assets.checkout (or superuser) role, review which accounts hold that permission and monitor for anomalous concurrent checkout bursts.

Affected
snipeitapp snipe-it8.6.3 and earlier, plus develop pre-release commits prior to the fix (fixed in 8.7.0)
Estimated exposure
moderate≈10,000+ self-hosted Snipe-IT instances (order-of-magnitude estimate, no authoritative count) — Snipe-IT is a popular free self-hosted open-source asset-management platform (tens of thousands of GitHub stars and millions of cumulative container pulls), suggesting active deployments in the low tens of thousands, but no public scan or…

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

Description

Snipe-IT 8.6.3 and earlier (and develop pre-release commits prior to the fix) contain a race condition in the asset checkout paths. Api\AssetsController::checkout() and Assets\AssetCheckoutController::store() call Asset::availableForCheckout() outside the mutation path and then invoke Asset::checkOut() without taking a row lock or re-checking availability, so two concurrent checkout requests for the same available asset can both observe it as available and both commit. This produces duplicate checkout-history rows, a doubled checkout_counter, and two CheckoutableCheckedOut events for a single-assignment asset, corrupting the audit trail and utilization/reconciliation reporting; the asset's final assigned_to remains singular, so the visible assignment stays intact. Exploitation requires an authenticated session holding the assets.checkout permission (or superuser) and precise concurrent timing. Fixed in 8.7.0.

Vendors
snipeitapp
Products
snipe-it
Weakness
CWE-362
Vector
CVSS:4.0/AV:N/AC:H/AT:P/PR:H/UI:N/VC:N/VI:L/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.