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-63493

CVE-2026-63493: Multi-Factor Authentication Bypass via Stateless API Token Flow in Snipe-IT

Alon Barad
Alon Barad
Software Engineer

Sep 24, 2026·6 min read·18 visits

Executive Summary (TL;DR)

Flawed session validation allows password-authenticated users to bypass multi-factor authentication (MFA) by interacting directly with the API middleware group to generate persistent access tokens.

Snipe-IT prior to version 8.7.0 is vulnerable to an authentication bypass (CVE-2026-63493 / GHSA-hxcx-9h4f-42xx) within its Laravel Passport API integration. When multi-factor authentication (MFA/2FA) is enabled, an attacker possessing a victim's password can bypass MFA controls completely. This occurs because the Laravel middleware that enforces MFA was registered only in the stateful 'web' middleware group, leaving the stateless 'api' middleware group unguarded. Consequently, an attacker can use a valid password to initiate a session, bypass the MFA prompt on the web UI by communicating directly with the API, and generate a long-lived Personal Access Token (PAT) to perform unauthorized operations.

Vulnerability Overview

Snipe-IT is an open-source IT asset and license management system built on the Laravel PHP framework. The platform supports a hybrid architecture consisting of a stateful, session-based web user interface and a stateless, token-based REST API designed for automation and integration. Security boundaries within the application are established using middleware groups configured in the HTTP kernel.\n\nTo protect user accounts against credential theft, Snipe-IT supports multi-factor authentication (MFA/2FA) utilizing Time-Based One-Time Password (TOTP) mechanisms. When configured, users are prompted to supply a dynamic security code immediately after entering their primary password credentials. Until this verification is completed, web sessions are restricted from accessing system resources.\n\nCVE-2026-63493 defines an authentication bypass vulnerability within this security boundary. Because the middleware enforcing multi-factor verification was bound strictly to the 'web' routing group, the parallel 'api' routing group remained entirely unguarded. An attacker possessing primary credentials can pivot to the API channel, bypass the pending 2FA challenge, and establish persistent administrative control over the target system.

Root Cause Analysis

The underlying flaw stems from an architectural mismatch between Laravel's stateful session management and stateless API routing. In Snipe-IT, user login is handled via stateful web endpoints. When a user authenticates with their primary credentials, Laravel initiates an authenticated session and returns a cookie-based identifier. If MFA is active, the web middleware CheckForTwoFactor intercepts subsequent web requests and redirects the user to the /two-factor prompt.\n\nTo allow the user to load the challenge interface and authenticate, the CheckForTwoFactor middleware ignores specific exclusion routes defined in IGNORE_ROUTES. Because the /two-factor path is excluded, requests to it are permitted to complete. Immediately following this middleware in the execution chain is CreateFreshApiToken, which automatically issues a Laravel Passport session cookie named snipeit_passport_token to the user's browser.\n\nCrucially, the API routing group defined in routes/api.php does not execute the CheckForTwoFactor middleware. The API group relies on the auth:api guard, which accepts the newly generated snipeit_passport_token cookie along with the session's XSRF token. Because the API lacks any mechanism to check whether the active session has successfully solved the pending web-based MFA challenge, it processes transactions as fully authorized, bypassing the 2FA enforcement layer.

Code and Path Analysis

Prior to version 8.7.0, the api middleware array in app/Http/Kernel.php did not include any verification logic for two-factor enrollment or completion. This configuration permitted any token-bearing request to execute controller actions unhindered, provided the token mapped to a valid user account. The following Mermaid diagram illustrates the dual-path vulnerability where the web route is gated but the API route remains entirely unguarded:\n\nmermaid\ngraph LR\n A["User Login (Password Only)"] --> B["Web Middleware Group"]\n B --> C["CheckForTwoFactor Middleware"]\n C -->|Redirect| D["MFA Challenge Prompt (/two-factor)"]\n D --> E["CreateFreshApiToken (Issues Passport Cookie)"]\n E --> F["API Middleware Group (No MFA Check)"]\n F --> G["POST /api/v1/account/personal-access-tokens"]\n G --> H["Generate Persistent Bearer Token"]\n\n\nThe remediation introduced in pull request #19294 registers a new middleware class, EnforceApiTwoFactorEnrollment, directly into the api middleware array. This class intercepts every inbound REST API transaction immediately after token resolution via the auth:api guard. The middleware inspects the application's global configuration settings to determine whether 2FA is active, and subsequently checks the target user account's enrollment state.\n\nIf the application requires 2FA and the authenticated user account has not enrolled a secondary authentication factor, the middleware terminates the pipeline and returns a 403 Forbidden response. This design maintains the stateless property of the REST API while preventing un-enrolled accounts from using API endpoints, closing the alternate authentication channel. Below is the essential implementation logic of the newly introduced middleware:\n\nphp\n// app/Http/Middleware/EnforceApiTwoFactorEnrollment.php\n$mode = (string) $settings->two_factor_enabled;\nif ($mode !== '1' && $mode !== '2') {\n return $next($request);\n}\n\nif ($mode === '1' && (string) $user->two_factor_optin !== '1') {\n return $next($request);\n}\n\nif ((string) $user->two_factor_enrolled !== '1') {\n return response()->json(\n Helper::formatStandardApiResponse('error', null, trans('auth/message.two_factor.please_enroll')),\n Response::HTTP_FORBIDDEN,\n );\n}\n

