CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-48493

CVE-2026-48493: Self-Privilege Escalation via Profile Modification in Snipe-IT

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 24, 2026·5 min read·16 visits

Executive Summary (TL;DR)

Authenticated users with 'users.edit' can modify their own accounts via the API to self-grant arbitrary permissions, excluding global admin/superuser roles.

A privilege escalation vulnerability in Snipe-IT versions prior to 8.6.0 allows authenticated users with profile-editing capabilities to elevate their own permissions by performing a PATCH request on their own user endpoint.

Vulnerability Overview

Snipe-IT is an open-source IT asset management system designed to track hardware, software licenses, and users. Within its authorization architecture, granular permissions dictate which actions users can take, such as creating assets, checking out licenses, or viewing reports. This vulnerability exists within the user-management boundary.\n\nUnder vulnerable configurations, any authenticated user possessing the 'users.edit' permission and API access can manipulate their own permissions. By issuing an authorized update request to their own user profile endpoint, they circumvent intended authorization controls.\n\nThe flaw is classified under CWE-863 (Incorrect Authorization). Although the system implements access control checks, it fails to enforce restrictions when the target of a profile-editing action matches the identity of the requester. This allows lateral and vertical privilege escalation up to almost all non-administrative privileges.

Root Cause Analysis

The core weakness resides within the logic implemented in PreserveUnauthorizedPrivilegedPermissionsAction::run(). This action class acts as a filter to ensure that users do not grant permissions they themselves do not possess or are not authorized to assign. In vulnerable versions, this function accepted $requestedPermissions, $authenticatedUser, and $originalPermissions as inputs.\n\nWhile the logic successfully prevented non-superusers from assigning the global admin or superuser roles, it did not differentiate between editing another user and editing oneself. If a user possessed the generic users.edit capability, they were permitted to make modifications to user profiles.\n\nBecause the endpoint allowed a user to direct edit actions to their own profile identifier (/api/v1/users/{id}), the application ran the validation sequence against the user's own profile. Due to the lack of target context inside PreserveUnauthorizedPrivilegedPermissionsAction, the application accepted the payload, effectively letting the user self-authorize higher-level application access.

Code Analysis and Differential Patch

To fix this vulnerability, the development team modified the signature and logic of PreserveUnauthorizedPrivilegedPermissionsAction::run(). The function now accepts a fourth nullable parameter: ?User $targetUser = null. This parameter provides the context of which specific database record is being modified.\n\nA conditional branch was introduced at the beginning of the run method. If a target user object is provided, the authenticated user is not a superuser, and the authenticated user's ID matches the target user's ID, the function immediately discards the request. It returns the pre-existing, unmodified permissions array, effectively preventing self-modification.\n\nBelow is the core logic fix demonstrating the target validation block:\n\nphp\n// Patched logic in app/Actions/Permissions/PreserveUnauthorizedPrivilegedPermissionsAction.php\npublic static function run(array $requestedPermissions, User $authenticatedUser, array $originalPermissions = [], ?User $targetUser = null): array\n{\n // Disallow non-admin/superuser users from modifying their own permissions\n if ($targetUser && !$authenticatedUser->isSuperUser() && $authenticatedUser->id === $targetUser->id) {\n return $originalPermissions;\n }\n // ... standard validation checks continue below\n}\n\n\nIn addition, the controller classes (app/Http/Controllers/Api/UsersController.php and app/Http/Controllers/Users/UsersController.php) were updated to forward the target user ($user) during the profile update flow. This ensures the action class has the required context to prevent self-escalation regardless of whether the request originates from the API or the web UI.

Exploitation and Attack Lifecycle

Exploitation of this vulnerability requires an established user session or a Personal Access Token with API and users.edit permissions. The attacker first resolves their own user identifier by calling the active user endpoint. Once the identifier is obtained, they construct a crafted payload targeting their own user record.\n\nThe attacker issues a standard HTTP PATCH request to the /api/v1/users/{id} endpoint. The payload contains a permissions object setting target privileges to "1" (enabled). For example, the attacker can enable permissions such as assets.create, licenses.edit, and reports.view.\n\nBelow is the data flow representing how the input is handled across the vulnerable boundaries:\n\nmermaid\ngraph LR\n Attacker["Attacker (users.edit)"] -->|PATCH /api/v1/users/self| API["Api/UsersController"]\n API -->|Validates session/token| Action["PreserveUnauthorizedPrivilegedPermissionsAction"]\n Action -->|Checks for admin/superuser only| DB["Database Save"]\n DB -->|Saves escalated permissions| Attacker\n\n\nBecause the vulnerability does not require complex heap shaping, timing, or external dependencies, exploitation is highly reliable. Any endpoint interaction that bypasses the frontend validation and directly calls the API controller will successfully store the escalated privileges in the database.

Impact Assessment

