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