啓明星辰ADLab:VxWorks多個遠程漏洞分析

發布時間 2019-08-02

漏洞背景

VxWorks是世界上使用最廣泛的實時操作系統(RTOS),有超過20億台設備正在使用,包括工業、電力、能源,航空航天等行業關鍵基礎設施。


近日,Armis研究團隊Armis Labs在VxWorks中發現了11個0day漏洞被稱爲URGENT/11,其中6個漏洞爲嚴重漏洞並可以遠程執行代碼(RCE),其余5個漏洞包含拒絕服務、信息泄露和邏輯缺陷漏洞。這些漏洞能夠使攻擊者遠程接管設備,而無需交互,甚至可以繞過防火牆等周邊安全設備。這些特征使這些漏洞“易于使用”,這意味著它們可用于將惡意軟件傳播到網絡內部,這種攻擊具有很大的潛力,類似于WannaCry惡意軟件的傳播方式,啓明星辰ADLab強烈建議相關用戶盡快進行設備版本升級並做好網絡安全設備的規則升級工作。

• 漏洞影響版本


URGENT/11漏洞影響自6.5版以來的幾乎所有VxWorks版本,不包括爲認證而設計的産品版本,例如VxWorks 653和VxWorks Cert Edition。


▶ VxWorks7(SR540和SR610)
▶ VxWorks6.5~6.9.4
▶ 使用IPNet網絡協議棧的VxWorks版本

表1 漏洞影響列表

• 解決方案

▶ 防火牆和IDS産品添加規則,檢測異常流量。
▶ 使用最新漏洞掃描工具檢測內部受漏洞影響的設備資産。
▶ 風河(Wind River)公司已發布相關版本更新和補丁信息。
▶ 羅克韋爾(Rockwell)、Sonicwall、施樂(Xerox)等公司已發布更新包,請及時更新。

• 漏洞原理分析

Armis Labs在VxWorks中共發現了11個0day漏洞,其中6個漏洞爲嚴重漏洞並可以遠程執行代碼(RCE),其余5個漏洞爲拒絕服務,信息泄露或邏輯缺陷漏洞。具體如下表所示:

表2 漏洞描述列表


啓明星辰ADLab選取了三個比較典型的漏洞CVE-2019-12255、CVE-2019-12257、CVE-2019-12258進行分析。它們涉及到了IPNet協議棧及DHCP協議處理實現。


▲ CVE-2019-12255漏洞分析

CVE-2019-12255漏洞是IPNet協議棧在處理TCP報文urg標志時的整數溢出漏洞。在受影響版本的VxWorks TCP協議棧實現中,如果一個TCP報文設置了urg標志,那麽該TCP報文的urgent pointer字段會在iptcp_deliver函數中用于變量tcb-> recv.urg_ptr的賦值。在VxWorks版本6.8版本中,實現代碼如下所示:

圖1 iptcp_deliver中設置urg_ptr的代碼


在此後socket執行recv()操作時,會調用函數iptcp_usr_get_from_recv_queue,該函數處理報文段時首先判斷當前TCP數據段是否包含urgent標志,如果包含該標志,則檢查是否會將當前TCP窗口中的urgent 數據讀取出來(urgent數據不允許通過常規recv讀取)。檢查方式如下圖所示:


圖2 檢查讀取數據是否會包含urgent data


其中,ugent_pointer是在函數iptcp_deliver中賦值的,len爲recv函數參數,如果通過計算發現讀取len長度的數據會讀取到urgent data數據,則重新對len賦值,以保證urgent 數據不被讀取。下面兩張圖展示了上述代碼的效果。


圖3 recv請求的數據區域(來源:URGENT/11技術白皮書)

圖4 重新修正len之後recv讀取的數據區域(來源:URGENT/11技術白皮書)


如果接收到的TCP段中的urgent_pointer字段設置爲0,則iptcp_usr_get_from_recv_queue通過計算得到修正後的len爲-1。由于len是無符號整數,即等于0xffffffff。這導致recv()調用中設置的讀取長度限制失效,從而拷貝所有可讀取的數據到用戶緩沖區,造成溢出。


漏洞驗證:


該漏洞影響的版本包括VxWorks6.5到VxWorks 6.9.3。
根據漏洞原理,我們編寫了該漏洞的POC驗證程序,並在VxWorks6.8版本的系統上進行了驗證。通過直接發送urgent pointer爲0的數據包,造成棧溢出後覆蓋函數返回地址,如下圖所示:

圖5 CVE-2019-12255漏洞驗證

CVE-2019-12257漏洞分析


此漏洞是VxWorks系統設備內置的ipdhcpc(VxWorks的內置DHCP客戶端)在處理DHCP響應數據包時觸發的堆溢出漏洞。當ipdhcpc嘗試從DHCP服務器獲取IP地址時,與目標設備位于同一子網中的攻擊者可以通過特殊設計的DHCP響應數據包回複,使得VxWorks系統設備發生堆溢出,從而可以在VxWorks系統設備上執行任意代碼。


