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



GHSA-RXHG-VCWW-2MPW

GHSA-RXHG-VCWW-2MPW: SQL Injection via ORDER BY Column Injection in Fleet Activity List Endpoints

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 21, 2026·5 min read·3 visits

Executive Summary (TL;DR)

An authenticated SQL injection vulnerability in Fleet allows attackers to use the ORDER BY clause on activity endpoints as an inference oracle, enabling character-by-character database exfiltration.

A SQL injection vulnerability exists in the activity list endpoints of Fleet Device Management. Authenticated users can manipulate the order_key parameter to sort database queries by arbitrary columns, including columns not projected in the SELECT query. This flaw allows attackers to establish an inference oracle to extract sensitive information from the database.

Vulnerability Overview

The Fleet Device Management platform exposes endpoints for querying global and host-specific activities. These feeds assist administrators in auditing system events and monitoring state changes across enrolled devices. The endpoints are exposed to authenticated users via the HTTP endpoints /api/v1/fleet/activities and /api/v1/fleet/hosts/{id}/activities.

A weakness in the sorting logic allows users to pass unvalidated column names to the query-sorting component. The underlying application database layer constructs dynamic queries incorporating the client-supplied sorting parameters. Because structural query components like column names cannot be bound via parameterized placeholders, the application was susceptible to sorting parameter manipulation.

An attacker with an authenticated session can exploit this behavior to reference database columns containing confidential details. This leads to unauthorized data access and information disclosure by bypassing standard data access controls.

Root Cause Analysis

The vulnerability stems from the use of unsafe dynamic SQL generation in the ListActivities and ListHostPastActivities database abstraction layer methods. Standard SQL parameters utilize placeholders to isolate values from the execution logic. However, structural query modifiers such as ORDER BY identifiers and direction directives do not accept parameter placeholders in MySQL.

To bridge this gap, Fleet utilized a helper function named platform_mysql.AppendListOptionsWithParams to build the query. This helper attempted to sanitize inputs by wrapping identifier strings with backticks to avoid immediate syntax anomalies. The logic lacked a validation mechanism to cross-reference input fields against a list of authorized database columns.

Consequently, any arbitrary column name or SQL function supplied to the order_key parameter was integrated directly into the ORDER BY clause. This permitted the construction of an inference oracle where boolean-based assertions alter the sequence of returned rows. Attackers leverage the variations in result sorting to deduce confidential database contents piece by piece.

Code Analysis

The vulnerability was resolved in Pull Request #49624 by transitioning to an allowlist-based query builder. Developers introduced static validation maps (OrderKeyAllowlist) to explicitly limit the columns permitted in ORDER BY clauses.

// server/activity/internal/mysql/activity.go
 
var listActivitiesOrderKeys = platform_mysql.OrderKeyAllowlist{
  "id":              "a.id",
  "created_at":      "a.created_at",
  "user_id":         "a.user_id",
  "user_name":       "a.user_name",
  "name":            "a.user_name",
  "user_email":      "a.user_email",
  "activity_type":   "a.activity_type",
  "streamed":        "a.streamed",
  "fleet_initiated": "a.fleet_initiated",
}

The fix maps user-supplied keys directly to qualified column names, explicitly leaving out sensitive columns like details or host_only. The implementation substituted AppendListOptionsWithParams with a secure variant AppendListOptionsWithParamsSecure that enforces validation.

// Pre-patch call
// activitiesQ, args = platform_mysql.AppendListOptionsWithParams(activitiesQ, args, &opt)
 
// Post-patch call
activitiesQ, args, err := platform_mysql.AppendListOptionsWithParamsSecure(activitiesQ, args, &opt, listActivitiesOrderKeys)
if err != nil {
  return nil, nil, ctxerr.Wrap(ctx, err, "append list options")
}

This pattern guarantees that any unauthorized key triggers an immediate InvalidOrderKeyError. The API handler catches this exception and replies with an HTTP 422 Unprocessable Entity response, terminating execution before sending the query to the MySQL database engine.

Exploitation Methodology

Exploitation requires an active user session authorized to request the activities feed. The attacker targets either the global activity feed or a host-specific activities resource. The objective is to utilize the sorting output to infer values stored in columns containing credential configurations or secret parameters.

To construct the attack, the attacker crafts an HTTP request incorporating a conditional expression within the order_key parameter. This conditional expression tests a specific assertion against a target data field:

GET /api/v1/fleet/activities?order_key=(CASE+WHEN+(SELECT+SUBSTRING(details,1,1)+FROM+activities+WHERE+id=1)='a'+THEN+id+ELSE+created_at+END)&order_direction=asc HTTP/1.1
Host: target-fleet-server.com
Authorization: Bearer <token>

When the condition evaluates to true, the database orders results based on the id column. When false, ordering defaults to the created_at timestamp. By observing the structured arrangement of the array items in the response, the attacker verifies the validity of the hypothesized character. Repeating this mechanism across offset values allows the retrieval of entire strings from unprojected database cells.

Attack Flow and Mitigation

The diagram below outlines the execution flow of an incoming malicious request, illustrating how the lack of validation allowed SQL injection and how the mitigation blocks unauthorized parameters before database execution.

With the patched version, the flow changes to discard invalid fields early in the processing loop:

Impact Assessment

The primary consequence of this flaw is the unauthorized extraction of database attributes. Because activities include a generic details field, they often store sensitive structural configurations, environmental variables, or internal session details. Compromising these attributes lowers the barrier for horizontal privilege escalation within the platform.

