Aug 20, 2026·5 min read·2 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-55694 is a chained Information Disclosure and Insecure Direct Object Reference (IDOR) vulnerability in Snipe-IT prior to version 8.6.3. The vulnerability allows authenticated, restricted users to completely bypass randomized file-naming security controls, leak the obfuscated filenames of signed End User License Agreements (EULAs), and subsequently download these confidential documents across tenant boundaries.
A Stored DOM-based Cross-Site Scripting (DOM XSS) vulnerability exists in Snipe-IT versions prior to 8.6.2. The vulnerability occurs when a stored manufacturer or supplier name is converted to CamelCase and rendered within the 'data-selected-count-id' attribute of a table. Client-side JavaScript retrieves this decoded attribute and performs unsafe string concatenation, passing it directly into jQuery's '.after()' method, enabling authenticated attackers to execute arbitrary JavaScript in the victim's session.
CVE-2026-62673 (also known as CVE-2026-62230 and GHSA-vwg3-w8w3-pc79) is a high-severity security bypass vulnerability in the Grav CMS. It permits unauthenticated remote attackers to circumvent directory and file access policies defined in Apache .htaccess. This flaw allows direct retrieval of sensitive configuration files, system-level credentials, and database equivalents from case-insensitive host filesystems.
A credential disclosure vulnerability in the mcp-searxng NPM package prior to version 1.12.0 allows attackers to recover plain-text SearXNG Basic Authentication credentials. The application exposes these credentials via console logs (stderr), MCP logging notifications, validation error messages, and JSON-RPC error responses. This occurs because the application lacks comprehensive sanitization across diagnostic boundaries when credentials are parsed from the SEARXNG_URL environment variable.
A detailed technical analysis of CVE-2026-61711, an input validation flaw in Moby BuildKit prior to version 0.31.1. The flaw allows unauthorized or custom frontends to construct build execution environments where Seccomp and AppArmor configurations are completely disabled by supplying an invalid protobuf enum index, resulting in an elevated kernel-level attack surface inside the build sandbox.
moby/buildkit is susceptible to a denial-of-service vulnerability prior to version 0.31.1. When BuildKit processes user or group directives from untrusted build contexts or base images, it reads configuration databases such as /etc/passwd and /etc/group directly into memory without enforcing boundaries. An attacker can exploit this behavior by engineering malicious files that trigger host memory exhaustion or block daemon threads indefinitely.