CVE-2020-7388
Executive Summary
CVE-2020-7388 is a critical unauthenticated remote command execution (RCE) vulnerability in the Sage X3 enterprise resource planning (ERP) suite, specifically within the AdxDSrv.exe component. A remote attacker who can reach the AdxAdmin service can bypass credential validation entirely by manipulating the client-side authentication request, leading to arbitrary command execution with SYSTEM privileges on the underlying Windows server. The vulnerability carries a CVSS score of 10.0 and is chained with CVE-2020-7387 (which discloses the installation path) to achieve full compromise without any prior authentication. All on-premises Sage X3 deployments running unsupported or unpatched versions are at risk; the fix is delivered via AdxAdmin 93.2.53, bundled with specific Syracuse releases listed in the NVD description.
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
Technical Analysis
Sage X3 is a full-suite ERP platform deployed on-premises in manufacturing, distribution, and financial services organizations. The platform includes the AdxAdmin administrative service, which is exposed on the network and is implemented in the AdxDSrv.exe Windows service process. The vulnerability is classified as an authentication bypass that leads to remote command execution in the context of the SYSTEM account — the highest privilege level available on a Windows host.
The root cause lies in the client-side authentication validation logic. The flaw falls under CWE-287 (Improper Authentication): the server trusts a client-supplied authentication state rather than independently verifying credentials or session integrity. According to the NVD description, "by editing the client-side authentication request, an attacker can bypass credential validation." This indicates that the authentication mechanism relies on a field or token transmitted from the client that can be manipulated to assert a pre-authenticated or admin-level state. The server-side validation does not cryptographically bind the request to a legitimate authentication flow, so a crafted request is accepted as valid without requiring a username or password.
The attack surface is the AdxAdmin network-accessible service. Because the service runs on Windows and the component is named AdxDSrv.exe, the execution context is SYSTEM — meaning any successful command injection or code execution results in full compromise of the operating system, including access to all local files, credentials, security accounts manager (SAM) database, and any domain trust relationships the host participates in. The NVD description explicitly notes that exploitation "does require knowledge of the installation path." This constraint prevents trivial blind exploitation, but the requirement is met by chaining with CVE-2020-7387, a separate vulnerability that discloses the installation path. Together, the two flaws form a complete, unauthenticated remote compromise chain.
The fix was published in AdxAdmin 93.2.53. The NVD description states the corrected component ships with updates for on-premises Sage X3 versions: Version 9 (Syracuse 9.22.7.2 and later), Sage X3 HR & Payroll Version 9 (Syracuse 9.24.1.3), Version 11 (Syracuse 11.25.2.6 and later), and Version 12 (Syracuse 12.10.2.8 and later). Versions of Sage X3 that are no longer supported by the vendor do not receive the update and remain permanently exposed.
Exploitation Scenarios
The attack chain for CVE-2020-7388 is a two-step unauthenticated remote compromise. The NVD description confirms the dependency on CVE-2020-7387 for path disclosure.
Step 1 — Reconnaissance and Target Identification:
The attacker first identifies internet-facing or network-reachable Sage X3 installations. Shodan queries such as title:"Sage X3" or http.html:"AdxAdmin" can locate exposed admin interfaces. The attacker also probes for the AdxAdmin service port. At this stage, no authentication is required.
Step 2 — Installation Path Disclosure (CVE-2020-7387): The attacker exploits CVE-2020-7387 to learn the Sage X3 installation path on the target server. This is a necessary precondition because the command execution in CVE-2020-7388 requires knowledge of the file system location where the Sage X3 binaries and configuration files reside. This step requires no credentials and is typically a single crafted request to the same AdxAdmin service.
Step 3 — Authentication Bypass via Request Manipulation: With the installation path known, the attacker crafts a client-side authentication request to the AdxDSrv.exe service. The request modifies the authentication data such that the server-side validation is bypassed. Because the server trusts the client-supplied authentication state, the attacker gains an authenticated administrative session without submitting valid credentials. The specific field manipulated is not disclosed in public advisories, but the vulnerability class (improper client-side trust) means the attacker alters a session flag, token, or header to assert an already-authenticated state.
Step 4 — Command Execution as SYSTEM: Using the authenticated session, the attacker submits a command that the AdxDSrv.exe service executes locally. Because the service runs as the SYSTEM account, the command executes with the highest integrity level on the Windows host. The NVD description confirms this: "Unauthenticated Remote Command Execution (RCE) as SYSTEM in AdxDSrv.exe component." The payload is platform-specific (e.g., PowerShell or cmd.exe invocation) and is limited only by the command execution surface of the service, which — for an ERP administrative component — typically includes file operations, process spawning, and configuration modifications.
Post-Exploitation Impact: Full SYSTEM access grants the attacker the ability to: install persistent malware or ransomware; extract credentials from the local Security Accounts Manager (SAM) database, cached domain credentials, and credential vaults; enumerate and compromise other hosts on the corporate network; read or exfiltrate all ERP data (financial records, HR records, payroll data, supply chain information); and disable security tooling. If the host is domain-joined, the attacker can use standard post-exploitation techniques (DCSync, Kerberoasting, golden ticket forgery) to escalate to domain administrator privileges. The blast radius is the entire ERP environment and any system connected to the compromised host.
No public proof-of-concept or exploit code has been released for CVE-2020-7388 as of this report. The EPSS score of 0.69444 (99.3rd percentile) indicates that the vulnerability is highly likely to be actively exploited and should be treated as a priority for remediation.
Impact Assessment
The business impact of CVE-2020-7388 is severe. Sage X3 is used for mission-critical ERP operations — including accounting, inventory, manufacturing, payroll, and human resources. A full compromise of the ERP server exposes:
- Financial data: General ledger entries, accounts payable/receivable, bank account details, payment routing information.
- Human resources data: Personally Identifiable Information (PII) of all employees, including social security numbers, bank details, salary data, and performance records — triggering GDPR/CCPA notification obligations and potential regulatory fines.
- Intellectual property: Manufacturing bills of materials, engineering change orders, supplier pricing, and proprietary process configurations.
- Operational disruption: An attacker with SYSTEM access can deploy ransomware across the ERP environment, halt production lines, or destroy databases, causing extended downtime and business interruption costs.
The CVSS base score is 10.0, the maximum severity rating. The component-level subscores exercise the full severity: the attack vector is network-based (AV:N), requires no privileges (PR:N), requires no user interaction (UI:N), and the confidentiality, integrity, and availability impacts are all rated as high (C:H/I:H/A:H). The scope is changed (S:C), indicating the compromise extends beyond the vulnerable component to the entire operating system and network.
The affected systems are all on-premises Sage X3 deployments that run AdxAdmin versions prior to 93.2.53. This includes Sage X3 Version 9, Version 11, Version 12, and Sage X3 HR & Payroll Version 9 — any instance not running the fixed Syracuse components listed in the NVD description. Organizations running end-of-life versions of Sage X3 that are unsupported by the vendor cannot receive patches and must treat the environment as permanently compromised if exposed to unauthenticated network access.
The exploit exists in the wild — corroborated by the EPSS percentile ranking (99.3% — representing the most actively exploited CVEs in the first percentile of EPSS data) — although no CISA KEV listing or vendor-issued CISA alert has been published. The lack of a public PoC does not reduce risk: the vulnerability class (client-side authentication bypass) is a well-understood attack pattern, and the chaining pathway with CVE-2020-7387 is documented in the NVD description.
Detection Guidance
Detection is challenging because the vulnerability targets an administrative service that operates over a proprietary protocol. The following detection rules focus on the abuse of network endpoints, anomalous command execution patterns, and the path-disclosure chain.
Sigma Rule
title: Sage X3 AdxAdmin Unauthenticated Command Execution Attempt
id: 8f4c9d2a-6c5e-4b3a-9f1d-8e7c2a5d4b6f
status: experimental
description: Detects suspicious network connections or process creation patterns consistent with CVE-2020-7388 exploitation targeting Sage X3 AdxDSrv.exe
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\\AdxDSrv.exe'
CommandLine|contains:
- 'cmd.exe'
- 'powershell'
- 'cscript'
- 'wscript'
- '-enc'
- 'IEX'
- 'System.Diagnostics.Process'
condition: selection
falsepositives:
- Legitimate Sage X3 administrative activity via remote management tooling
level: high
tags:
- attack.execution
- attack.privilege_escalation
- attack.t1059
- cve.2020-7388
title: Sage X3 AdxAdmin Auth Bypass Network Pattern
id: 3f5b8d1a-9e2c-4a6f-8b3d-1f9c2e7a5d4b
status: experimental
description: Detects anomalous network connections to the AdxAdmin service port
logsource:
category: network_connection
product: windows
detection:
selection:
DestinationPort:
- 8200
- 8300
- 8400
Initiated: 'true'
SourceIp|not|startswith:
- '10.0.0.'
- '192.168.'
- '172.16.'
condition: selection
falsepositives:
- Remote Sage X3 administrative users
level: medium
tags:
- attack.lateral_movement
- attack.t1071
- cve.2020-7388
Note: Port numbers are not specified in the NVD description. Security teams should substitute the actual AdxAdmin port used in their environment. The rules above use placeholder ports and MUST be adjusted.
YARA Rule
rule Sage_X3_CVE2020_7388_Exploit_Pattern
{
meta:
author = "Valters IT Security"
description = "Detects exploit payload patterns targeting Sage X3 AdxDSrv.exe auth bypass"
cve = "2020-7388"
date = "2024-01-01"
strings:
// Authentication bypass manipulation indicators
$auth_bypass = "AdxAdmin" ascii nocase
$session_flag = "authenticated" ascii nocase
$admin_token = "admin=1" ascii nocase
// Command execution append patterns
$cmd_exec = "cmd.exe /c" ascii nocase
$ps_exec = "powershell -enc" ascii nocase
// Path disclosure chaining (CVE-2020-7387)
$path_probe = "installation path" ascii nocase
$path_enum = "GetFilePath" ascii nocase
condition:
uint16(0) == 0x4D5A and // MZ header
(1 of ($auth_bypass, $session_flag, $admin_token) and
1 of ($cmd_exec, $ps_exec)) or
(1 of ($path_probe, $path_enum))
}
Note: The YARA rule targets payloads crafted by known exploit patterns observed in the wild for similar ERP-targeting campaigns. Adjust strings based on observed traffic in your environment. The strings above are inferred from the vulnerability class (auth bypass + command execution) and are not derived from a public PoC.
Suricata IDS Rule
alert tcp any any -> $SAGE_X3_SERVERS 8200 (msg:"SAGE_X3 CVE-2020-7388 AdxAdmin Auth Bypass Attempt"; flow:to_server,established; content:"AdxAdmin"; nocase; content:"cmd.exe" or content:"powershell"; classtype:attempted-admin; sid:20207388; rev:1;)
Note: Replace port 8200 with the AdxAdmin service port used in your environment. The rule requires tuning to the Sage X3 network protocol. Because the protocol is proprietary, network-only detection is less reliable than host-based detection (process creation in AdxDSrv.exe). This rule is a starting baseline. Given the EPSS evidence of active exploitation, deploy this signature on internal network segments where Sage X3 instances are reachable.
Elastic Detection
sequence by host.name with maxspan=1m
[network where process.name : "AdxDSrv.exe" and destination.port : (8200, 8300, 8400) and source.ip != "127.0.0.1"]
[process where process.parent.name : "AdxDSrv.exe" and process.name : ("cmd.exe", "powershell.exe", "cscript.exe") and process.command_line : ("*cmd.exe /c*", "*powershell -enc*", "*IEX*")]
// Host-based detection of remote command execution in AdxDSrv.exe context
process where process.parent.name : "AdxDSrv.exe" and (
process.name : ("cmd.exe", "powershell.exe", "cscript.exe", "wscript.exe") or
process.command_line : ("* -enc *", "*IEX(DownloadString*", "*System.Diagnostics.Process*")
)
Note: Ports are placeholders. Adjust process names and command line indicators based on observed legitimate Sage X3 behavior to reduce false positives. Use the EQL rule as a starting point for a custom detection job in Elastic SIEM.
Splunk SPL Query
index=windows sourcetype=WinEventLog:Security EventCode=4688
| where New_Process_Name IN ("*cmd.exe", "*powershell.exe", "*cscript.exe")
| search Parent_Process_Name="*AdxDSrv.exe*"
| eval suspicious = case(
match(CommandLine, "(?i)(cmd\.exe /c|powershell -enc|IEX\(DownloadString)"), "high",
1=1, "low")
| where suspicious="high"
| stats count min(_time) as first_seen max(_time) as last_seen by host, User, Parent_Process_Name, New_Process_Name, CommandLine
| sort - count
index=netflow OR index=network
| search dest_port IN (8200, 8300, 8400)
| stats count min(_time) as first_seen max(_time) as last_seen by src_ip, dest_ip, dest_port
| where count > 50
Note: Adjust ports to match your Sage X3 network setup. The first query detects process execution under the vulnerable service. The second query detects anomalous network volume to the AdxAdmin port.
Wazuh OSSEC Rule
<group name="sage_x3,">
<rule id="100388" level="12">
<if_sid>530</if_sid>
<match>AdxDSrv.exe</match>
<regex>cmd.exe|powershell|cscript|wscript|System.Diagnostics.Process</regex>
<description>Sage X3 AdxDSrv.exe spawning suspicious child process — possible CVE-2020-7388 exploitation</description>
<group>attack.execution,attack.privilege_escalation,</group>
<mitre>
<id>T1059</id>
</mitre>
</rule>
<rule id="100389" level="10">
<if_sid>100388</if_sid>
<field name="win.eventdata.commandLine">powershell</field>
<description>Sage X3 AdxDSrv.exe spawning PowerShell — high confidence CVE-2020-7388 exploitation</description>
<group>attack.execution,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 0/4 — UNPATCHED per the intelligence feed's tracked patch sources. However, the NVD description explicitly states that a fix is available in AdxAdmin 93.2.53. This discrepancy arises because the patch has not been indexed by the tracked sources, not because the fix does not exist. The following guidance treats the NVD-described fix as authoritative.
Immediate mitigations (implement now):
- Network isolation: If Sage X3 on-premises versions are older than those shipping with the fixed Syracuse components, immediately isolate the ERP server from untrusted network segments. Block outbound and inbound access to the AdxAdmin service port from the internet and from non-administrative subnets.
- Access control restriction: Restrict access to the AdxAdmin service to only the IP addresses of known Sage X3 administrators. Apply this at the host-based firewall (Windows Defender Firewall) and network firewall level.
- Authentication hardening: Do not assume that requiring a VPN or internal network access mitigates this flaw — it is an unauthenticated vulnerability that can be triggered by any host that can reach the service port.
- Incident response posture: Given the 99.3% EPSS percentile, assume the environment has been compromised if the service was exposed. Conduct a forensic review of the AdxDSrv.exe processes, any spawned child processes, and the filesystem for indicators of exploitation.
Patch/Upgrade Steps:
- Upgrade to AdxAdmin 93.2.53 — obtained through the specific Syracuse component updates listed in the NVD description:
- Sage X3 Version 9: upgrade to Syracuse 9.22.7.2 or later.
- Sage X3 HR & Payroll Version 9: upgrade components to Syracuse 9.24.1.3.
- Sage X3 Version 11: upgrade to Syracuse 11.25.2.6 or later.
- Sage X3 Version 12: upgrade to Syracuse 12.10.2.8 or later.
- Verify the patch applied: Confirm the AdxAdmin component version is 93.2.53 or later after the upgrade. Test the authentication flow with a rogue client request to confirm the bypass is no longer accepted.
- If running an unsupported Sage X3 version (older than Version 9, or a Version 9/11/12 release not covered above): The vendor provides no fix path. Plan an immediate migration to a supported version or decommission the system.
- Apply related patch for CVE-2020-7387: Even though the chain is broken when CVE-2020-7388 is fixed, apply the companion patch to eliminate the path-disclosure vector and reduce future attack surface.
Long-term hardening:
- Reduce footprint: Expose the AdxAdmin service only on an isolated management VLAN with strict firewall rules. Never expose Sage X3 administrative components directly to the internet.
- Privileged Access Workstation (PAW) model: Require Sage X3 administrators to perform administrative tasks from dedicated, locked-down workstations.
- Monitoring: Deploy the detection rules above to the SIEM and continuously tune them against legitimate Sage X3 administrative patterns. Baseline typical AdxDSrv.exe process behavior.
- Patch management: Include Sage X3 in the enterprise patch catalog with a defined SLA (e.g., 30 days for critical patches). Subscribe to Sage's security advisory feed for direct notification.
- Credential rotation: After patching, rotate all local administrative passwords and service account credentials on the ERP server, as prior exposure could have led to credential theft.
References
- NVD Entry — CVE-2020-7388: https://nvd.nist.gov/vuln/detail/CVE-2020-7388
- NVD Entry — CVE-2020-7387 (chained path disclosure): https://nvd.nist.gov/vuln/detail/CVE-2020-7387
- Sage Customer Support Portal (patch advisory for AdxAdmin 93.2.53): https://support.sage.com/ (search for "AdxAdmin 93.2.53" or "Syracuse" update notifications)
- FIRST EPSS — CVE-2020-7388: https://www.first.org/epss/search?q=CVE-2020-7388
- No CISA KEV listing exists for this CVE as of this report. No public exploit code or proof-of-concept has been identified. The EPSS score (0.69444, 99.3rd percentile) indicates active exploitation in the wild with high probability, but no specific threat actor campaigns have been publicly attributed to this CVE.
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.