Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Network-reachable service callable by any authenticated user (PR:L) with a trivial eval payload (AC:L); scope changes (S:C) as service-account RCE exposes other users' proxies/tokens, yielding full C/I/A impact.
Primary rating from Vendor (https://github.com/DIRACGrid/DIRAC).
CVSS VectorVendor: https://github.com/DIRACGrid/DIRAC
Lifecycle Timeline
3DescriptionCVE.org
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/
AnalysisAI
Authenticated remote code execution in DIRAC's RequestManagementSystem lets any logged-in grid user run arbitrary commands as the DIRAC service account, enabling full compromise of the DIRAC installation. The flaw stems from an eval() call reachable through the export_getRequestCountersWeb service method, and successful exploitation exposes dirac.cfg secrets, database credentials, and all stored user proxies and tokens. Rated CVSS 9.9; no public exploit code has been released, though the vendor advisory documents a complete working exploitation path.
Technical ContextAI
DIRAC is a Python-based distributed computing (grid) middleware framework used to manage jobs, data, and workloads across federated computing resources, notably in high-energy physics communities. The vulnerable code lives in the RequestManagementSystem: the DISET service method ReqManagerHandler.export_getRequestCountersWeb (ReqManagerHandler.py) forwards caller-supplied parameters directly to RequestDB. In RequestDB.py, if the groupingAttribute value is not a recognized attribute, the code prepends 'Request.' to the raw string and passes the result into a Python eval() call. This is a textbook CWE-95 (Improper Neutralization of Directives in Dynamically Evaluated Code / 'Eval Injection'): untrusted input reaches a dynamic code evaluation sink. Because eval executes against a live Request object, an attacker can traverse Python dunder attributes (e.g., __class__, __bases__, __subclasses__/__globals__) to reach the os module and invoke system commands in the server process context. The CPE identifies the affected package as pkg:pip/dirac (PyPI 'DIRAC').
RemediationAI
Vendor-released patch: upgrade to DIRAC 8.0.79, 9.0.22, or 9.1.10, whichever matches your release line (8.0.x users go to 8.0.79, 8.1/9.0.x users go to 9.0.22, and 9.1.x users go to 9.1.10). Installation packages are at https://pypi.org/project/DIRAC/8.0.79/, https://pypi.org/project/DIRAC/9.0.22/, and https://pypi.org/project/DIRAC/9.1.10/, and full details are in advisory https://github.com/DIRACGrid/DIRAC/security/advisories/GHSA-9jpv-c7p4-997x. If immediate patching is not possible, restrict network access to the RequestManager service so it is reachable only from trusted hosts, and tighten DIRAC group/authorization policies so that only strictly necessary users hold accounts able to call ReqManagerHandler methods - bearing in mind the advisory notes that any authenticated user can trigger this, so limiting the authenticated user base directly reduces exposure. Because the vendor warns of other potentially reachable eval() uses in ReqManager/RequestDB, blocking or disabling the RequestManagementSystem service entirely (trade-off: request/operation management functionality is lost) is a stronger stopgap than trying to filter individual parameters. After patching, treat any secrets reachable from the server as compromised: rotate database passwords stored in dirac.cfg and re-issue affected proxies and tokens.
Same weakness CWE-95 – Eval Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-78894
GHSA-9jpv-c7p4-997x