由于3年前的一个漏洞,今天仍然有610万台设备可被远程代码执行,包括智能手机、路由器、智能电视等,而且这个漏洞早在3年前就已经修复。
该漏洞存在于UPnP™设备的便携式SDK中,也叫做 libupnp。这个库是用来实现媒体播放(DLAN)或者NAT地址转换(UPnP IGD)。智能手机上的应用程序可用这些功能播放媒体文件或者利用用户的家庭网络连接到其他的设备。
事实上,这些漏洞早在2012年12月份就已经修复了,然而仍然有很多app在使用存在漏洞的老版本SDK。统计发现有547个应用还在使用老版本的 libupnp,其中326个可从谷歌Play store中下载到,包括Netflix和腾讯QQ音乐。这些都是非常流行的应用,用户达百万,也就是说有数百万的用户还存在被攻击的可能性。另外,除了移动设备,路由器和智能电视也在之列。
漏洞利用
该漏洞存在于 libupnp库处理简单服务发现协议(SSDP)包过程中。该协议是 Universal Plug N’ Play (UPnP)标准的部分。在处理进程中会出现堆栈溢出,并且需要UDP1900端口打开。
一个精心制作的包可造成缓冲区溢出,如下图中的代码,TempBuf 缓冲可溢出,并造成死机。
进一步的研究发现,它不仅能造成死机,还可以在受害者设备上运行任意代码。如此以来,攻击者便可能会完全掌控受害者设备。我们已经确认至少有20个应用,linupnp库还可被激活:
举两个例子,主要是上图中两个比较引人注意的两个app。一个是QQ音乐,在中国有1亿用户,仅在谷歌商店中就下载超过100-500万次。打开它时,会自动激活linupnp用于DLNA播放。然而它使用的SDK是1.6.17版本,是2012年4月份更新的。
Netflix是安卓机上非常流行的一个应用,它使用的linupnp版本也是非常老的——6.1.13。
SDK可以依赖其他SDK来运行。Linphone SDK可向众多应用提供网络电话(VoIP),libupnp SDK是Linphone SDK提供NAT地址转换服务众多选项中其中的一个,如果该选项被选中了,存在漏洞的服务器也就被激活了。
解决方案
我们已经将这个问题通知给了Linphone和腾讯,双方都承诺会发布补丁,并且也都在11月下旬给予了修复。
* 参考来源 trendmicro ,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)