作 者:安天
公众号: 关键基础设施安全应急响应中心

概述

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漏洞进行了分析和复现,该漏洞存在于CmpWebServerHandlerV3.dll(文件版本3.5.15.20)库中,源于该dll库未能正确验证由用户提交的发往Web Server URL端点的数据。此漏洞会造成Web 服务器崩溃、拒绝服务或者可能被用于远程代码执行。对此,安天研究人员分析了该漏洞原理并给出相应的防护建议。

漏洞情况

该漏洞允许未经身份验证的远程攻击者破坏服务器或远程代码执行。存在漏洞的服务器用于在Web浏览器中显示CODESYS系统可视化屏幕。该漏洞基于堆的缓冲区溢出,是由于名为CmpWebServerHandlerV3.dll的Web服务器库无法正确验证发送到Web服务器URL端点的用户数据而导致。攻击者可以通过发送给CmpWebServerHandlerV3组件的WEB_CLIENT_OPENCONNECTION消息请求非常大的内存分配,来利用这个漏洞,最终导致Web服务器崩溃、拒绝服务或远程执行代码。该漏洞严重程度评分如下表所示:

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系统运行中都会受到影响,主要包括 :

  • 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发生崩溃。如下图所示:

该漏洞存在于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崩溃。

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. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10245

  2. https://zh-cn.tenable.com/security/research/tra-2020-16

  3. https://nvd.nist.gov/vuln/detail/CVE-2020-10245

  4. https://customers.codesys.com/index.phpeID=dumpFile&t=f&f=13078&token=de344ca65252463cc581ef144e0c53bd97b8f211&download=


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1176/