Schneider Electric EcoStruxure Control Expert(前称Unity Pro)是法国施耐德电气(Schneider Electric)公司的一套用于Schneider Electric逻辑控制器产品的编程软件。其中PLC仿真器是软件内置的一个有PLC仿真功能windows应用程序。
Part1 漏洞状态
漏洞细节 | 漏洞POC | 漏洞EXP | 在野利用 |
有 | 有 | 无 | 无 |
Part2 漏洞描述
该漏洞源于当通过Modbus协议收到一个手动构造的恶意请求时,会导致EcoStruxure Control Expert软件中的PLC仿真器程序崩溃或远程代码执行。
漏洞名称 | 施耐德 PLC 仿真器远程代码执行漏洞 |
CVE编号 | CVE-2020-7559 |
漏洞类型 | 远程代码执行 |
漏洞等级 | 7.5 高危 |
公开状态 | 公开 |
时间线 | 2020-08-13 - 供应商披露2020-11-04 - 分配 CVE2020-11-09 - 供应商发布2020-12-08 - 公开发布 |
Part3 影响范围
Schneider Electric EcoStruxure Control Expert version <= v14.1
Part4 复现环境
Windows 10
Schneider Electric EcoStruxure Control Expert v14.1
Part5 漏洞复现
- 安装Schneider Electric EcoStruxure Control Expert v14.1
- 软件路径
C:\Program Files (x86)\Schneider Electric\ControlExpert 14.1\PLC_Simulator
- 启动sim仿真器程序
- 查看启动端口502开放,程序启动成功!
- 运行测试脚本
强制关闭远程连接,进程退出,复现成功!
Part6 漏洞细节
· Xdbg加载sim.exe 在tcp/ip模块中下断点。
· 然后运行test.py测试脚本。
程序断下,单步运行,查看接收buffer位置数据。
是我们发送的测试数据。
在接收数据位置下硬件访问断点。
· 运行程序。
程序断到这里,返回一层。
可以看到是 exec.dll 模块中调用memcpy 时产生的栈溢出,
再返回一层。
发现接收网络发包的位置是ebp-0x8004,
可以推算网络发包数据超过0x8000就可以造成栈溢出,
然后构造恶意数据包,利用栈溢出造成远程代码执行。
如果要达到远程代码执行的目的,需要绕过栈Cookie校验,SafeSEH检测和DEP保护三道防护才可以。
Part7 修复和缓解建议
· 升级软件到最新版本。
· 如果不能升级到最新版,可以使用流量检测设备监控Modbus协议MBAP中data_length字段,数值超过 0x8000 大小(10进制32768)即可报警。
· 安装主机卫生设置通讯白名单。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)