CODESYS V3未经身份验证的远程堆溢出漏洞分析与复现
The following article is from 关键基础设施安全应急响应中心 Author 安天
2020年3月25日CODESYS发布CODESYS V3未经身份验证的远程堆溢出漏洞,攻击者利用精心设计的请求可能会导致基于堆的缓冲区溢出。CODESYS软件工具包是一款基于先进的.NET架构和IEC 61131-3国际编程标准的面向工业4.0及物联网应用的软件开发平台。CODESYS软件平台可实现逻辑控制(PLC)、运动控制(Motion Control)及CNC控制、人机界面(HMI)、基于Web Service的网络可视化编程和远程监控、冗余控制(Redundancy)和安全控制(Safety)、项目开发与工程协同管理等多个目标和需求。
安天针对CODESYS的CVE-2020-10245[1]漏洞进行了分析和复现,该漏洞存在于CmpWebServerHandlerV3.dll(文件版本3.5.15.20)库中,源于该dll库未能正确验证由用户提交的发往Web Server URL端点的数据。此漏洞会造成Web 服务器崩溃、拒绝服务或者可能被用于远程代码执行。对此,安天研究人员分析了该漏洞原理并给出相应的防护建议。
该漏洞允许未经身份验证的远程攻击者破坏服务器或远程代码执行。存在漏洞的服务器用于在Web浏览器中显示CODESYS系统可视化屏幕。该漏洞基于堆的缓冲区溢出,是由于名为CmpWebServerHandlerV3.dll的Web服务器库无法正确验证发送到Web服务器URL端点的用户数据而导致。攻击者可以通过发送给CmpWebServerHandlerV3组件的WEB_CLIENT_OPENCONNECTION消息请求非常大的内存分配,来利用这个漏洞,最终导致Web服务器崩溃、拒绝服务或远程执行代码[2]。该漏洞严重程度评分如下表所示:
表格 2-1 CVSS评分[3]
2.1披露时间
2019年12月02日:发现漏洞
2019年12月11日:CODESYS承认漏洞。
2019年12月11日:CODESYS预计在90天后进行解释。
2020年01月28日:供应商通知他们计划在3月中旬发布补丁。
2020年03月18日:CODESYS通知,由于COVID-19,他们需要将其补丁和咨询推迟几天,计划在三月中旬发布版本3.5.15.40。
2020年03月25日:CODESYS已发布公告和漏洞修复。
2.2漏洞影响版本
在用于工程控制系统的自动化软件CODESYS的Web服务器中存在一个严重漏洞,此漏洞存在V3.5.15.40之前的所有版本中,所有包含Web服务器(CmpWebServer和CmpWebServerHandler)的CODESYS V3系统运行中都会受到影响,主要包括[4] :
• CODESYS Control for BeagleBone
• CODESYS Control for emPC-A/iMX6
• CODESYS Control for IOT2000
• CODESYS Control for Linux
• CODESYS Control for PLCnext
• CODESYS Control for PFC100
• CODESYS Control for PFC200
• CODESYS Control for Raspberry Pi
• CODESYS Control RTE V3
• CODESYS Control RTE V3 (for Beckhoff CX)
• CODESYS Control Win V3 (also part of the CODESYS Development System setup)
• CODESYS HMI V3
• CODESYS Control V3 Runtime System Toolkit
• CODESYS V3 Embedded Target Visu Toolkit
• CODESYS V3 Remote Target Visu Toolkit
2.3漏洞影响范围
CODESYS是一款工业自动化领域的一款开发编程系统,应用领域涉及工厂自动化、汽车自动化、嵌入式自动化、过程自动化和楼宇自动化等。CODESYS软件可以分为两个部分,一部分是运行在各类硬件中的RTE(Runtime Environment),另一部分是运行在PC机上的IDE。因此CODESYS的用户既包括生产PLC、运动控制器的硬件厂商,也包括最终使用PLC、运动控制器的用户。
目前全球有近400家的控制系统生产制造商是CODESYS的用户:如ABB、施耐德电气SchneiderElectric、伊顿电气EATON、博世力士乐Rexroth、倍福BECKHOFF、科控KEBA、日立HITACHI、三菱自动化MITSUBISHI、欧姆龙OMRON、研华科技、凌华科技ADLINK、和利时集团、SUPCON中控集团、步科自动化KINCO等等。
3.1漏洞原理
攻击者可借助特制的请求,利用该漏洞造成基于堆的缓冲区溢出,攻击者通过与服务端建立连接,并请求分配内存,服务器响应攻击者并分配内存,攻击者发送特殊消息使服务端缓冲区溢出,导致Web Server发生崩溃。如下图所示:
图 3-1 CODESYS缓冲区溢出过程
该漏洞存在于CmpWebServerHandlerV3.dll(文件版本3.5.15.20)库中,源于该dll库未能正确的验证由用户提交的发往Web Server URL端点的数据。当CmpWebServerHandlerV3组件状态为“0”时,攻击者可通过向CmpWebServerHandlerV3组件发送一条WEB_CLIENT_OPENCONNECTION消息,请求分配大小为0xffffffff的缓冲区,在缓冲区分配操作过程中SysMemGetCurrentHeapSize函数被SysMemAllocData函数调用向所请求的缓冲区分配大小添加了0x5c字节,缓冲区分配大小会溢出,即实际上分配了一块小的堆缓冲区(0xffffffff+ 0x5c = 0x5b)。攻击者通过发送一条精心构造的WEB_CLIENT_RUN_SERVICE消息以溢出小型通信缓冲区,造成缓冲区溢出,进而使Web Server崩溃[1]。
3.2复现过程
攻击者通过与服务端建立连接,并请求分配内存,服务器响应攻击者并分配内存,攻击者发送特殊消息使服务端缓冲区溢出,导致Web 服务器发生崩溃。基于以上漏洞原理,搭建复现环境,通过POC脚本对漏洞进行复现。
复现环境采用CODESYS V3.5.15.20(32位)版本,Windows10家庭版,8G内存,搭建服务端环境。服务端复现环境搭建成功后,结合漏洞原理及POC程序针对该漏洞进行了复现。
该POC是由Python语言实现,在执行过程中需要配置目标地址(Web Server服务器地址)和目标端口号(默认为8080)。查看正常状态下Web Server服务及Web访问状态。Web Server服务状态如下图所示:
被用来测试的Web访问页面,可正常访问,如下图所示:
运行POC前重启CODESYS服务,使CmpWebServerHandlerV3组件处于状态“0”。运行POC脚本,连接服务端并请求分配内存。POC脚本部分代码如下图所示:
POC运行后,查看Web Server及Web访问状态,Web Server服务已经停止,如下图所示:
被用来测试的Web页面不能正常访问,重新启动服务后,页面访问恢复正常。不能正常访问时状态如下图所示:
针对CODESYS V3.5.15.20(64位)版本,采用Windows7(64位)系统,8G内存,搭建服务端环境。客户端运行POC后,服务端内存被占满,随着时间推迟内存被慢慢释放,Web服务没有停止,但Web页面不能访问,造成拒绝服务攻击。内存如图所示:
被用来测试的Web页面不能正常访问,服务重启后,Web页面才可正常访问。Web页面不能正常访问如下图所示:
Web Server服务重启后,Web页面可正常访问,访问状态如下图所示:
4.1漏洞危害
本次复现漏洞可能导致Web服务器崩溃、拒绝服务,或者可能被用于远程代码执行。下面对有可能造成的危害进行详细说明:
(1) Web服务崩溃:CODESYS Web Server在工业控制系统场景中可用来作为Web SCADA服务器,Web SCADA服务器崩溃可导致与控制器通信中断,不能接收来自控制器返回的数据信息,不能对控制器参数进行修改。可能使工业控制系统发生异常,导致企业停工停产,造成安全威胁或经济损失。
(2) 远程代码执行:攻击者利用该缓冲区溢出漏洞可能导致工业控制系统数据泄露,如软件版本,系统信息、工艺参数等关键数据,为进一步攻击工业控制系统做信息收集准备;也可通过shell脚本获取工业控制系统操作权限,对工业控制系统正常运行带来影响。
4.2防护建议
根据该漏洞的原理及官网针对该漏洞的修复情况,给出以下建议。
(1) 建议将CODESYS软件升级到V3.5.15.40,官方在V3.5.15.40版本中修复此漏洞。
(2) 对运行CODESYS Control Service的主机配置防火墙限制IP访问,仅允许指定IP访问,禁止外部IP访问,并进行相应的访问日志审计,防止系统信息泄露。
(3) 禁止工业控制网络在无防护设备情况下与互联网连接,如必须连接互联网可采取安装工业防护设备(防火墙、网闸等)来限制攻击者的入侵。
(4) 增加工业网络流量检测和监测设备,对Web管理平台异常流量进行阻断、报警、及时发现,防止工业系统敏感信息泄露。
[1] CVE:CVE-2020-10245
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10245
[2] Tenable:CODESYS V3未经身份验证的远程堆溢出
https://zh-cn.tenable.com/security/research/tra-2020-16
[3] NVD:CVE-2020-10245
https://nvd.nist.gov/vuln/detail/CVE-2020-10245
[4] CODESYS:CODESYS V3 web服务器安全更新
https://customers.codesys.com/index.php?eID=dumpFile&t=f&f=13078&token=de344ca65252463cc581ef144e0c53bd97b8f211&download=
附录二:关于安天
安天是引领威胁检测与防御能力发展的网络安全国家队,始终坚持自主先进的能力导向,依托下一代威胁检测引擎等先进技术和赛博超脑大平台工程能力积累,研发智甲、探海、镇关、捕风、追影、拓痕等系列产品,为客户构建端点防护、流量监测、边界防护、导流捕获、深度分析、应急处置的安全基石。安天致力于为客户建设实战化的态势感知体系,依托全面持续监测能力,建立系统与人员协同作业机制,指挥网内各种防御机制联合响应威胁,实现从基础结构安全、纵深防御、态势感知与积极防御到威胁情报的有机结合,协助客户开展深度结合与全面覆盖的体系化网络安全规划与建设,支撑起协同联动的实战化运行,赋能客户筑起可对抗高级威胁的网络安全防线。
安天为网信主管部门、军队、保密、部委行业和关键信息基础设施等高安全需求客户,提供整体安全解决方案,产品与服务为载人航天、探月工程、空间站对接、大飞机首飞、主力舰护航、南极科考等提供了安全保障。参与了2005年后历次国家重大政治社会活动的安保工作,并多次获得杰出贡献奖、安保先进集体等称号。
安天是全球基础安全供应链的核心赋能方,全球近百家著名安全企业、IT企业选择安天作为检测能力合作伙伴,截止到2019年9月30日,安天的威胁检测引擎为全球超过六十万台网络设备和网络安全设备、超过十七亿部智能终端设备提供了安全检测能力。安天的移动检测引擎获得国际知名测试机构颁发的2013年度权威评测奖项。
安天是中国应急响应体系中重要的企业节点,在“红色代码”、“口令蠕虫”、“心脏出血”、“破壳”、“魔窟”等重大安全威胁和病毒疫情方面,实现了先发预警和全面应急响应。安天针对“方程式”、“白象”、“海莲花”、“绿斑”等几十个高级网空威胁行为体(如APT组织)及其攻击行动,进行持续监测和深度解析,协助客户在“敌情想定”下形成有效防护,通过深度分析高级网空威胁行为体的作业能力,安天建立了以实战化对抗场景为导向的能力体系。
安天实验室更多信息请访问:
http://www.antiy.com(中文)
http://www.antiy.net (英文)
安天企业安全公司更多信息请访问:
http://www.antiy.cn
安天移动安全公司(AVL TEAM)更多信息请访问:
http://www.avlsec.com
往期推荐
●多起攻击工业企业的勒索软件Ryuk分析及防御建议
●针对WannaRen勒索软件的梳理与分析
●传播CoronaVirus勒索软件和KPOT窃密木马的事件分析