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·21 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

•about 4 hours ago•GHSA-JHJP-4C2Q-XMX4
8.1

GHSA-JHJP-4C2Q-XMX4: Falco k8saudit Plugin Ruleset Bypass via initContainers and ephemeralContainers

A security feature bypass vulnerability in the Falco k8saudit plugin (and its cloud-specific variants) allowed privileged workloads to run undetected. This bypass occurred because the plugin's default extraction logic and rules only evaluated standard containers, completely omitting initContainers and ephemeralContainers.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 5 hours ago•CVE-2026-61630
4.2

CVE-2026-61630: Time-Based One-Time Password (TOTP) Reuse/Replay in nginx-ignition

nginx-ignition is a web-based user interface for managing the Nginx web server. In versions 2.33.0 through 2.35.0, the application is vulnerable to an improper authentication flaw (CWE-287) in its Multi-Factor Authentication (MFA) implementation. The stateless validation of Time-Based One-Time Passwords (TOTP) allows an attacker to reuse a captured, active verification code multiple times within the standard 30-second validity window, successfully bypassing secondary authentication checks if primary credentials are known.

Amit Schendel
Amit Schendel
8 views•5 min read
•about 6 hours ago•CVE-2026-61629
7.5

CVE-2026-61629: CPU Amplification Denial of Service via ParseAcceptLanguage Underscore Bypass

A vulnerability exists in the i18n middleware of nginx-ignition, enabling CPU amplification attacks. By transmitting a crafted Accept-Language header containing malformed tags separated by underscores, an unauthenticated remote attacker can bypass the length-guard threshold of the underlying Go parsing library. Normalization of underscores to hyphens occurs after the initial validation checks, forcing the parser into expensive quadratic-time loops that consume 100% of available CPU resources. This leads to a complete denial of service for the administrative API and potentially degrades the availability of the hosting system. This vulnerability has been resolved in version 2.40.1.

Alon Barad
Alon Barad
6 views•7 min read
•about 7 hours ago•CVE-2026-61628
8.1

CVE-2026-61628: Unauthenticated Admin Account Creation via Onboarding Race Condition in Nginx Ignition

Nginx Ignition prior to version 2.41.1 contains a Time-of-Check to Time-of-Use (TOCTOU) race condition in its unauthenticated onboarding API endpoint. This flaw allows remote, unauthenticated attackers to register an administrative account by sending concurrent HTTP requests during the initial system configuration phase, bypassing the check meant to restrict onboarding to a single initial administrator.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 13 hours ago•CVE-2026-61687
7.1

CVE-2026-61687: OAuth State Validation Bypass and Login CSRF in Hatchet

A logic error in Hatchet's OAuth state validation mechanism allows unauthenticated remote attackers to bypass state parameter verification. By submitting an empty state parameter, attackers can exploit an equality collision with cleared session keys, facilitating Login Cross-Site Request Forgery (Login CSRF) or Session Fixation.

Amit Schendel
Amit Schendel
9 views•10 min read
•3 days ago•CVE-2026-58197
8.8

CVE-2026-58197: Host Escape and Lateral Movement via Insecure Container Network Defaults in ToolHive

A high-severity access control vulnerability in ToolHive CLI before v0.30.1 and ToolHive Studio before v0.38.0 allows local containerized MCP servers to bypass network isolation. This enables malicious workloads to establish TCP/IP connections to administrative and control plane endpoints exposed on the host loopback interface.

Amit Schendel
Amit Schendel
12 views•8 min read