---
id: "CVE-2026-45579"
page: "https://infrastack.ai/live/CVE-2026-45579"
kind: "vulnerability"
aliases: ["CVE-2026-45579", "GHSA-9jpv-c7p4-997x"]
title: "DIRAC is vulnerable to RCE in RequestManager due to eval on untrusted input"
severity: "critical"
cvss: 9.9
epss: 0.00864
exploited: false
status: "open"
category: "package"
products: [{"name": "DIRAC", "fixed": ["8.0.79"], "affected": ">= 6, < 8.0.79", "ecosystem": "pypi"}, {"name": "DIRAC", "fixed": ["9.0.22"], "affected": ">= 8.1.0a1, < 9.0.22", "ecosystem": "pypi"}, {"name": "DIRAC", "fixed": ["9.1.10"], "affected": ">= 9.1.0, < 9.1.10", "ecosystem": "pypi"}]
ecosystems: ["pypi"]
tags: ["cwe-95", "dirac", "grid-computing", "package", "python", "self-hosted"]
not_affected_if: ["fixed-version", "no-requestmanager-service"]
published_at: "2026-07-13T17:20:18+00:00"
first_seen_at: "2026-11-10T19:40:05+00:00"
updated_at: "2026-11-10T20:04:57+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-9jpv-c7p4-997x", "first_seen_at": "2026-11-10T19:40:05+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-45579", "first_seen_at": "2026-11-10T20:15:32+00:00"}]
exploit_sources: [{"type": "epss", "score": 0.00864, "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-45579"}]
---

# DIRAC is vulnerable to RCE in RequestManager due to eval on untrusted input

Link for people: https://infrastack.ai/live/CVE-2026-45579 (this .md is for agents)

DIRAC's RequestManager passes a user-supplied grouping attribute into a Python eval() call, so any authenticated user can reach os functions. An attacker who can log in can run commands as the account that runs the DIRAC services, then read dirac.cfg, database passwords and stored proxies and tokens.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- pypi:DIRAC affected >= 6, < 8.0.79 fixed 8.0.79
- pypi:DIRAC affected >= 8.1.0a1, < 9.0.22 fixed 9.0.22
- pypi:DIRAC affected >= 9.1.0, < 9.1.10 fixed 9.1.10

## How to check

- Check the installed DIRAC version with `pip show DIRAC` on each DIRAC server and compare it with the fixed versions below.
- Confirm whether the RequestManager service is reachable by any authenticated user in your deployment.

## Fix

- DIRAC `8.0.79` for the 8.0 line (affected from 6 up to before 8.0.79)
- DIRAC `9.0.22` for the 9.0 line (affected from 8.1.0a1 up to before 9.0.22)
- DIRAC `9.1.10` for the 9.1 line (affected from 9.1.0 up to before 9.1.10)

## Timeline

- 2026-11-10T19:40:05+00:00 ghsa https://github.com/advisories/GHSA-9jpv-c7p4-997x
- 2026-11-10T20:15:32+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-45579

## Documents

- [advisory] Maintainer's advisory: api.github.com https://api.github.com/repos/DIRACGrid/DIRAC/security-advisories/GHSA-9jpv-c7p4-997x
- [advisory] Maintainer's advisory: github.com https://github.com/DIRACGrid/DIRAC/security/advisories/GHSA-9jpv-c7p4-997x
- [fix] Patch: github.com https://github.com/DIRACGrid/DIRAC/commit/8ec11072f48103d94e8b7cca831e2c7ce304d6c7
- [fix] Patch: github.com https://github.com/DIRACGrid/DIRAC/commit/99f1af88b525e69a77f204aebf7d8df3b6056142
- [fix] Patch: github.com https://github.com/DIRACGrid/DIRAC/commit/a6f75ce5d369254d46ca6f1d39e3f384366fa396
- [fix] Release: github.com https://github.com/DIRACGrid/DIRAC/releases/tag/v8.0.79
- [fix] Release: github.com https://github.com/DIRACGrid/DIRAC/releases/tag/v9.0.22
- [fix] Release: github.com https://github.com/DIRACGrid/DIRAC/releases/tag/v9.1.10

## From the sources

### Summary
An remote code execution vulnerability exists in RequestManager due to the use of eval on untrusted input that allows any authenticated user to run code/commands on the DIRAC server as the system user running the DIRAC services.

### Details
The export_getRequestCountersWeb function is callable by any authenticated user and just passes its parameters directly to the database instance:
https://github.com/DIRACGrid/DIRAC/blob/f7e0a3ac153315030fb3520e8ca747f013758967/src/DIRAC/RequestManagementSystem/Service/ReqManagerHandler.py#L270

If the groupingAttribute string is unrecognised, `Request.` is prepended to it and the result is passed into an `eval()` call:
https://github.com/DIRACGrid/DIRAC/blob/f7e0a3ac153315030fb3520e8ca747f013758967/src/DIRAC/RequestManagementSystem/DB/RequestDB.py#L766-L776

By passing in a dunder string that is applicable to the Request object, it's possible to work back up to functions in the os module and trigger them to be called in the server context.

There are other uses of eval in ReqManager/RequestDB which may be equally accessible.

### Impact
This allows any authenticated user to run commands on the server, which allows a full compromise of the DIRAC system (they can read the local dirac.cfg, get database passwords and export all stored proxies and tokens). If local logging is used, they can also remove evidence of the exploit from the log (it leaves an exception printout in the RequestManager log when used).

### Patched versions:
https://pypi.org/project/DIRAC/8.0.79/
https://pypi.org/project/DIRAC/9.0.22/
https://pypi.org/project/DIRAC/9.1.10/

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
