Aug 20, 2026·5 min read·57 visits
An insecure direct object reference (IDOR) flaw in Snipe-IT allows any authenticated user to view asset maintenance logs and financial/vendor data without permission.
Snipe-IT is an IT asset/license management system. Prior to 8.6.3, any activated account can request /maintenances/{id} and read maintenance records for assets in the same company without asset or maintenance permission. app/Http/Controllers/MaintenancesController.php show() renders the record without authorize(), while company-scoped route-model binding only prevents access to other companies. Disclosed fields include asset tags, suppliers, purchase costs, notes, and dates. This issue is fixed in version 8.6.3.
Snipe-IT is an open-source IT asset management system designed for tracking licenses, accessories, consumables, and physical hardware assets. Within enterprise deployments, access control is critical to limit exposure of asset maintenance history, pricing, vendor relationships, and configuration notes. The vulnerability, designated as CVE-2026-55703, represents a Missing Function-Level Access Control (MFLAC) flaw in the application's maintenance reporting module.
Historically, physical assets and their subsequent maintenance operations require specific operator permissions to view or edit. However, an oversight in the endpoint handling maintenance details allowed low-privileged authenticated users to access sensitive data. This analysis details the underlying code flaw, exploitation path, and vendor remediation implemented in the patched version.
The root cause of CVE-2026-55703 resides in the show method of app/Http/Controllers/MaintenancesController.php. This controller handles operations related to asset maintenance, including scheduling, updates, and general logging. While other controller actions like edit, update, and destroy implement explicit validation logic or utilize Laravel authorization gates, the show method completely omitted these security boundaries.
Laravel uses route-model binding to automatically inject model instances based on URL parameters. For example, a request to /maintenances/123 binds the Maintenance model instance with ID 123 to the corresponding controller parameter. While Snipe-IT employs Multiple Company Support (FMCS) to restrict cross-tenant exposure, it does not enforce granular individual-user access permissions at the database-binding level within the same company scope.
Without an explicit authorization check, the application implicitly trusts the request from any authenticated user. The endpoint serves the requested maintenance view without verifying whether the requesting session possesses the necessary view rights for the associated hardware asset. This allows any active account to retrieve potentially sensitive records.
To understand the technical mechanism of the vulnerability, we analyze the implementation of MaintenancesController::show prior to the patch. The vulnerable method directly returned the view template populated with the bound Maintenance model instance.
// Vulnerable Code Path
public function show(Maintenance $maintenance): View|RedirectResponse
{
return view('maintenances.view')->with('maintenance', $maintenance);
}The lack of access control is resolved by adding an explicit authorization check that links back to the parent asset's visibility rights. The corrected method invokes Laravel's native policy engine prior to rendering the final view template.
// Patched Code Path (Commit 69c50aa2aee25f837626556b4f4f3d05ec7ace96)
public function show(Maintenance $maintenance): View|RedirectResponse
{
+ $this->authorize('view', $maintenance->asset);
+
return view('maintenances.view')->with('maintenance', $maintenance);
}This remediation ensures that if the authenticated session lacks the permission to view the specific hardware asset linked to the maintenance, Laravel throws an AuthorizationException. This exception is subsequently caught by the framework handler to return an HTTP 403 Forbidden response.
Exploitation of CVE-2026-55703 is straightforward and requires only basic authenticated access to the target Snipe-IT instance. Since the application does not validate individual permissions for the show method, an attacker can perform an Insecure Direct Object Reference (IDOR) attack to enumerate sequential maintenance IDs.
An attacker begins by logging into their low-privileged user account to obtain a valid session cookie or API bearer token. They then construct and transmit an HTTP GET request targeting the /maintenances/{id} endpoint, replacing {id} with sequential integers to harvest data.
GET /maintenances/415 HTTP/1.1
Host: target-snipeit.local
Authorization: Bearer <user_token>
Accept: text/html,application/xhtml+xmlThe server responds with HTTP 200 OK and returns the HTML layout for the requested maintenance record. The returned document leaks sensitive data points including vendor details, hardware identifiers, purchase costs, internal notes, and service dates.
The security impact of this vulnerability is characterized as a partial loss of confidentiality. Because the vulnerability allows users to read unauthorized maintenance records, attackers can gain exposure to internal asset details, proprietary workflows, and financial information associated with physical assets.
Specifically, the leaked data fields include asset tags, supplier names, purchase values, and detailed action notes. These details can be leveraged to perform further social engineering attacks, mapping out internal infrastructure, or gathering competitive intelligence on hardware spend.
This vulnerability holds a CVSS v3.1 base score of 4.3 (Medium). The attack complexity is low, and the privilege required is low. The impact remains confined to confidentiality, with no integrity or availability degradation possible through this single exploit vector.
The recommended mitigation is to upgrade Snipe-IT to version 8.6.3 or later. This version implements the proper authorization checks in the MaintenancesController and provides comprehensive test cases to prevent regressions.
For administrators unable to apply the update immediately, several temporary workarounds help lower risk. Restrict access to the Snipe-IT interface to a trusted virtual private network (VPN) and audit active user accounts to ensure only authorized personnel have active logins. Additionally, monitoring application logs for anomalous sequential access patterns on /maintenances/ paths helps identify potential enumeration attempts.
To detect potential exploitation retrospectively, security teams can inspect web server access logs. Repeated, sequential GET requests to /maintenances/ originating from a single user session or IP address are indicative of automated IDOR enumeration.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N| Attribute | Detail |
|---|---|
| CWE ID | CWE-862 |
| Attack Vector | Network (AV:N) |
| CVSS v3.1 Score | 4.3 (Medium) |
| Impact | Partial Confidentiality Loss |
| Exploit Status | No public PoC |
| KEV Status | Not Listed |
The application fails to perform an authorization check when an actor attempts to access a resource.
CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.
In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.
A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.
An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.
ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.
CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.