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-7XW9-549R-8JRC

GHSA-7XW9-549R-8JRC: SQL Injection and Improper Access Control in DIRAC PilotManager

Alon Barad
Alon Barad
Software Engineer

Jul 13, 2026·5 min read·13 visits

Executive Summary (TL;DR)

An authenticated user with low privileges can perform blind SQL injection and unauthorized administrative tasks in the DIRAC framework due to unsanitized input formatting and overly permissive default access controls.

The DIRAC PilotManager component contains combined security weaknesses: a SQL injection vulnerability (CWE-89) in the PilotAgentsDB database interaction layer, and an improper access control configuration (CWE-284) within the default authorization structure. A low-privilege authenticated attacker can bypass intended authorization checks to run administrative commands, manipulate grid job tracking records, and execute arbitrary SQL statements against the backend database.

Vulnerability Overview

The DIRAC (Distributed Infrastructure with Remote Agent Control) software framework manages computing jobs and infrastructure components across distributed cloud and grid systems. Within the DIRAC Workload Management System (WMS), the PilotManager component acts as a core service for handling active pilot agents, which are responsible for launching jobs on remote nodes. The execution path is vulnerable to unauthorized remote modification due to structural weaknesses in both its access control limits and query assembly interfaces.

This vulnerability consists of an authorization bypass (CWE-284) coupled with a SQL injection flaw (CWE-89). Under standard deployments, the default communication handler exposes endpoints to modify grid metadata, alter database fields, and inspect execution diagnostics. Because the system's access configurations are excessively broad by default, the attack surface of the internal administrative handlers is exposed directly to any valid user holding authenticated status.

Once an authenticated session is established, an attacker can construct specially crafted payloads within procedural remote parameters. These values feed into the SQL construction interface of the workload tracking database. The resulting chain allows standard users to compromise metadata confidentiality, disrupt active computational pipelines, and execute arbitrary command syntax within the storage backend.

Root Cause Analysis

The SQL injection vulnerability originates in src/DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.py within the setPilotStatus method. When pilot properties require updates, variables are aggregated and structured dynamically. Rather than utilizing parameterized bindings or parameterized SQL statements, the application constructs the raw database update statements directly by formatting raw strings using dynamic Python f-string operators.

Several parameter values, such as statusReason, gridSite, and queue, are converted directly to query components via string interpolation (e.g., setList.append(f"StatusReason='{statusReason}'")). These components are then combined with the dynamic target identifier to compose the complete execution string: req = f"UPDATE PilotAgents SET {set_string} WHERE PilotJobReference='{pilotRef}'". Because the class uses raw dynamic strings and executes them through standard database update procedures without structural containment, any single quote delimiter breaks out of the expected execution context.

Simultaneously, the improper authorization boundary resides inside the global configuration registry template at src/DIRAC/WorkloadManagementSystem/ConfigTemplate.cfg. Under the default configurations of the PilotManager daemon, the configuration block contains the parameter definition Default = authenticated. This definition permits any caller possessing a valid transport-layer security (TLS) user certificate to issue remote execution calls to endpoints exposed by PilotManagerHandler.py, bypassing the expected administrative authorization checks.

Code Analysis

An analysis of the vulnerable version of the source code highlights the absence of parameter escaping and input parsing. Below is the vulnerable segment of the setPilotStatus routine within PilotAgentsDB.py:

# Affected File: src/DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.py
def setPilotStatus(self, pilotRef, status, ...):
    setList = []
    setList.append(f"Status='{status}'")
    # ...
    if not statusReason:
        statusReason = "Not given"
    setList.append(f"StatusReason='{statusReason}'") # Direct dynamic interpolation
    # ...
    set_string = ",".join(setList)
    req = f"UPDATE PilotAgents SET {set_string} WHERE PilotJobReference='{pilotRef}'"
    return self._update(req, conn=conn) # Executed without parameterized arguments

The corresponding patch addresses this by migrating from dynamic format string updates to structured binding. The updated execution logic abstracts inputs by generating a list of positional formatting markers (%s) and feeding the unsanitized parameter values separately into the database adapter:

# Patched File: src/DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.py
def setPilotStatus(self, pilotRef, status, ...):
    setList = []
    args = []
    setList.append("Status=%s")
    args.append(status)
    # ...
    if not statusReason:
        statusReason = "Not given"
    setList.append("StatusReason=%s") # Placeholder replaces literal parameter interpolation
    args.append(statusReason)
    # ...
    set_string = ",".join(setList)
    req = f"UPDATE PilotAgents SET {set_string} WHERE PilotJobReference=%s"
    args.append(pilotRef)
    return self._update(req, args=args, conn=conn) # Safe execution via parameterized binding

In addition to database execution changes, the configuration registry must be updated to raise default authorization barriers. The system moves from a single broad default definition to distinct, granular, role-based definitions:

# Configuration change in src/DIRAC/WorkloadManagementSystem/ConfigTemplate.cfg
  PilotManager
  {
    Port = 9171
    Authorization
    {
-     Default = authenticated
+     Default = Operator
+     setPilotStatus = Operator
+     setPilotStatus += Pilot
+     setPilotStatus += GenericPilot
    }
  }

Exploitation Methodology

Exploitation of the vulnerability involves a two-phase attack sequence. First, the attacker connects to the DIRAC network port (typically port 9171 or the integrated Tornado HTTPS gate) using a basic authenticated TLS grid certificate. Because the default configuration designates Default = authenticated for the PilotManager service, the request is permitted by the interface logic, and the user is granted access to the exposed API methods.

Second, the attacker triggers the SQL injection flaw by executing the RPC API routine setPilotStatus. By inputting a crafted string payload into arguments such as statusReason, the attacker alters the structured execution flow of the SQL driver.

