CVE-2026-86739
PoC moderateUnchecked Storage Write in Snipe-IT Logs Acceptances Without Evidence Files
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.
| snipeitapp snipe-it | 8.6.3 and earlier (fixed in 8.7.0) |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
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 news0 stories
No ingested article mentions this CVE yet.