Exploitation Methodology

To exploit CVE-2026-63493, an attacker must first obtain the primary username and password of a valid Snipe-IT user account. The attacker sends a POST request containing these credentials to the stateful /login endpoint. Upon receipt of a successful response, the target web application establishes an authenticated session but restricts the browser within the /two-factor execution bubble, preventing standard administrative interactions through the web console.\n\nBecause the /two-factor route is exempted from the blocking middleware to permit TOTP submission, the CreateFreshApiToken middleware runs and places the snipeit_passport_token cookie into the browser's cookie jar. The attacker extracts this cookie alongside the matching CSRF token (XSRF-TOKEN). Armed with these cryptographic elements, the attacker shifts focus away from the stateful web client and addresses the stateless REST API.\n\nThe attacker issues a POST request to /api/v1/account/personal-access-tokens passing the passport cookie and the XSRF token as HTTP headers. Since the API routing group is processed by the auth:api guard and lacks the CheckForTwoFactor check, the application verifies the session validity and generates a persistent Personal Access Token. This token possesses a default longevity of forty years and acts as a long-lived credential, bypassing the web-based MFA requirement entirely.

Impact Assessment

The primary security consequence of this vulnerability is the complete compromise of multi-factor authentication guarantees for any account where the attacker has acquired primary password credentials. This changes the security model from multi-factor to single-factor authentication. If the target account possesses administrative privileges within Snipe-IT, the downstream impacts are significant.\n\nWith a minted Personal Access Token, the attacker gains full programmatic control over the Snipe-IT asset registry, user database, and security configurations. The attacker can manipulate, export, or destroy sensitive asset inventory, hardware data, and proprietary configuration data. This compromise undermines the integrity of internal hardware supply chain records and software license allocations.\n\nFurthermore, the attacker can leverage the administrative API to reset the target account's multi-factor configuration by submitting a POST request to the /api/v1/users/{id}/two_factor_reset endpoint. Once the 2FA state is reset, the attacker can log in through the web interface, register a new attacker-controlled MFA device, and permanently lock out the legitimate system administrator.

Remediation and Detection Guidance

Remediation requires upgrading Snipe-IT instances to version 8.7.0 or higher. This update alters the configuration in app/Http/Kernel.php to register the EnforceApiTwoFactorEnrollment middleware into the API pipeline. This modification ensures that any API request backed by an unenrolled account is rejected with a 403 Forbidden status, neutralizing the capability of password-only sessions to generate tokens.\n\nTo identify potential exploitation, defenders should analyze web server access logs for anomalous transaction sequences. A suspect sequence is characterized by a successful POST to /login, followed by a GET to /two-factor, followed immediately by a POST to the /api/v1/account/personal-access-tokens endpoint. In legitimate usage, the login and MFA verification would occur on the web layer before any API interactions take place.\n\nSecurity teams should audit the database tables for newly created Laravel Passport personal access tokens. Inspect the oauth_access_tokens table for entries created near any suspicious login alerts. Any token generated by an account that had not previously completed MFA registration must be treated as untrusted and revoked immediately.

Official Patches

grokabilityPull Request #19294: Fix 2FA bypass via API token flow

Fix Analysis (2)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Affected Systems

Snipe-IT

Affected Versions Detail

Product
Affected Versions
Fixed Version
Snipe-IT
grokability
< 8.7.08.7.0
AttributeDetail
CWE IDCWE-288
Attack VectorNetwork (AV:N)
CVSS v4.0 Score8.6 (High)
Exploit StatusProof-of-Concept (PoC) available
EPSS ScoreNot available
CISA KEV StatusNot listed