For example, setting the statusReason argument to "Injected', BenchMark=SLEEP(10) WHERE PilotJobReference='target-job" results in the generation of a dual-conditional SQL instruction. The database engine executes the command and triggers the SLEEP(10) instruction, confirming the vulnerability through a blind, time-based side channel.

Impact Assessment

The security implications of this chained vulnerability are substantial. An authenticated attacker can disrupt grid operations by manipulating active pilot jobs. By modifying job entries in the PilotAgents database, attackers can change job tracking workflows, terminate scheduled workload processes, or misroute remote computing operations.

Furthermore, because the SQL injection is executed within the context of the underlying database instance, attackers can run arbitrary SQL commands to read or modify other database tables. This allows for the extraction of cryptographic hashes, administrative details, and grid system credentials.

While this vulnerability does not allow direct shell commands on the server host, the ability to control database tables can lead to privilege escalation within the DIRAC application framework. The lack of proper input validation and authorization checks results in a CVSS v3.1 score of 8.5.

Official Patches

DIRACGridOfficial Security Advisory for GHSA-7XW9-549R-8JRC containing patch information

Technical Appendix

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

Affected Systems

DIRAC (Distributed Infrastructure with Remote Agent Control) framework Workload Management System

Affected Versions Detail

Product
Affected Versions
Fixed Version
DIRAC
DIRACGrid
>= 6, < 8.0.798.0.79
DIRAC
DIRACGrid
>= 8.1.0a1, < 9.0.229.0.22
DIRAC
DIRACGrid
>= 9.1.0, < 9.1.109.1.10
AttributeDetail
CWE IDCWE-89 (SQL Injection), CWE-284 (Improper Access Control)
Attack VectorNetwork
CVSS v3.1 Score8.5 (High)
Exploit Statusnone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-89
Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

The software constructs an SQL command using input from an upstream component, but fails to neutralize or incorrectly neutralizes elements that can modify the SQL command.

Vulnerability Timeline

Vulnerability identified and disclosed in GitHub Security Advisory database
2024-03-12
Official advisory published by DIRAC security team
2024-03-12
Patched releases published across 8.0, 9.0, and 9.1 software streams
2024-03-12

References & Sources

  • [1]GitHub Advisory Database Record
  • [2]GitHub Repository Security Advisory
  • [3]PyPI release reference 8.0.79
  • [4]PyPI release reference 9.0.22
  • [5]PyPI release reference 9.1.10
  • [6]Vulnerable Service Handler Source Reference
  • [7]Vulnerable Database Layer Source Reference
  • [8]Vulnerable Configuration Template Reference

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 1 hour ago•CVE-2026-55558
5.9

CVE-2026-55558: STARTTLS Response Injection in aiosmtplib

An input buffering vulnerability exists in the aiosmtplib asynchronous SMTP client library before version 5.1.2. When upgrading a plaintext connection to TLS via STARTTLS, the library processes buffered plaintext responses after transport negotiation has completed. This behavior allows a network-positioned attacker to inject spoofed server responses prior to negotiation, leading to command/response desynchronization, arbitrary capability injection, and potential credential theft.

Alon Barad
Alon Barad
2 views•6 min read
•about 2 hours ago•CVE-2026-54770
6.1

CVE-2026-54770: Open Redirect via Parser Differential in WebOb

An open redirect vulnerability exists in WebOb before version 1.8.11 due to a parser differential between WebOb's validation logic and Python's standard urllib.parse.urljoin() function. Under Python 3.10+, the urljoin function strips leading and trailing space characters and C0 control characters, which allowed specially crafted inputs to bypass WebOb's prefix checks while still resolving as off-host redirects.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 3 hours ago•CVE-2026-54687
6.1

CVE-2026-54687: Path Traversal via User-Controlled Database File Path in n8n-nodes-sqlite3

Prior to version 1.0.0, the n8n-nodes-sqlite3 integration exposed the db_path parameter as an unrestricted node parameter. By default, n8n node parameters allow the evaluation of dynamic data expressions, meaning untrusted external input could be mapped to the database path. This vulnerability allows an external attacker to control which SQLite database file the n8n backend process attempts to open, leading to directory traversal outside of the intended directory context.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 4 hours ago•CVE-2026-42350
5.1

CVE-2026-42350: Client-Side Open Redirect in Kargo UI OIDC Authentication Flow

A client-side open redirect vulnerability has been identified in the Kargo user interface. The flaw resides in the handling of OpenID Connect (OIDC) login and token renewal flows, where the application extracts an unvalidated destination path from the redirectTo query parameter. Attackers can exploit this to redirect authenticated users to arbitrary external domains.

Alon Barad
Alon Barad
3 views•6 min read
•about 5 hours ago•CVE-2026-54718
7.2

CVE-2026-54718: Remote Code Execution via Advanced Workflow Email Template in Silverstripe

A Server-Side Template Injection (SSTI) vulnerability in the Silverstripe Advanced Workflow module allows authenticated attackers with workflow authoring permissions to achieve arbitrary code execution. By manipulating the NotifyUsersWorkflowAction.EmailTemplate field, attackers can inject template code that dynamically executes arbitrary PHP commands via the core translation helper interpolation path.

Amit Schendel
Amit Schendel
8 views•4 min read
•about 6 hours ago•CVE-2026-54732
6.5

CVE-2026-54732: Arbitrary File Write via Path Traversal in libreoffice-convert

A path traversal and arbitrary file write vulnerability exists in the libreoffice-convert Node.js package in all versions prior to 1.8.2. The convertWithOptions function fails to validate or sanitize the caller-controlled options.fileName parameter, allowing directory traversal sequences to write files outside the temporary directory.

Amit Schendel
Amit Schendel
5 views•6 min read