深入分析施耐德工控软件代码执行漏洞
字数 1951 2025-08-20 18:17:53
施耐德工控软件EcoStruxure Operator Terminal Expert代码执行漏洞深入分析
漏洞概述
本文详细分析施耐德电气公司EcoStruxure Operator Terminal Expert软件(前称Vijeo XD)V3.1.100.267(SP 1)及之前版本中存在的两个关键漏洞组合利用实现代码执行的技术细节。攻击者可通过诱骗用户打开特制的项目文件(.VXDZ格式),在应用程序上下文中实现任意代码执行。
受影响版本
- EcoStruxure Operator Terminal Expert V3.1.100.267(SP 1)及之前所有版本
- 对应CVE编号:CVE-2020-7494与CVE-2020-7496
漏洞背景
EcoStruxure Operator Terminal Expert是用于设计人机界面(HMI)设备图形用户界面的软件环境,这些界面用于控制工业部署中可编程逻辑控制器(PLC)的操作。
项目文件结构
- 项目文件扩展名为.VXDZ,实质是一个压缩目录
- 包含多种文件类型:
.db:SQLite3数据库文件,存储项目配置和设置.inf/.dat:JSON文件,存储数据和设置(如屏幕及其图形组件)
项目文件打开时会被解压到临时目录:
C:\users\USER\AppData\Local\EcoStruxure\Temp\Schneider\CURRENT_VERSION_FULL\GUID\ProjectFiles
其中GUID每次打开项目时随机生成,路径无法预测。
漏洞技术细节
漏洞1:路径遍历导致的DLL加载原语(CVE-2020-7496)
驱动程序机制
- HMI需要通过驱动程序与PLC通信
- 驱动程序信息存储在项目目录中的
DriverConfig.dbSQLite3数据库 - 数据库包含三个关键表:
Driver_X:空表Driver_X_Configuration_X:驱动程序详细信息,包括要加载的DLL名称(ModuleName字段)Driver_X_Equipment_X:PLC详细信息(IP地址、型号、协议等)
漏洞成因
- 软件从
ModuleName字段加载驱动程序DLL时未正确过滤路径遍历字符(如../../../) - 攻击者可构造特制的
ModuleName值跳出预定义目录,加载任意DLL
限制条件
- 需要存在与DLL同名的
driver.xml文件 - DLL必须位于同名目录中(如
Claroty\Claroty.dll)
漏洞2:SQLite信息泄露(CVE-2020-7494)
问题描述
软件加载用户控制的数据库后,未对查询数据进行适当安全过滤,导致可通过SQLite特殊功能泄露敏感信息。
关键技术
-
PRAGMA语句:
- SQLite特有的扩展语句,可查询内部数据
SELECT file FROM pragma_database_list可获取当前加载数据库的完整路径
-
数据库视图(VIEW):
- 存储查询的结果集,查询时动态生成
- 可实时修改返回给客户端的数据
组合利用实现RCE
攻击步骤
-
准备恶意项目文件:
- 创建包含以下文件的
ClarotyModule目录:Driver.xml(合法驱动描述文件)ClarotyModule.dll(恶意DLL)
- 创建包含以下文件的
-
构造特制数据库:
- 将原
Driver_0_Configuration_0表重命名为Driver_0_Configuration_0_ORIG - 创建名为
Driver_0_Configuration_0的VIEW表 - 配置VIEW表在查询
ModuleName时返回SELECT file FROM pragma_database_list的结果,并添加适当的路径遍历字符
- 将原
-
打包项目文件:
- 将构造的文件和目录打包为.VXDZ格式
-
诱骗用户打开:
- 当受害者双击项目文件时:
- 文件解压到随机临时目录
- 软件查询数据库获取
ModuleName - VIEW实时生成包含实际解压路径的
ModuleName - 软件加载恶意DLL执行攻击者代码
- 当受害者双击项目文件时:
技术要点
- 利用VIEW实时生成包含当前临时目录路径的
ModuleName - 通过路径遍历从临时目录导航到恶意DLL位置
- 绕过.NET zip库的路径遍历防护(仅限制解压过程)
漏洞修复
施耐德电气已发布补丁修复这两个漏洞,建议用户升级到最新版本。
防御建议
- 及时更新到已修复版本
- 不要打开来源不明的项目文件
- 实施最小权限原则,限制软件运行权限
- 监控异常进程行为,特别是DLL加载活动
总结
该漏洞组合利用了两个关键问题:
- 未过滤路径遍历字符导致的任意DLL加载
- SQLite功能滥用导致的信息泄露
通过精心构造数据库视图和路径遍历,攻击者能够绕过临时目录随机性的限制,最终实现可靠的代码执行。这凸显了工业控制系统软件中输入验证和安全过滤的重要性。