AI Security Summit: Join Figma, Perplexity & Wiz. [Register]

CVE-2026-45579
Python vulnerability analysis and mitigation

Overview

CVE-2026-45579 is a critical remote code execution (RCE) vulnerability in the DIRAC (Distributed Infrastructure with Remote Agent Control) framework's RequestManager component, caused by the use of eval() on untrusted user input. Any authenticated user can exploit this flaw to execute arbitrary commands on the DIRAC server as the system user running DIRAC services. Affected versions include DIRAC >= 6 and < 8.0.79, >= 8.1.0a1 and < 9.0.22, and >= 9.1.0 and < 9.1.10 (pip package). The vulnerability was published on July 13, 2026, with patched versions released the same day. It carries a CVSS v3.1 base score of 9.9 (Critical) (GitHub Advisory, DIRAC Advisory).

Technical details

The root cause is CWE-95 (Improper Neutralization of Directives in Dynamically Evaluated Code — 'Eval Injection'). The vulnerable export_getRequestCountersWeb function in ReqManagerHandler.py (line 270) accepts a groupingAttribute parameter from any authenticated user and passes it directly to the database layer without validation. In RequestDB.py (lines 766–776), if the groupingAttribute is not a recognized value (e.g., "Type" or "Status"), the code prepends Request. to it and passes the resulting string into a Python eval() call within a SQLAlchemy query. An attacker can supply a Python dunder attribute string (e.g., __class__.__init__.__globals__) applicable to the Request object to traverse the object hierarchy back to the os module and invoke arbitrary OS-level functions. Additional uses of eval() in the ReqManager and RequestDB components may present similar attack surfaces (GitHub Advisory, DIRAC Advisory).

Impact

Successful exploitation grants any authenticated user full remote code execution on the DIRAC server as the system service account, enabling complete system compromise. An attacker can read the local dirac.cfg configuration file to extract database credentials, export all stored proxies and tokens, and pivot to connected systems or databases. If local logging is in use, the attacker can also delete evidence of the exploit from the RequestManager log, leaving only an exception printout as a potential indicator (GitHub Advisory, DIRAC Advisory).

Exploitability

There is no public proof-of-concept exploit code known at this time, and no evidence of in-the-wild exploitation has been reported. The vulnerability requires only low-privilege authenticated access (no special roles), making it accessible to any registered DIRAC user. The attack complexity is low and no user interaction is required, significantly lowering the barrier to exploitation. No CISA KEV catalog listing or threat actor attribution has been identified (GitHub Advisory).

Exploitation steps

  1. Authenticate to DIRAC: Obtain valid credentials for any DIRAC user account (low-privilege access is sufficient).
  2. Identify the vulnerable endpoint: Locate the export_getRequestCountersWeb RPC method exposed by the ReqManager service, accessible to all authenticated users.
  3. Craft a malicious groupingAttribute payload: Construct a Python dunder-based string that, when prepended with Request., forms a valid attribute traversal expression — for example, __class__.__init__.__globals__['os'].system — to reach the os module from the Request object.
  4. Send the malicious request: Call export_getRequestCountersWeb with the crafted groupingAttribute value. The server prepends Request. and passes the result to eval() inside a SQLAlchemy query in RequestDB.py.
  5. Achieve code execution: The eval() call resolves the dunder chain and invokes the target OS function (e.g., os.system) in the server context, executing arbitrary commands as the DIRAC service user.
  6. Post-exploitation: Read dirac.cfg for database passwords and service credentials, export stored proxies and tokens, and optionally delete RequestManager log entries to cover tracks (GitHub Advisory, DIRAC Advisory).

Indicators of compromise

  • Logs: Exception printouts in the RequestManager log (e.g., AttributeError or TypeError from failed eval() attempts, or unexpected SQLAlchemy query errors) associated with unusual groupingAttribute values containing dunder strings (e.g., __class__, __globals__, __init__).
  • Logs: Successful calls to export_getRequestCountersWeb with non-standard groupingAttribute parameters that do not match expected values (Type, Status, or known Request attributes).
  • File System: Unexpected access or modification of dirac.cfg; new files written to the DIRAC installation directory by the service account.
  • Process: Unusual child processes spawned by the DIRAC service process (e.g., shell commands, curl, wget, python, or network tools).
  • Network: Unexpected outbound connections from the DIRAC server to external IPs, particularly following authenticated API calls to the ReqManager service.
  • File System: Missing or truncated RequestManager log files, which may indicate an attacker attempting to remove evidence of exploitation (GitHub Advisory).

Mitigation and workarounds

Upgrade the DIRAC pip package to one of the patched versions: 8.0.79, 9.0.22, or 9.1.10, available on PyPI. As an interim workaround, restrict network access to DIRAC services to trusted and known users only, reducing the pool of potential attackers. Additionally, audit all other uses of eval() in the ReqManager and RequestDB components for similar injection risks. Removing or sandboxing the export_getRequestCountersWeb endpoint until patching is complete should also be considered (GitHub Advisory, DIRAC Advisory).

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-61667CRITICAL9.9
  • Python logoPython
  • dirac
NoYesSep 15, 2026
CVE-2026-45579CRITICAL9.9
  • Python logoPython
  • dirac
NoYesSep 15, 2026
CVE-2026-61668HIGH8.1
  • Python logoPython
  • dirac
NoYesSep 15, 2026
CVE-2026-55863MEDIUM5.3
  • Python logoPython
  • motioneye
NoYesSep 15, 2026
CVE-2026-53954MEDIUM4.3
  • Python logoPython
  • bugsink
NoYesSep 15, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management