一、漏洞概述

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服务的变量值发生变化或者模式发生了改变,就会产生一个事件,随之向整个网络进行广播。或者用户可以事先向UPnP设备发送订阅请求,保证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,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。