写在前面的话:最近,uTorrent这款备受欢迎的torrent客户端被曝出了一个安全漏洞,该漏洞的CVE编号为CVE-2020-8437。根据研究人员的透露,攻击者可以利用这个漏洞远程入侵连接到互联网的任何uTorrent实例,并导致其崩溃。作为合格的白帽黑客,我们在发现这个漏洞后立即向uTorrent团队报告,并且漏洞在短时间内得到了修复。现在,在这篇文章中,我们将公开该漏洞的概述以及相关的利用方式。
Torrent协议:Torrent下载(也被称为BT下载)可以与多个对等节点同时建立连接,创建一个分散的下载网络,使所有对等节点共同受益。每个对等节点都可以上传和下载数据到其他对等节点,这种方式可以消除单一故障点或带宽瓶颈,从而提高下载速度和稳定性。
对等节点之间使用BitTorrent协议进行通信,其中握手是通信的起始阶段。在接下来的分析中,我们将重点关注握手包和随后的数据包。
BitTorrent握手:握手包是对等节点之间初始化通信时发送的第一个数据包,它包含五个字段,每个字段都有严格的结构化格式。
握手包格式:
- Name Length:1字节无符号整型,后跟字符串长度。
- Protocol Name:可变长度的字符串,用于标记发起初始化的对等节点支持的协议。在目前的主要协议实现中,该字段通常设置为”BitTorrent protocol”。
- Reserved Bytes:8字节比特字段,每一位代表一个协议功能扩展。现代Torrent客户端使用这个字段与高级功能进行通信以优化下载任务。
- Info Hash:20字节SHA1,用于识别初始化对等节点想要下载的种子文件。该哈希包括种子名称、文件域哈希、文件大小和数量等信息。
- Peer ID:20字节缓冲区,用作发起方指定的随机标识。
当一个节点收到握手包后,它会用自己的握手包进行回应。如果两个节点的Reserved Bytes字段都设置为”Extension Protocol”,那么它们将使用”扩展”消息握手来交换更多关于扩展组件的信息。
BitTorrent扩展消息握手:扩展消息握手用于对等节点之间共享额外扩展实现的信息。与之前分析的BitTorrent握手包不同,扩展消息握手包的大小是可变的,这允许传输大量的扩展数据。
扩展消息握手包格式:
- Length:4字节无符号整型,后跟整个信息的长度。
- BitTorrent Message Type:1字节,表示数据包的BitTorrent消息ID,扩展消息对应的ID是20(0x14)。
- BitTorrent Extended Message Type:1字节,表示扩展消息的ID,对应的值为0。
- M:动态变化的数据包大小,支持补充扩展的Bencoded格式字典。
Bencoded字典:M字段是一个Bencoded格式的字典,类似于Python字典格式,但与Python字典不同的是,Bencoded字典在值之前包含了每个字符串的长度,并使用”d”和”e”分别表示”{“和”}”。下图是Python字典和Bencoded字典的对比:
此外,Python字典和Bencoded字典都支持字典内部嵌套的功能。
漏洞CVE-2020-8437:漏洞CVE-2020-8437存在于uTorrent解析Bencoded字典的代码中,准确地说,是解析嵌套字典的代码。在补丁发布之前(uTorrent 3.5.5及之前版本),uTorrent使用32位整数作为比特字段来跟踪当前解析的Bencoded字典部分。例如,当uTorrent解析第一层时,该比特字段将设置为’00000000 00000000 00000000 00000001’,当uTorrent解析第二层时,该比特字段将设置为’00000000 00000000 00000000 00000011’。
然而,如果一个Bencoded字典的嵌套层数超过32层,会发生什么呢?于是,我创建了一个这样的字典,并将其传递给uTorrent的字典解析器,结果如下:
太棒了!uTorrent崩溃了!经过深入分析,我们发现这是一个空指针引用错误。
漏洞利用:漏洞CVE-2020-8437有两个简单的利用向量。首先,一个远程对等节点可以发送一个包含恶意Bencoded字典的扩展消息数据包,当客户端解析Bencoded字典时,就会触发漏洞CVE-2020-8437。其次,一个包含恶意Bencoded字典的.torrent种子文件也可以成为触发漏洞CVE-2020-8437的工具。
远程对等节点利用:当两个支持扩展消息的对等节点开始交互通信时,它们会发送一个数据包来枚举各自支持的扩展功能,这些消息使用Bencoded字典发送。如果字典是恶意的,客户端在解析Bencoded字典时就会触发漏洞CVE-2020-8437。
Torrent文件利用:.torrent种子文件封装了客户端开始下载torrent所需的基本信息,这些文件在torrent网站上公开共享,任何人都可以直接下载并使用torrent客户端打开。因此,这些文件有可能成为触发漏洞CVE-2020-8437的工具。.torrent文件实际上是一个以文件格式保存的Bencoded字典,因此我们只需要将恶意Bencoded字典保存为.torrent文件,就可以创建攻击向量。
漏洞利用演示视频:视频地址:
缓解方案:鉴于该漏洞的严重性,建议用户尽快升级uTorrent客户端到最新版本!