ZeroHour

CVE-2026-86739

PoC moderate

Unchecked Storage Write in Snipe-IT Logs Acceptances Without Evidence Files

CVSS 4.0
2.3 low
EPSS
<1%p16
Published
()
Modified
AI analysis

Snipe-IT 8.6.3 and earlier fails to check the return value of Storage::put() when persisting the signature PNG and acceptance PDF in Account\AcceptanceController::store(), so a silently failing storage backend (local disk with restrictive permissions, expired S3 credentials, or an out-of-quota store) still results in the acceptance being recorded as complete with accepted_at set, an 'accepted' action-log entry, and completion notifications dispatched. The flaw is triggered by an authenticated user completing an EULA acknowledgement or equipment-receipt acceptance while the storage backend is failing writes without throwing; an attacker cannot directly force that state, and no confidentiality or availability impact occurs. The practical impact is integrity-only: compliance artifacts that are marked complete but whose supporting signature and PDF evidence files do not exist, which can undermine audit and legal workflows. All self-hosted Snipe-IT deployments on 8.6.3 or earlier that use acceptance/EULA workflows are affected. The issue is fixed in Snipe-IT 8.7.0, and there is no indication of exploitation in the wild.

What to do: Upgrade to Snipe-IT 8.7.0, which checks the Storage::put() return value before marking an acceptance complete. In the meantime, verify storage backend health and permissions (local disk write access, S3 credential validity, quota) and add monitoring/alerting for failed writes. Audit existing acceptance records from before the upgrade for missing signature_filename/eula_filename files and re-collect signatures where evidence is absent.

Affected
snipeitapp snipe-it8.6.3 and earlier (fixed in 8.7.0)
Estimated exposure
moderatelikely thousands of self-hosted instances (order of 10^3–10^4), with only those using acceptance workflows at risk — Snipe-IT is a widely self-hosted open-source asset-management platform with no official instance telemetry, so the estimate is inferred from its deployment model and community size; the vulnerable subset (instances configured for…

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 do not check the return value of Storage::put() when writing the signature PNG and the generated acceptance PDF in Account\AcceptanceController::store(). On filesystem drivers that return false instead of throwing on a write failure (for example the local disk with restrictive permissions, S3 with expired credentials, or a storage backend that is out of quota), execution continues into $acceptance->accept(), which sets accepted_at and the signature_filename/eula_filename fields, creates the 'accepted' action-log entry, and dispatches completion notifications even though the evidence files were never stored. The result is an acceptance record marked complete whose supporting evidence files do not exist, yielding a materially incomplete compliance artifact for EULA acknowledgement or equipment-receipt workflows. The condition is triggered when an authenticated user completes an acceptance while the storage backend is silently failing writes; an attacker cannot directly force the storage backend into that state. Fixed in Snipe-IT 8.7.0.

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