Schneider IGSS 远程误差剖析

宣布时间 2022-04-15

一、前言


近期 ,尊龙凯官网入口ADLab在工业控制系统误差监测中发明Schneider宣布了交互式图形SCADA系统(Interactive Graphical SCADA System ,简称IGSS)的高危误差通告和补丁 ,包括有缓冲区溢出和目录穿越等 ,NVD的评分高达9.8。ADLab研究员第一时间对其中的高危误差举行了详细剖析和现实验证 ,同时还发明了一个新的高危误差并协助厂商举行了修复。


二、误差基本信息



凭证Schneider的误差通告 ,这些误差的基本信息如下:



受影响的产品:V15.0.0.22020 and prior

保存误差

  • CVE-2022-24312 ,目录穿越
  • CVE-2022-24311 ,目录穿越
  • CVE-2022-24310 ,缓冲区溢出


受影响的产品:V15.0.0.22073 and prior

保存误差


  • CVE-2022-24324 ,缓冲区溢出



触发方法:网络
CVSS v3评分:  9.8

三、误差剖析与验证


3.1 CVE-2022-24311(24312)剖析


这两个误差保存于IGSS V15.0.0.22020 and prior版本 ,其误差形貌为:“保存对受限制目录路径名的不当限制 ,可导致通过在文件末尾添加或在数据服务器上下文中建设新文件来修改现有文件 ,当攻击者通过网络发送特定命据时 ,可能会导致远程代码执行”。


通太过析 ,我们发明这两个误差位于sub_49FF20函数 ,该函数的伪代码如下:


图片1.png


跟进sub_4A0C50函数 ,伪代码如下所示:


图片2.png



可以看出 ,该函数内部举行了一系列文件操作 ,但对传入该函数的参数没有做有用的清静检查 ,因此可以被操控来向SCADA服务器写入恣意文件。


同理 ,跟进sub_4A0C50函数 ,伪代码如下所示:


图片3.png



可以看出 ,该函数的内部同样也没有对传入的参数举行清静检查 ,因此也可以被操控来向SCADA服务器写入恣意文件。


凭证上述剖析我们举行了验证 ,乐成向SCADA服务器写入恣意内容的文件。


图片4.png


关于上述两个误差 ,Schneider官方宣布了补丁 ,其修复方法如下:


图片5.png


详细来讲 ,“Prepend file”和“Append file”分支在进入详细功效函数前挪用了特另外sub_4A16F0函数。该函数传入了参数 v6+72 ,此参数对应被操作文件的文件路径名。跟进该函数 ,其伪代码如下:


图片6.png


该函数对文件路径名举行了限制:(1)限制(v6+72)长度 ,巨细要知足<=0x100 ;(2)限制(v6+72)内容 ,不可有目录穿越的特征符。通过这种限制 ,补丁避免了恶意数据导致的跳转目录 ,把文件操作限制在目今目录下。


3.2 CVE-2022-24310剖析


该误差保存于IGSS V15.0.0.22020 and prior版本 ,误差的形貌为:“保存整数溢出 ,当攻击者发送多条全心准备的新闻时 ,该误差可能会导致基于堆的缓冲区溢出 ,导致拒绝服务并可能导致远程代码执行”。

通太过析 ,我们发明这个误差保存于sub_49FA30函数 ,该函数的伪代码如下:


图片7.png


从上图可以看出 ,该函数的主要逻辑是:首先 ,通过realloc给*(this+48)的堆增添*(a1+0xBA)数值的大�� ;然后 ,使用memcpy向(*(v5 +52)+*(v5 + 48))赋值*(a2+0xBA)长度的(a2+190)缓冲区内容 ,即填充realloc新分派出的内存空间。


经太过析 ,我们发明:在*(a2+ 0xBA)+*(this + 52)的加法操作中 ,两个操作数均为无符号类型 ,且*(a2+0xBA)可控。因此 ,通过控制*(a2+0xBA)的值 ,可使得*(a2 + 0xBA)+*(this + 52)爆发整数上溢 ,从而导致realloc新申请内存的容量小于后续memcpy的参数*(a2+0xBA) ,后续执行memcpy内存拷贝操作时就会触发堆溢出。


凭证上述剖析我们举行了验证 ,乐成触发了SCADA服务器的堆破损。


图片8.png

关于该误差 ,Schneider官方宣布了补丁 ,其修复方法如下:


图片9.png


详细来讲 ,在举行realloc操作执行前 ,先判断*(a2+0xBA)的值是否在[0,0xF42]的区间规模内 ,从而阻止整数溢出。


3.3 CVE-2022-24324剖析


在对IGSS V15.0.0.22073 and prior的补丁剖析中 ,ADLab研究员还发明了一个新的缓存区溢出误差。该误差可以远程无条件触发 ,ADLab实时报告了厂商并协助厂商举行了修复 ,厂商对该误差的CVSS3评分为严重。


图片11.png


Schneider已经宣布了新补丁来修复这个高危误差。相关补丁和更多的内容可在官方提供的通告中盘问:

https://download.schneider-electric.com/files?p_enDocType=Security+and+Safety+Notice&p_File_Name=SEVD-2022-102-01_IGSS_Security_Notification.pdf&p_Doc_Ref=SEVD-2022-102-01


四、修复建议


经由ADLab研究员的剖析和验证 ,上述高危误差都可以通过网络举行无条件的远程触发 ,具有很大的危害性。现在官方已经宣布了补丁 ,强烈建议使用IGGS的工业用户连忙升级到最新版本:15.0.0.22074。


针对工业控制系统 ,CISA提供了如下的通用建议:

  • 只管镌汰在公网袒露工控装备或者系统 ;
  • 将控制系统网络和远程装备置于防火墙之后 ,并和办公网络隔离 ;
  • 当需要远程会见时 ,接纳类似VPN的清静会见方法。


参考链接:

[1] SEVD-2022-102-01, IGSS Data Server (V15.0.0.22073 and prior)

https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2022-102-01 
[2] SEVD-2022-039-01, IGSS Data Server (V15.0.0.22020 and prior)
https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2022-039-01