MITRE ATT&CK Mapping

T1556.006Modify Authentication Process: Multi-Factor Authentication
Credential Access
T1078Valid Accounts
Defense Evasion
CWE-288
Authentication Bypass Using an Alternate Path or Channel

The product provides multiple paths or channels to access a resource, but one of those paths does not require authentication or uses weaker authentication than other paths.

References & Sources

  • [1]GitHub Security Advisory GHSA-hxcx-9h4f-42xx
  • [2]CVE Record CVE-2026-63493

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

•1 day ago•CVE-2026-16454
4.3

CVE-2026-16454: Object-Level Authorization Bypass in Eclipse hawkBit Direct Device Integration Controller

CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.

Amit Schendel
Amit Schendel
10 views•9 min read
•2 days ago•CVE-2026-62284
8.6

CVE-2026-62284: Remote Code Execution and SSRF via Unsanitized Kubeconfig in OSAC Operator

CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.

Amit Schendel
Amit Schendel
8 views•8 min read
•2 days ago•CVE-2026-62361
5.5

CVE-2026-62361: Authenticated SQL Injection and Table Access Control Bypass in Listmonk Subscriber Export

CVE-2026-62361 (GHSA-xgjr-7j9q-2h4r) is an authenticated SQL injection and authorization bypass vulnerability in listmonk, an open-source, self-hosted newsletter and mailing list manager written in Go. In versions prior to 6.2.0, the subscriber export endpoint (GET /api/subscribers/export) directly interpolates user-supplied SQL filter expressions into a PostgreSQL query without invoking the table allowlist validation function (validateQueryTables). Consequently, authenticated users possessing the subscribers:sql_query and subscribers:get_all permissions can bypass relational access controls, execute arbitrary subqueries against restricted tables such as users and settings, and modify database state via writable Common Table Expressions (CTEs).

Alon Barad
Alon Barad
9 views•11 min read
•2 days ago•CVE-2026-28385
5.0

CVE-2026-28385: Server-Side Request Forgery in Canonical LXD Image Import

CVE-2026-28385 (GHSA-3gq2-x4qg-p4g6) is a Server-Side Request Forgery (SSRF) vulnerability in Canonical LXD versions 4.12 through 6.9. An authenticated user possessing the can_create_images entitlement can force the LXD daemon to execute arbitrary outbound HTTP and HTTPS requests via the /1.0/images API endpoint. Due to the absence of egress destination validation, an attacker can probe host loopback services, RFC 1918 private network segments, and cloud Instance Metadata Services (IMDS) from the network position of the privileged LXD daemon.

Amit Schendel
Amit Schendel
10 views•9 min read
•2 days ago•GHSA-9J25-MM2H-2F76
9.9

CVE-2026-48750: Arbitrary File Write on Host via exec-output Symlink in Canonical LXD and Incus

Canonical LXD and LXC Incus contain an arbitrary file write vulnerability (CWE-73 / CWE-59) in the `/1.0/instances/<name>/exec` REST API endpoint. When an instance is unpacked from an image archive, top-level symbolic links are extracted directly onto the host filesystem within the instance storage directory. If a crafted image includes a symbolic link named `exec-output` pointing to an arbitrary host path, invoking the execution endpoint with `record-output: true` causes the privileged host daemon to follow the symlink and write command output files directly to the target host directory. An authenticated attacker with permissions to import images and execute commands can exploit this flaw to write controlled content to sensitive host directories such as `/etc/cron.d`, resulting in arbitrary code execution on the host as `root`.

Alon Barad
Alon Barad
8 views•12 min read
•2 days ago•GHSA-VGHH-5RFX-XHQ8
9.9

CVE-2026-48749: Arbitrary Host File Read and Write via Malicious Image Symlink in Canonical LXD and Incus

CVE-2026-48749 (tracked as GHSA-vghh-5rfx-xhq8 for LXD and GHSA-2q3f-q5pq-g8wv for Incus) is a critical container escape vulnerability in the Canonical LXD and Linux Containers Incus system container managers. By importing a specially crafted container image archive containing duplicate tar member headers, an authenticated attacker can replace the instance rootfs directory with a symbolic link pointing to the underlying host root filesystem. When performing file operations on a stopped container, the privileged forkfile helper binary resolves the symbolic link without confinement and chroots directly into the host filesystem, granting arbitrary root-level file read and write access.

Amit Schendel
Amit Schendel
8 views•9 min read