大家好,我是小编
好久不见,十分想念
今天我们来聊一个“恐怖故事”
你的电脑又有可能被远程控制了!!!
进入干货时刻
Transmission BitTorrent应用程序最近被爆出了一个重大漏洞(CVE-2018-5702),该漏洞允许远程执行恶意代码并控制使用BitTorrent用户的计算机。
来自Google的安全团队——Project Zero发现了这个漏洞,其研究人员之一的Tavis Ormandy在初始报告发布后的40天内公布了POC。
Tavis Ormandy
通常情况下,Project Zero团队会在向受影响的供应商提供报告90天之后或者在供应商发布补丁之后披露漏洞。
然而,这一次,因为Transmission开发人员一直没有使用Project Zero团队所提供的现成补丁。Project Zero的研究人员在提交漏洞报告40天之后,就披露了这个漏洞。
Ormandy在一份公开报告中写道:
我发现Transmission开发人员没有修复这个漏洞或者发布补丁,我对此感到沮丧,因此我建议这件事公开,以便大家可以使用这个补丁。我怀疑他们不会对此作出回应,但是我们还是拭目以待吧。
POC被公开
Ormandy发布的PoC,利用了Transmission的特定功能,让攻击者可以利用Web浏览器去控制那些下载BitTorrent应用程序的用户。
Ormandy证实了他在Windows和Linux(Fedora和Ubuntu)上对Chrome和火狐的攻击,并坚信其他浏览器和平台也容易受到攻击。
Transmission BitTorrent应用程序适用于服务器 - 客户端架构,用户必须在其系统上安装后台服务程序,才能在本地浏览器上访问Web界面。
客户端使用JSON RPC请求与监听端口9091的Web服务器进行交互。后台服务程序默认只接受来自本地的请求,但通常将NAS设备设置为接受远程客户端。
Ormandy发现,使用一种名为“DNS重新绑定”的攻击技术,可以在用户电脑中安装好的后台服务程序上执行命令。
攻击解析
这个漏洞存在于安装在本地主机上的服务可以被操纵来与第三方网站交互的事实。
示例RPC会话如下所示:
$ curl -sI http://localhost:9091/transmission/rpc
HTTP/1.1 409 Conflict
Server: Transmission
X-Transmission-Session-Id: JL641xTn2h53UsN6bVa0kJjRBLA6oX1Ayl06AJwuhHvSgE6H
Date: Wed, 29 Nov 2017 21:37:41 GMT
$ curl -H 'X-Transmission-Session-Id: JL641xTn2h53UsN6bVa0kJjRBLA6oX1Ayl06AJwuhHvSgE6H' -d '{"method":"session-set","arguments":{"download-dir":"/home/user"}}' -si http://localhost:9091/transmission/rpc
HTTP/1.1 200 OK
Server: Transmission
Content-Type: application/json; charset=UTF-8
Date: Wed, 29 Nov 2017 21:38:57 GMT
Content-Length: 36
{"arguments":{},"result":"success"}
与所有这样的HTTP RPC方案一样,任何网站都可以向监听本地的守护进程发送请求:XMLHttpRequest(),但理论上会被忽略,因为客户端必须证明他们可以读取和设置特定的header:X-Transmission-Session-Id。
不幸的是,因为一种名为“DNS重新绑定” 的攻击,这样的设计并不能起作用。任何网站可以简单地创建一个他们授权通信的DNS,然后将其解析为本地主机。
攻击者利用这个漏洞(CVE-2018-5702),创建一个他们授权通信的DNS,然后将其解析为易受攻击的计算机的本地主机名。以下是攻击的工作原理:
用户访问http://attacker.com,其中包含一个标签中攻击者控制的子域。
攻击者配置他们的DNS服务器,以非常低的TTL(Time To Live)交替响应127.0.0.1和123.123.123.123(攻击者控制的地址)。
当浏览器解析为123.123.123.123时,它会提供等待DNS entry过期的HTML网页,或者通过查找来强制高速缓存终止,那么它有权读取和设置headers。
我通过一个域名用来测试DNS重新绑定:rbndr.us,你可以使用下面的链接来生成主机名。
https://lock.cmpxchg8b.com/rebinder.html
在这里,我想要交替切换使用127.0.0.1和199.241.29.227,所以我使用了7f000001.c7f11de3.rbndr.us:
$ host 7f000001.c7f11de3.rbndr.us
7f000001.c7f11de3.rbndr.us has address 127.0.0.1
$ host 7f000001.c7f11de3.rbndr.us
7f000001.c7f11de3.rbndr.us has address 199.241.29.227
$ host 7f000001.c7f11de3.rbndr.us
7f000001.c7f11de3.rbndr.us has address 127.0.0.1
在这里你可以看到,我想要的两个地址将以非常低的TTL进行随机解析(请注意,因为缓存的原因,可能需要一段时间才能切换)。
我只用等待缓存的响应时间过期,然后将POST请求发送到服务器就可以了。
开发很简单,你可以设置script-torrent-done-enabled和运行任何命令,或设置download-dir到/home/user/,然后上传种子.bashrc。
这是我的demo:
这个Pull Request(请求代码合并)通过要求白名单主机发送一个不安全的请求来缓解这种攻击。
攻击截图:
在攻击开始之前,下载目录设置正确:
界面:
运行:
攻击成功:
结果是:
看看POC吗?
后台输入:好久不见,让POC更有温度。
好久不见的小编
和好久不见的POC
是不是需要点赞和转发呢~
领取专属 10元无门槛券
私享最新 技术干货