作者:啟明星辰ADLab
原文鏈接:https://mp.weixin.qq.com/s/OBgJJ3UqENhw92CJ2wE9pQ

1.漏洞概述

2020年6月8日,安全研究員Yunus ?adirci公布UPnP(通用即插即用)協議漏洞公告(CVE-2020-12695),并將其命名為CallStranger漏洞。該漏洞允許攻擊者繞過內網的數據防泄露系統(DLP)進行數據逃逸,可導致敏感數據泄露,并且可對設備所在內部網絡進行掃描,甚至能劫持設備進行分布式拒絕服務(DDOS)攻擊。根據CallStranger漏洞原理,啟明星辰ADLab以某款智能電視作為測試目標,對CallStranger漏洞的危害性進行了演示分析。

2.漏洞影響

與之前的UPnP漏洞不同,CallStranger漏洞存在于協議設計中,因此該漏洞影響幾乎所有支持UPnP的設備,包括Windows 10所有版本、路由器、訪問接入點、打印機、游戲機、門鈴對講機、媒體應用程序和設備、攝像頭、電視機等。根據SHODAN和ZoomEye的搜索結果,至少有數以百萬計的在線設備受到影響。

3.漏洞分析

UPnP全稱為Universal Plug and Play,即通用即插即用,UPnP允許各種網絡設備在沒有任何特殊設置或配置的情況下進行通信,使設備彼此可自動連接和協同工作。例如新的打印機插上電并連接網絡之后,局域網內的計算機就知道了打印機的型號等信息,方便進行驅動安裝。

在UPnP協議規范中有一個非常重要的功能模塊,叫做事件(Eventing)。在UPnP服務進行的時間內,只要設備用于UPnP服務的變量值發生變化或者模式發生了改變,就會產生一個事件,隨之向整個網絡進行廣播。或者用戶可以事先向UPnP設備發送訂閱請求,保證UPnP設備及時地將事件傳送過來。

UPnP Device Architecture 2.0[1]中關于UPnP的NT與CALLBACK訂閱模塊有如下格式:

publisher path一般為訂閱的服務,以GENA格式存放在設備的某個XML文件中,類似下圖。

CALLBACK的值一般為回調地址的URL。NT取upnp:event表示訂閱事件。

UPnP協議規范文檔中提到:CALLBACK是必填區域,所填信息為發送事件信息的URL。一般情況下為UPnP供應商指定。如果其中定義了不止一個URL,設備會按順序嘗試連接,直到有一個連接成功。每個URL一般為HTTP協議(即前綴為http://)。設備不得以任何方式截斷這些URL。如果內存不足以存儲所有的CALLBACK URL,設備會拒絕訂閱。

整個訂閱流程大概可以簡化如下圖。

很顯然,該協議并沒有對CALLBACK傳入的URL進行限制和規范,也就是說,CALLBACK URL是攻擊者可控的。

下圖為Intel UPnP SDK中檢查CALLBACK URL的相關代碼,create_url_list函數僅僅檢查了URL是否合法,并沒有確定其是否合理。

4.漏洞危害

CallStranger漏洞所造成的危害可以分三個方面:DDoS攻擊、數據逃逸和端口掃描。其中造成的DDoS攻擊可以分兩種,SYN洪水攻擊和TCP反射放大攻擊,如下圖所示。

4.1 SYN洪水攻擊

假設我們已經通過一些方法(如在局域網廣播等)獲得了某些設備UPnP服務的eventSubURL,下面就可以向UPnP設備發起一項訂閱服務,格式如下:

  • SUBSCRIBE eventSubURL HTTP/1.1

  • NT: upnp:enent

  • Callback: delivery URL

  • Host: upnp設備:upnp服務端口

如前文協議規范中提到的,若CALLBACL Value中定義了不止一個URL,則會按順序嘗試TCP連接,直到有一個連接成功。那么攻擊者可在CALLBACK Value中精心構造多個URL,使每一個都無法連接成功,這樣UPnP設備就會用多個SYN包依次對每個URL嘗試TCP握手。假設攻擊者可以操控很多個設備,就會導致受害設備遭受DDoS攻擊。

SYN數據包的數量根據設備操作系統和配置的不同而不同,利用某品牌智能電視對受害設備進行SYN洪水攻擊測試,測試結果如下圖所示。

該智能電視每收到一個CALLBACK Value就會發送8個SYN數據包嘗試連接受害設備。若我們每個CALLBACK的URL值為25字節,那么帶寬放大因子便可以達到8*60/25=19.2。因為CALLBACK Value的個數是沒有限制的,所以理論上是可以無限放大的。

4.2 TCP反射放大攻擊

Windows Media Player在播放視頻時也有相應的UPnP服務,我們獲取到的UPnP服務列表如下:

我們選取其中一項服務來測試一下。攻擊者只需要發送210字節訂閱包,如下圖。

受害設備之后就會收到近700字節的數據包,放大因子達三倍多。其放大效果一般與UPnP設備的操作系統和廠商配置有關。

4.3 數據逃逸

一般情況下,企業內部網絡都有不同的安全等級劃分。當攻擊者滲透到企業內網時,若內網開啟數據泄露防護系統,無法將獲得的敏感數據傳輸出去,此時UPnP設備會是一個很好的跳板。

在RFC7230的3.1.1節[2]中,并沒有對Request Line的長度做任何限制,這使得攻擊者可以將數據通過Callback的URL值傳輸出去。如下圖,某品牌智能電視一次請求就傳輸了2500KB的數據。

4.4 端口掃描

如前文提到的,若CALLBACK定義了不止一個URL,則會按順序嘗試TCP連接,直到有一個成功,那么這個規則顯然也可以用于端口掃描,如下圖所示,假設攻擊者需要掃描IP為192.168.1.13的555端口是否開啟,那么攻擊者只需要將某個可以監控的URL放置在后即可確認,若攻擊者收到連接請求,則端口未開啟,反之,則開啟。

5. 漏洞緩解及修復

可采用如下措施進行漏洞緩解:

  1. 檢查可疑設備,如果沒有必要,則關閉UPnP端口。

  2. 在網關等設備中審計NOTIFY HTTP數據包。

在最新更新的UPnP協議規范[1]4.1.1節中,可以看出開發者限制了訂閱事件的源IP和目標IP都必須在內網中,這從一定程度上修復了該漏洞。

6.參考鏈接

  1. https://openconnectivity.org/upnp-specs/UPnP-arch-DeviceArchitecture-v2.0-20200417.pdf

  2. https://tools.ietf.org/html/rfc7230#section-3.1.1

  3. https://delaat.net/rp/2008-2009/p26/report.pdf

  4. https://kb.cert.org/vuls/id/339275

  5. https://zh-cn.tenable.com/blog/cve-2020-12695-callstranger-vulnerability-in-universal-plug-and-play-upnp-puts-billions-of

  6. https://www.youtube.com/watch?v=hJSxDHPyTBE


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