ipdhcpc守護進程啓動後會進入ipdhcpc_daemon函數進行網絡數據的循環監聽,ipdhcpc_daemon函數主要流程有三步,第一步是通過調用ipdhcpc_if_eventcb函數對DHCP客戶端的handle進行初始化並發送DHCP廣播請求,第二步是調用ipcom_recvfrom接收DHCP服務器回複的響應數據包,第三步是通過調用ipdhcpc_replay_input對接收到的響應數據包進行處理。

圖6 ipdhcpc_daemon函數流程示意


當通過調用ipdhcpc_if_eventcb函數對dhcp客戶端的handle進行初始化時,ipdhcpc_if_eventcb函數會調用ipdhcpc_handle_malloc函數爲dhcp客戶端的handle分配空間,在ipdhcpc_handle_malloc函數中,該函數爲handle->info.options分配了大小爲ipdhcpc.max_message_size-264字節的空間。


圖7 ipdhcpc_handle_malloc函數流程示意


當ipdhcpc_daemon的主循環內執行ipcom_recvfrom接收響應數據包時:


此處接收最多爲ipdhcpc.max_message_size字節的數據包,ipdhcpc.in_pkt_len的最大長度爲ipdhcpc.max_message_size。

圖8 ipcom_recvfrom函數調用示意


ipdhcpc_daemon函數接收後數據後,會調用ipdhcpc_reply_input函數對接收到的dhcp協議數據進行處理,其中handle->priv->in_optlen 的長度基于ipdhcpc.in_pkt_len計算,handle->priv->in_optlen=ipdhcpc.in_pkt_len-240,也就是說handle->priv->in_optlen的最大值爲ipdhcpc.max_message_size-240。


圖9 ipdhcpc_reply_input函數調用示意


然後,在後續的調用 ipdhcpc_offer_input(或ipdhcpc_ack_input),在這兩個函數中會執行memcpy操作:


圖10 ipdhcpc_reply_input流程示意


在上圖中,handle-> priv-> in_optlen的最大值可以是ipdhcpc.max_message_size - 240,它大于爲handle-> info.options分配的空間,爲ipdhcpc.max_message_size - 264。在vxwroks中ipdhcpc.max_message_size值默認爲576,攻擊者在局域網中通過構造長度爲576的惡意dhcp響應數據就可以使得被攻擊設備中的vxworks系統産生24字節的堆溢出。


▲ CVE-2019-12258漏洞分析


CVE-2019-12255漏洞是IPNet協議棧在處理TCP報文分片時的拒絕服務漏洞。在受影響的VxWorks系統中Iptcp_input函數用于處理TCP分片的數據包,在解析TCP頭時,實現代碼如下:

圖11 Iptcp_input函數示意


Iptcp_input函數會調用iptcp_process_options()函數處理TCP頭的options數據域。Iptcp_process_options()函數在判斷options數據域類型時,實現代碼如下:



圖12 Iptcp_process_options函數示意


該switch根據options數據域的類型進行分發,這個case分支是設置MSS的,行80並判斷該類型的options數據域長度必須爲4,如果不等于4,就判斷MSS非法,直接退出。返回到iptcp_input函數中,由于返回值小于0,就進入if分支,調用iptcp_send_reset()函數,該函數功能是重置並斷掉當前TCP連接。如果攻擊者發送惡意options的TCP數據包,將導致連接斷開。此漏洞可以允許攻擊者強制重置連接到受影響的VxWorks設備的任何TCP會話,造成拒絕服務攻擊。


部分受漏洞影響設備:


▶ ABB公司工業自動化産品

▶ 通用電氣工業自動化産品
▶ 艾默生(Emerson)公司工業控制設備
▶ 日立(HITACHI)公司醫療設備
▶ 百通(Belden)工業設備
▶ 德爾格(Dräger)公司醫療設備
▶ 施耐德(Schneider)公司PLC
▶ 三菱(Mitsubishi)公司工業控制器
▶ 飛利浦(Philips)公司醫療設備
▶ 庫卡(KUKA)公司工業機器人
▶ 史陶比爾(Stäubli)公司工業機器人
▶ 安川(Yaskawa)電機工業機器人


除了以上設備,還有大量使用VxWorks的設備,詳細列表請參照參考文獻鏈接1和2。


參考文獻:


1.https://www.windriver.com/customers/
2.https://en.wikipedia.org/wiki/VxWorks#Notable_uses
3.https://armis.com/urgent11/
4.https://rockwellautomation.custhelp.com/app/answers/detail/a_id/1088561
5.https://www.sonicwall.com/support/product-notification/?sol_id=190717234810906
6.https://security.business.xerox.com/en-us/

7.https://www.windriver.com/security/announcements/tcp-ip-network-stack-ipnet-urgent11/