UPnP協議CallStranger漏洞影響數百萬設備
發布時間 2020-06-30一、漏洞概述
2020年6月8日,安全研究員Yunus ?adirci公布UPnP(通用即插即用)協議漏洞公告(CVE-2020-12695),并將其命名為CallStranger漏洞。該漏洞允許攻擊者繞過內網的數據防泄露系統(DLP)進行數據逃逸,可導致敏感數據泄露,并且可對設備所在內部網絡進行掃描,甚至能劫持設備進行分布式拒絕服務(DDOS)攻擊。啟明星辰ADLab以某款智能電視作為測試目標,對CallStranger漏洞的危害性進行了演示分析。
二、漏洞影響
與之前的UPnP漏洞不同,CallStranger漏洞存在于協議設計中,因此該漏洞影響幾乎所有支持UPnP的設備,包括Windows 10所有版本、路由器、訪問接入點、打印機、游戲機、門鈴對講機、媒體應用程序和設備、攝像頭、電視機等。根據SHODAN和ZoomEye的搜索結果,至少有數以百萬計的在線設備受到影響。
三、漏洞分析
UPnP全稱為Universal Plug andPlay,即通用即插即用,UPnP允許各種網絡設備在沒有任何特殊設置或配置的情況下進行通信,使設備彼此可自動連接和協同工作。例如新的打印機插上電并連接網絡之后,局域網內的計算機就知道了打印機的型號等信息,方便進行驅動安裝。
在UPnP協議規范中有一個非常重要的功能模塊,叫做事件(Eventing)。在UPnP服務進行的時間內,只要設備用于UPnP服務的變量值發生變化或者模式發生了改變,就會產生一個事件,隨之向整個網絡進行廣播?;蛘哂脩艨梢允孪认騏PnP設備發送訂閱請求,保證UPnP設備及時地將事件傳送過來。
UPnP DeviceArchitecture 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進行限制和規范,也就是說,CALLBACKURL是攻擊者可控的。
下圖為Intel UPnP SDK中檢查CALLBACK URL的相關代碼,create_url_list函數僅僅檢查了URL是否合法,并沒有確定其是否合理。
四、漏洞危害
CallStranger漏洞所造成的危害可以分三個方面:DDoS攻擊、數據逃逸和端口掃描。其中造成的DDoS攻擊可以分兩種,SYN洪水攻擊和TCP反射放大攻擊,如下圖所示。
4.1 SYN洪水攻擊
假設我們已經通過一些方法(如在局域網廣播等)獲得了某些設備UPnP服務的eventSubURL,下面就可以向UPnP設備發起一項訂閱服務,格式如下:
SUBSCRIBE eventSubURLHTTP/1.1
NT:upnp:enent
Callback: deliveryURL
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放置在后即可確認,若攻擊者收到連接請求,則端口未開啟,反之,則開啟。
五、漏洞緩解及修復
可采用如下措施進行漏洞緩解:
檢查可疑設備,如果沒有必要,則關閉UPnP端口。
在網關等設備中審計NOTIFYHTTP數據包。
在最新更新的UPnP協議規范[1]4.1.1節中,可以看出開發者限制了訂閱事件的源IP和目標IP都必須在內網中,這從一定程度上修復了該漏洞。
參考鏈接:
[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
啟明星辰積極防御實驗室(ADLab)
ADLab成立于1999年,是中國安全行業最早成立的攻防技術研究實驗室之一,微軟MAPP計劃核心成員,“黑雀攻擊”概念首推者。截止目前,ADLab已通過CVE累計發布安全漏洞1000余個,通過 CNVD/CNNVD累計發布安全漏洞800余個,持續保持國際網絡安全領域一流水準。實驗室研究方向涵蓋操作系統與應用系統安全研究、移動智能終端安全研究、物聯網智能設備安全研究、Web安全研究、工控系統安全研究、云安全研究。研究成果應用于產品核心技術研究、國家重點科技項目攻關、專業安全服務等。