Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
Integrity rated High because unauthorized cross-tenant asset reassignment is a severe data isolation violation; availability is unimpacted as no data is deleted or service disrupted.
Primary rating from Vendor (https://github.com/grokability/snipe-it).
CVSS VectorVendor: https://github.com/grokability/snipe-it
Lifecycle Timeline
2DescriptionCVE.org
Impact
The BulkAssetsController::update() method accepts company_id directly from user input without calling Company::getIdForCurrentUser(), the standard company-scoping function used by every other controller in the codebase. A non-superadmin user can move assets across company boundaries, breaking multi-tenancy isolation.
Patches
Patched in https://github.com/grokability/snipe-it/commit/d58fda626e8febfeff4cabbc20ba03edfc411e18
AnalysisAI
Multi-tenancy isolation is broken in Snipe-IT versions through 8.4.1, allowing authenticated non-superadmin users to reassign assets across company boundaries via the bulk asset update endpoint. The root cause is that BulkAssetsController::update() accepts company_id directly from HTTP request input without applying the Company::getIdForCurrentUser() scoping guard used by every other controller in the codebase. A fix is confirmed in version 8.4.2 via commit d58fda626e8febfeff4cabbc20ba03edfc411e18; no public exploit or CISA KEV listing exists at time of analysis.
Technical ContextAI
Snipe-IT is an open-source IT asset management platform built on Laravel/PHP, distributed via Composer as snipe/snipe-it. The vulnerability is rooted in CWE-639 (Authorization Bypass Through User-Controlled Key), a class of IDOR-adjacent flaw where the application trusts a user-supplied identifier to scope a privileged operation. The fix diff confirms that BulkAssetsController.php line 374 was passing $request->input('company_id') directly into the update array, bypassing the Company::getIdForCurrentUser() method that enforces tenant-boundary checks. The CPE pkg:composer/snipe_snipe-it pins the affected package. All other controllers in the codebase correctly call the scoping function, making this an isolated omission rather than a systemic architectural flaw.
RemediationAI
Vendor-released patch: 8.4.2. Upgrade Snipe-IT to version 8.4.2 or later, which corrects BulkAssetsController::update() to pass the user-supplied company_id through Company::getIdForCurrentUser() before writing it to the update array. The advisory is at https://github.com/grokability/snipe-it/security/advisories/GHSA-33g4-646g-qwmm and the patch commit is at https://github.com/grokability/snipe-it/commit/d58fda626e8febfeff4cabbc20ba03edfc411e18. If immediate upgrade is not feasible, restrict the bulk asset update functionality to superadmin-role users only via application-level role permissions; this trade-off removes the cross-tenant risk but prevents non-admin users from performing bulk updates entirely. Single-tenant deployments where only one company exists in the Snipe-IT instance are not at material risk and may deprioritize the upgrade cycle accordingly.
Same technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-62680
GHSA-33g4-646g-qwmm