作 者:安天
公眾號: 關鍵基礎設施安全應急響應中心

概述

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 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1176/