Description
Snipe-IT versions <= 8.6.3 (fixed in 8.7.0) do not check the return value of storage write operations in ImageUploadRequest::handleImages(). Because Laravel's default disk mode does not throw on failure, a silently failed Storage::disk('public')->put(...) call still caused the application to delete the previous image via deleteExistingImage() and to reassign and persist the model's image reference to the new filename, destroying the existing image and leaving the database row pointing at a file that was never written. A mirror problem existed in deleteExistingImage(), where a failed Storage::delete() still nulled the model's image field, orphaning the file on disk. The condition is not directly attacker-controlled: it is triggered when any legitimate authenticated user submits an image upload while the storage backend transiently fails (for example an S3 network error, a local filesystem permission problem, or quota exhaustion). The result is unrecoverable loss of the prior image and a durable inconsistency between the database and disk that requires manual reconciliation. All models whose controllers route through ImageUploadRequest::handleImages (assets, asset models, users, companies, manufacturers, locations, categories, suppliers, departments, and other image-carrying models) are affected.
Published: 2026-09-09
Score: 7 High
EPSS: < 1% Very Low
KEV: No
Impact: Unrecoverable Data Loss and Inconsistent Database State
Action: Patch
AI Analysis

Impact

Snipe‑IT versions 8.6.3 and earlier delete the current image file without verifying that the new file was successfully written, and then overwrite the database reference with the new filename. This unchecked return value flaw causes the original image to be permanently removed while the database points to a non‑existent file, resulting in irrecoverable data loss for every picture stored in the application.

Affected Systems

All Snipe‑IT installations running version 8.6.3 or earlier are affected. Every model that can carry an image, including assets, asset models, users, companies, manufacturers, locations, categories, suppliers, and departments, routes through the vulnerable upload routine.

Risk and Exploitability

The flaw is triggered only when a legitimate, authenticated user submits an image upload and the underlying storage backend (S3, local filesystem, etc.) temporarily fails to write or delete the file. No remote attacker can directly trigger the flaw; however, an ordinary user or an automated scan could inadvertently cause data loss if the storage is misconfigured. The CVSS score of 7 indicates moderate severity. EPSS is not available, and the issue is not listed in CISA KEV, so the likelihood of widespread exploitation is low but the impact if triggered is significant.

Generated by OpenCVE AI on September 9, 2026 at 16:07 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Snipe‑IT to version 8.7.0 or later to apply the fixed image‑upload logic.
  • After upgrading, run a reconciliation procedure to identify any image records that reference missing files and either restore or delete them to resolve database/file system inconsistencies.
  • Until a patch is applied, consider disabling image uploads for all affected models (assets, users, etc.) or configuring Laravel’s storage driver to throw an exception on write failures, so that failed uploads are detected and handled properly.

Generated by OpenCVE AI on September 9, 2026 at 16:07 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 19 Sep 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 09 Sep 2026 13:45:00 +0000

Type Values Removed Values Added
Description Snipe-IT versions <= 8.6.3 (fixed in 8.7.0) do not check the return value of storage write operations in ImageUploadRequest::handleImages(). Because Laravel's default disk mode does not throw on failure, a silently failed Storage::disk('public')->put(...) call still caused the application to delete the previous image via deleteExistingImage() and to reassign and persist the model's image reference to the new filename, destroying the existing image and leaving the database row pointing at a file that was never written. A mirror problem existed in deleteExistingImage(), where a failed Storage::delete() still nulled the model's image field, orphaning the file on disk. The condition is not directly attacker-controlled: it is triggered when any legitimate authenticated user submits an image upload while the storage backend transiently fails (for example an S3 network error, a local filesystem permission problem, or quota exhaustion). The result is unrecoverable loss of the prior image and a durable inconsistency between the database and disk that requires manual reconciliation. All models whose controllers route through ImageUploadRequest::handleImages (assets, asset models, users, companies, manufacturers, locations, categories, suppliers, departments, and other image-carrying models) are affected.
Title snipe-it before 8.7.0 Data Loss via Failed Image Write
First Time appeared Snipeitapp
Snipeitapp snipe-it
Weaknesses CWE-252
CPEs cpe:2.3:a:snipeitapp:snipe-it:*:*:*:*:*:*:*:*
Vendors & Products Snipeitapp
Snipeitapp snipe-it
References
Metrics cvssV3_1

{'score': 6.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:L'}

cvssV4_0

{'score': 7, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N'}


Subscriptions

Snipeitapp Snipe-it
cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-19T14:21:55.738Z

Reserved: 2026-09-08T11:32:11.095Z

Link: CVE-2026-86749

cve-icon Vulnrichment

Updated: 2026-09-19T14:18:55.706Z

cve-icon NVD

Status : Analyzed

Published: 2026-09-09T14:17:23.880

Modified: 2026-09-19T15:17:07.153

Link: CVE-2026-86749

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-10T16:30:17Z

Weaknesses