The attack vector is restricted to authenticated sessions, meaning threat actors must already have legitimate credentials or a hijacked token. This constraint reduces the immediate risk profile of the flaw compared to unauthenticated remote code execution. However, inside threats or compromised regular accounts can leverage this vulnerability to gain high-level privileges.

No public proof-of-concept exploits exist, and there are no signs of exploitation in the wild. The vulnerability does not allow modification of database contents or arbitrary command execution on the host OS.

Official Patches

FleetDMPR #49624: Enforce ORDER BY allowlist on activity list endpoints

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Fleet Device Management Platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
Fleet
FleetDM
< 4.89.14.89.1
AttributeDetail
CWE IDCWE-89
Attack VectorNetwork (Authenticated)
Vulnerability TypeSQL Injection / Information Disclosure
CVSS v3.1 Score8.1
Exploit StatusNone / Theoretical
KEV StatusNot Listed
Affected ComponentActivity List Endpoints

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1592Gather Victim Host Information
Reconnaissance
T1020Automated Exfiltration
Exfiltration
CWE-89
Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

The software constructs an SQL command using externally-influenced input, but it does not neutralize or incorrectly neutralizes elements that can alter the intended SQL command.

Vulnerability Timeline

Pull Request #44385 is merged, removing deprecated query-building logic but leaving activity list endpoints unsecured.
2026-05-05
Fleet v4.89.0 is released, containing vulnerable activity sorting logic.
2026-07-15
Pull Request #49624 is opened to introduce strict allowlisting on dynamic order_key arguments.
2026-07-20
Pull Request #49624 is merged into the main development branch.
2026-07-30
Pull Request #51556 is opened to conduct further cleanup and security validation of remaining dynamic order queries.
2026-08-19

References & Sources

  • [1]GitHub Security Advisory GHSA-RXHG-VCWW-2MPW
  • [2]FleetDM Pull Request #49624
  • [3]FleetDM Legacy Cleanup Pull Request #44385
  • [4]FleetDM Validation Pull Request #51556
  • [5]Fleet Release v4.89.0

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-59995
4.2

CVE-2026-59995: Relative Path Traversal in OpenSSH sftp Client

A relative path traversal vulnerability (CWE-23) in the client-side sftp utility of OpenSSH before version 10.4 allows malicious or compromised SFTP servers to write or overwrite files outside the intended destination directory when a user executes a direct one-shot download command.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 4 hours ago•GHSA-7MPF-4465-7FC2
2.0

GHSA-7mpf-4465-7fc2: Stored Cross-Site Scripting in Winter CMS Backend List Widget

A Stored Cross-Site Scripting (XSS) vulnerability exists in the Backend List widget of Winter CMS (winter/wn-backend-module). When a list column is configured with the 'image' type and displays attacker-controlled input, the lack of sanitization in the image URL allows injection of arbitrary HTML attributes, potentially executing malicious scripts in the session of administrators viewing the list.

Amit Schendel
Amit Schendel
2 views•5 min read
•about 5 hours ago•GHSA-MPMW-F6H6-3G26
4.3

GHSA-mpmw-f6h6-3g26: Insecure Direct Object Reference in Winter CMS My Account Controller

An Insecure Direct Object Reference (IDOR) vulnerability was identified in Winter CMS version 1.2.13. The vulnerability exists within the newly introduced Backend\Controllers\MyAccount controller, which utilizes the FormController behavior without appropriate model query scoping or routing controls. This allows authenticated, low-privilege backend users to retrieve sensitive personal and administrative data of other backend accounts by enumerating record identifiers via standard CRUD routes.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 6 hours ago•GHSA-FM29-4MQ3-PHG6
8.1

GHSA-FM29-4MQ3-PHG6: Missing Authorization in Winter CMS ImportExportController Behavior

Winter CMS contains an authorization bypass vulnerability within its ImportExportController behavior. Due to a design flaw in the request lifecycle processing, permissions configured for data import and export operations are not validated during AJAX-based requests, allowing authenticated users with limited privileges to perform unauthorized data exfiltration or database manipulation.

Alon Barad
Alon Barad
4 views•5 min read
•about 7 hours ago•GHSA-5CWR-5JXG-PCF6
8.4

GHSA-5CWR-5JXG-PCF6: Stored Cross-Site Scripting via Improper Cache Sanitization in Winter CMS Custom Styles

Winter CMS versions prior to 1.2.14 are vulnerable to Stored Cross-Site Scripting (XSS) within the administrative backend interface. The flaw resides in the custom styles rendering pipeline for Brand Settings and Editor Settings. An attacker with privileges to modify backend branding or editor configurations can inject arbitrary JavaScript, which is written to the cache without sanitization. Subsequent page requests that result in a cache hit completely bypass output sanitization filters, leading to JavaScript execution in the sessions of other administrative users.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 8 hours ago•GHSA-P2CH-C2C3-4XM5
8.8

GHSA-P2CH-C2C3-4XM5: Cross-Site Request Forgery in Winter CMS AJAX Routing

Winter CMS contains a routing bypass vulnerability that allows Cross-Site Request Forgery (CSRF) attacks to trigger administrative AJAX handlers. Due to case-insensitivity in PHP's method resolution and an insufficiently strict check in the backend controller system, an attacker can invoke these handler methods through lowercase HTTP GET requests, bypassing default CSRF token validation.

Amit Schendel
Amit Schendel
4 views•4 min read