The impact of successful exploitation is a complete compromise of the authorization model within the affected Snipe-IT instance. An attacker can elevate their privileges to encompass almost all non-administrative operational roles. This includes full read, write, update, and delete access across assets, accessories, components, and licenses.\n\nWith elevated access, an attacker can exfiltrate sensitive corporate asset logs, modify system databases to mask physical theft, or alter user assignments. However, because the vulnerability explicitly blocks the assignment of the global admin and superuser roles, the attacker cannot access core administrative panel settings.\n\nThis restriction maintains the CVSS base score at 5.5, indicating a moderate impact. Nevertheless, in environments where Snipe-IT handles critical enterprise logistics or active asset inventories, this vulnerability poses a significant insider threat risk.

Remediation and Defense

The primary and most effective remediation is upgrading Snipe-IT to version 8.6.0 or higher. This release contains the complete validation fix across both the API and UI routes. Administrators should verify their deployments and execute standard upgrade procedures immediately.\n\nIn environments where an immediate upgrade is not feasible, administrators must implement workarounds. The most effective tactical mitigation is to audit all active user permissions and temporarily revoke users.edit and API access from any account that does not strictly require administrative capabilities.\n\nAdditionally, monitoring web server access logs for suspicious activity is advised. Security teams should query for HTTP PATCH requests targeting /api/v1/users/ where the requesting user's identity matches the URL parameter, followed by database validation to confirm whether unauthorized permission states exist.

Official Patches

GrokabilityOfficial patch pull request resolving unauthorized self-privilege escalation

Fix Analysis (1)

Technical Appendix

CVSS Score
5.5/ 10
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:N

Affected Systems

Snipe-IT prior to 8.6.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
Snipe-IT
Grokability
< 8.6.08.6.0
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS Score5.5
EPSS ScoreNot Indexed
ImpactPrivilege Escalation
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly prove that the actor is authorized to perform that action or access that resource.

References & Sources

  • [1]Official GitHub Advisory Page
  • [2]Official Fix Pull Request
  • [3]CVE Record Details

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•42 minutes ago•CVE-2026-71556
7.1

CVE-2026-71556: Symbolic Link Directory Traversal in go-git

A symbolic link directory traversal vulnerability was identified in go-git, a pure Go implementation of the Git specification. This vulnerability allows an attacker to construct a repository that, when checked out or processed, bypasses directory boundaries to write or overwrite arbitrary files on the host filesystem.

Amit Schendel
Amit Schendel
0 views•5 min read
•about 2 hours ago•CVE-2026-71557
6.3

CVE-2026-71557: Path Traversal and Configuration Overwrite in go-git Filesystem Storage Engine

CVE-2026-71557 is a path traversal vulnerability in go-git, a pure-Go implementation of Git. In vulnerable versions, the filesystem-backed storage engine fails to validate reference names before mapping them to on-disk paths. An attacker hosting a malicious Git server can advertise references containing directory traversal sequences, such as 'refs/heads/../../config', to write or overwrite files outside the intended reference storage directory.

Amit Schendel
Amit Schendel
1 views•7 min read
•about 3 hours ago•GHSA-7C4V-FWGW-9RF7
5.3

GHSA-7c4v-fwgw-9rf7: Nuxt Dev Server Discloses Project Root and Workspace UUID via Chrome DevTools Endpoint

An information disclosure vulnerability in the Nuxt development server allows adjacent network attackers to retrieve the absolute project root directory and a persistent workspace UUID by querying the unprotected Chrome DevTools workspace endpoint. This occurs when the development server is bound to a network-reachable interface, allowing requests that bypass the header-based security verification checks.

Alon Barad
Alon Barad
1 views•7 min read
•about 4 hours ago•CVE-2026-66062
5.3

CVE-2026-66062: Regular Expression Denial of Service (ReDoS) in SvelteKit Content Negotiation

A Regular Expression Denial of Service (ReDoS) vulnerability exists in SvelteKit's content negotiation header parser prior to version 2.70.2. An unauthenticated remote attacker can exploit this vulnerability by sending a crafted Accept header with highly repetitive malformed values. This triggers catastrophic backtracking on the single-threaded Node.js/Bun event loop, leading to CPU exhaustion and full denial of service.

Alon Barad
Alon Barad
2 views•6 min read
•about 5 hours ago•CVE-2026-15895
8.4

CVE-2026-15895: OS Command Injection in AWS jsii-diff CLI

An OS command injection vulnerability exists in the npm package loading component of the jsii-diff CLI tool within the AWS jsii framework. Prior to version 1.131.0, when parsing package specifiers prefixed with `npm:`, the tool concatenated user-controlled inputs directly into a shell execution string via child_process.exec. This allows attackers to execute arbitrary shell commands under the context of the running Node.js process.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 6 hours ago•CVE-2026-63220
4.8

CVE-2026-63220: Trust of Untrusted Reverse Proxy Headers in CodeIgniter4

CodeIgniter4 versions prior to v4.7.4 contain a protocol-spoofing vulnerability due to improper verification of upstream reverse proxy forwarding headers. Remote, unauthenticated attackers can inject headers like X-Forwarded-Proto to deceive the framework into identifying an insecure HTTP request as a secure HTTPS connection.

Alon Barad
Alon Barad
4 views•7 min read