Like finding a lockpick that only works if you already have the building manager's keycard
CVE-2024-38508 is an OS command injection flaw in Lenovo XClarity Controller (XCC/XCC2), the baseboard management controller embedded in Lenovo ThinkSystem servers (MX3330, SD650-V3, SN550, SR630, and many others). The vulnerable code lives in libvmtrans.so, specifically the mount_remote_folder routine used by the remote-media transport. It builds a /bin/mount command as a formatted string and passes it to a shell running under the root-privileged xferd daemon. The SMB domain and mount-option parameters are filtered against only 9 characters (space, quotes, apostrophe, slash, exclamation mark), allowing shell metacharacters like ;, $(), backticks, |, and & to pass through unescaped. Exploitation requires an authenticated XCC user with at least Operator/Remote-Media privilege level. Affected firmware includes XCC2 versions prior to v8.80; IBM lists fixed XCC versions as 6.20 for SN550 and 9.97 for SR630.
Lenovo's HIGH / 7.2 rating is defensible but slightly generous for real-world conditions. The CVSS vector correctly reflects PR:H (high privileges required), but the score does not account for the operational reality that BMC interfaces should live on isolated out-of-band management networks, drastically limiting the reachable attacker population. IBM scored a related assessment at 8.8 using PR:L, which overstates the privilege floor. The truth sits between: the vuln is serious because BMC root is hardware-level persistent access, but the prerequisite of already holding elevated BMC credentials means you are escalating from an already-compromised position, not breaking in from scratch. No in-the-wild exploitation and an EPSS of ~1% reinforce that this is a real but non-urgent threat.
4 steps from start to impact.
Obtain BMC network access
- Network path to XCC web interface (TCP 443) or SSH (TCP 22)
- BMC interfaces are typically on isolated management VLANs with ACL restrictions
- IPMI-over-LAN is disabled by default on Lenovo XCC
- Firewalls and jump-box architectures limit lateral movement to management plane
Authenticate with elevated XCC credentials
- Valid XCC user account with Operator or Administrator role
- Remote-Media privilege enabled for that account
- Credential rotation policies for BMC accounts vary; many orgs use unique per-host IPMI passwords via provisioning automation
- MFA is not commonly available on BMC interfaces, but credential theft still requires prior compromise or social engineering
- LDAP-integrated XCC deployments may enforce stronger password policies
Inject shell commands via remote-media mount
domain or mountoption parameter fields. For example, setting mountoption=vers=3.0;id or domain=x$(whoami) causes the injected command to execute in the shell context of the xferd daemon, which runs as root on the BMC's embedded Linux OS.- Authenticated session at Operator level or above
- Access to the remote-media mount functionality
- The attack surface is limited to the remote-media feature, which not all authenticated sessions exercise
- Payload must fit within parameter length constraints
Achieve root execution on BMC
- Successful command injection from step 3
- BMC firmware integrity checks in newer XCC versions may limit persistence options
- Host-side attestation (TPM, Secure Boot) may detect tampered boot media
The supporting signals.
| In-the-Wild Exploitation | No known exploitation. Not listed in CISA KEV. No campaigns or threat actor usage documented as of September 2026. |
|---|---|
| Proof-of-Concept | Detailed technical writeup available. runZero Research (Tod Beardsley) published a thorough N-day analysis describing the vulnerable code path in libvmtrans.so and injection vectors via mountoption and domain parameters. No weaponized public exploit tool identified. |
| EPSS Score | 0.01006 (1.0%) — bottom quartile. The model estimates low short-term exploitation probability, consistent with the elevated privilege requirement. |
| KEV Status | Not listed. No CISA Known Exploited Vulnerabilities catalog entry as of 2026-09-23. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H (Lenovo: 7.2). IBM scored a related assessment at CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (8.8) using PR:L. The PR:H vector is more accurate since Operator-class privileges are required. |
| Affected Versions | Lenovo XCC and XCC2 firmware across ThinkSystem servers including MX3330, SD650-V3, SN550, SR630, OEMSR630, and others. XCC2 versions prior to v8.80 are vulnerable. Full model-to-firmware matrix is in LEN-156781. |
| Fixed Versions | XCC2: v8.80 (July 2026). IBM Cloud Pak System: 2.3.4.1. Per-model: SN550 XCC 6.20 (TEI3F2H), SR630/OEMSR630 XCC 9.97 (CDO3B4B). Lenovo states security fixes are cumulative. |
| Scanning/Exposure | Lava research (May 2026) found ~36,872 BMC/IPMI endpoints exposed on the public internet across all vendors. Supermicro accounted for >50%. Lenovo XCC share is a fraction of this. IPMI-over-LAN is disabled by default on XCC. |
| Disclosure Date | 2024-07-26 (Lenovo advisory LEN-156781). runZero independently rediscovered and published deeper analysis in July-September 2026. |
| Researcher/Org | Original discovery credited to Lenovo PSIRT. Independent rediscovery and detailed root-cause analysis by Tod Beardsley, VP Security Research at runZero. |
Why this verdict
- Elevated privileges already required: The CVSS PR:H is accurate. An attacker must already hold Operator-class XCC credentials with Remote-Media access before the injection is reachable. This is not an unauthenticated attack; it assumes prior credential compromise of a privileged BMC account, which is itself a non-trivial prerequisite.
- Management network isolation: Enterprise best practice and Lenovo's own defaults place XCC on isolated out-of-band management VLANs. IPMI-over-LAN is disabled by default. Of ~36,800 internet-exposed BMCs globally (all vendors), Lenovo XCC represents a minority. The reachable population from an external attacker perspective is very small (<1% of deployments).
- No exploitation evidence: Zero in-the-wild exploitation, no KEV listing, EPSS at 1.0%. No weaponized exploit tool exists publicly. The runZero writeup is a technical analysis, not a turnkey exploit.
- Role multiplier: BMC/XCC is canonically a high-value component. It provides hardware-level control below the host OS: virtual media mount, power control, console access, and firmware modification. A compromised BMC survives OS reinstalls. In typical data center deployments, 100% of affected servers have XCC in this high-value role by definition. If the chain succeeds, blast radius is host-level (single server), but can extend to fleet-level if BMC credentials are shared across hosts (common in many enterprises). This high-value role floors the verdict at HIGH despite the steep prerequisite chain.
- Downgrade from 7.2 to 6.8: The vendor score does not discount the operational reality that BMC interfaces are rarely reachable even from internal networks without management VLAN access. The combination of PR:H + management network isolation + no wild exploitation justifies a modest downgrade, but the BMC high-value role floor prevents going below HIGH.
Why not higher?
The chain does not warrant CRITICAL because the attacker must already possess elevated BMC credentials (Operator-class), which represents a significant prior compromise. The blast radius is primarily single-host unless BMC credentials are shared, and even then requires per-host exploitation. There is no unauthenticated or low-privilege path, no wormable component, and no evidence of active exploitation or weaponized tooling.
Why not lower?
BMC is a canonically high-value infrastructure component present on every affected server. Root access on the BMC grants persistent hardware-level control that survives OS reinstallation, enables host compromise via virtual media, and provides a foothold invisible to host-based security tools (EDR, AV). Shared BMC credentials are common enough in enterprise environments that a single exploit could chain into fleet-wide hardware-level compromise. The HIGH floor is firmly set by the component's role.
What to do — in priority order.
- Isolate BMC interfaces on dedicated management VLANs with strict ACLs — XCC management interfaces must not be reachable from production networks, user workstations, or the internet. Enforce network segmentation with ACLs allowing only authorized jump-box hosts. This is the single most effective control and should be verified within the noisgate mitigation SLA of 30 days for HIGH severity.
- Audit and rotate XCC credentials fleet-wide — Enumerate all XCC accounts with Operator or Administrator roles. Rotate passwords to unique per-host values using provisioning automation (e.g., Lenovo XClarity Administrator, Ansible IPMI modules). Disable unused accounts. Shared BMC passwords dramatically increase blast radius.
- Disable remote-media mount if not operationally required — If your operational workflows do not require XCC remote-media functionality, disable it in XCC configuration to eliminate the attack surface entirely. This removes the vulnerable code path from the reachable API surface.
- Apply firmware update to fixed XCC version — Update XCC firmware to the fixed version for your hardware model (XCC2 v8.80+, or per-model versions from LEN-156781). Deploy within the noisgate remediation SLA of 180 days for HIGH severity. Use Lenovo XClarity Administrator or UpdateXpress for fleet-wide firmware deployment.
- Enable XCC audit logging and forward to SIEM — Configure XCC to send audit logs via syslog or SNMP traps to your SIEM. Create detection rules for anomalous remote-media mount operations and unexpected login patterns to BMC interfaces.
- Host-based EDR/AV does not help. The exploit runs entirely within the BMC's embedded Linux environment, which is invisible to any agent running on the host OS. EDR cannot inspect or block BMC-level command execution.
- Host OS patching does not remediate this. The vulnerability is in BMC firmware, not the server's operating system. Patching RHEL/Windows/ESXi on the host has zero effect on XCC firmware.
- Network IDS/IPS signature matching is unreliable. The injection occurs within an authenticated HTTPS session to the BMC web interface. Without TLS inspection of management traffic (which most orgs do not perform on BMC VLANs), network signatures cannot detect the payload.
Crowdsourced verification payload.
Run this script from an auditor workstation that has network access to the target XCC management interface. Requires curl and network connectivity to the BMC on port 443. Usage: bash check_xcc_cve2024_38508.sh <XCC_IP> <USERNAME> <PASSWORD>. No elevated privileges needed on the auditor host.
#!/usr/bin/env bash
# check_xcc_cve2024_38508.sh
# Checks Lenovo XCC firmware version against CVE-2024-38508 fixed versions
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
if [ $# -lt 3 ]; then
echo "Usage: $0 <XCC_IP> <USERNAME> <PASSWORD>"
echo "Example: $0 192.168.70.10 USERID PASSW0RD"
exit 2
fi
XCC_IP="$1"
USERNAME="$2"
PASSWORD="$3"
echo "[*] Querying XCC firmware version at ${XCC_IP}..."
RESPONSE=$(curl -sk -u "${USERNAME}:${PASSWORD}" \
"https://${XCC_IP}/redfish/v1/UpdateService/FirmwareInventory/BMC-Primary" \
--connect-timeout 10 --max-time 30 2>/dev/null) || {
echo "[!] Failed to connect to XCC at ${XCC_IP}"
echo "UNKNOWN"
exit 2
}
FW_VERSION=$(echo "${RESPONSE}" | grep -oP '"Version"\s*:\s*"\K[^"]+' 2>/dev/null) || true
if [ -z "${FW_VERSION}" ]; then
# Try alternative Redfish path
RESPONSE=$(curl -sk -u "${USERNAME}:${PASSWORD}" \
"https://${XCC_IP}/redfish/v1/Managers/1" \
--connect-timeout 10 --max-time 30 2>/dev/null) || true
FW_VERSION=$(echo "${RESPONSE}" | grep -oP '"FirmwareVersion"\s*:\s*"\K[^"]+' 2>/dev/null) || true
fi
if [ -z "${FW_VERSION}" ]; then
echo "[!] Could not determine XCC firmware version"
echo "UNKNOWN"
exit 2
fi
echo "[*] Detected XCC firmware version: ${FW_VERSION}"
# Extract major.minor version numbers for comparison
# XCC2 versions are like 8.80, vulnerable below that
# XCC versions vary by model
MAJOR=$(echo "${FW_VERSION}" | grep -oP '^[0-9]+' 2>/dev/null) || MAJOR=0
MINOR=$(echo "${FW_VERSION}" | grep -oP '\.[0-9]+' | head -1 | tr -d '.' 2>/dev/null) || MINOR=0
echo "[*] Parsed version: major=${MAJOR}, minor=${MINOR}"
# XCC2 fixed at v8.80+
if [ "${MAJOR}" -gt 8 ] 2>/dev/null; then
echo "[+] Firmware version ${FW_VERSION} is above known fixed version (8.80)"
echo "PATCHED"
exit 0
elif [ "${MAJOR}" -eq 8 ] && [ "${MINOR}" -ge 80 ] 2>/dev/null; then
echo "[+] Firmware version ${FW_VERSION} meets or exceeds fixed version (8.80)"
echo "PATCHED"
exit 0
else
echo "[-] Firmware version ${FW_VERSION} is below fixed version (8.80 for XCC2)"
echo "[-] Note: Fixed versions vary by model. Check LEN-156781 for your specific hardware."
echo "[-] Known fixed versions: SN550=6.20(TEI3F2H), SR630=9.97(CDO3B4B)"
echo "VULNERABLE"
exit 1
fi
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.