深入分析施耐德工控软件代码执行漏洞
字数 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

限制条件

  1. 需要存在与DLL同名的driver.xml文件
  2. DLL必须位于同名目录中(如Claroty\Claroty.dll

漏洞2:SQLite信息泄露(CVE-2020-7494)

问题描述

软件加载用户控制的数据库后,未对查询数据进行适当安全过滤,导致可通过SQLite特殊功能泄露敏感信息。

关键技术

  1. PRAGMA语句

    • SQLite特有的扩展语句,可查询内部数据
    • SELECT file FROM pragma_database_list可获取当前加载数据库的完整路径
  2. 数据库视图(VIEW)

    • 存储查询的结果集,查询时动态生成
    • 可实时修改返回给客户端的数据

组合利用实现RCE

攻击步骤

  1. 准备恶意项目文件

    • 创建包含以下文件的ClarotyModule目录:
      • Driver.xml(合法驱动描述文件)
      • ClarotyModule.dll(恶意DLL)
  2. 构造特制数据库

    • 将原Driver_0_Configuration_0表重命名为Driver_0_Configuration_0_ORIG
    • 创建名为Driver_0_Configuration_0的VIEW表
    • 配置VIEW表在查询ModuleName时返回SELECT file FROM pragma_database_list的结果,并添加适当的路径遍历字符
  3. 打包项目文件

    • 将构造的文件和目录打包为.VXDZ格式
  4. 诱骗用户打开

    • 当受害者双击项目文件时:
      • 文件解压到随机临时目录
      • 软件查询数据库获取ModuleName
      • VIEW实时生成包含实际解压路径的ModuleName
      • 软件加载恶意DLL执行攻击者代码

技术要点

  • 利用VIEW实时生成包含当前临时目录路径的ModuleName
  • 通过路径遍历从临时目录导航到恶意DLL位置
  • 绕过.NET zip库的路径遍历防护(仅限制解压过程)

漏洞修复

施耐德电气已发布补丁修复这两个漏洞,建议用户升级到最新版本。

防御建议

  1. 及时更新到已修复版本
  2. 不要打开来源不明的项目文件
  3. 实施最小权限原则,限制软件运行权限
  4. 监控异常进程行为,特别是DLL加载活动

总结

该漏洞组合利用了两个关键问题:

  1. 未过滤路径遍历字符导致的任意DLL加载
  2. SQLite功能滥用导致的信息泄露

通过精心构造数据库视图和路径遍历,攻击者能够绕过临时目录随机性的限制,最终实现可靠的代码执行。这凸显了工业控制系统软件中输入验证和安全过滤的重要性。

施耐德工控软件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文件,存储数据和设置(如屏幕及其图形组件) 项目文件打开时会被解压到临时目录: 其中GUID每次打开项目时随机生成,路径无法预测。 漏洞技术细节 漏洞1:路径遍历导致的DLL加载原语(CVE-2020-7496) 驱动程序机制 HMI需要通过驱动程序与PLC通信 驱动程序信息存储在项目目录中的 DriverConfig.db SQLite3数据库 数据库包含三个关键表: 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功能滥用导致的信息泄露 通过精心构造数据库视图和路径遍历,攻击者能够绕过临时目录随机性的限制,最终实现可靠的代码执行。这凸显了工业控制系统软件中输入验证和安全过滤的重要性。