写在前言近日,全球最流行的种子客户端uTorrent被曝存在安全漏洞。该漏洞的CVE编号为CVE-2020-8437。据研究人员称,远程攻击者可以利用此漏洞破坏任何连接到互联网的uTorrent实例并使其崩溃。作为一名合格的白帽黑客,我们在发现该漏洞后第一时间向uTorrent团队报告,并在短时间内迅速修复了该漏洞。现在在这篇文章中,我们将披露此漏洞的概述以及如何相应地利用它。Torrent协议Torrent下载(传说中的BT下载)可以同时与多个对等节点建立连接(其他人下载同一个文件),创建一个去中心化的下载网络,使整个对等节点组受益。每个对等节点都可以向任何其他对等节点上传和下载数据,从而消除任何单点故障或带宽瓶颈,从而使所有对等节点的下载速度更快、更稳定。Peer节点使用BitTorrent协议进行通信,这种协议通信方式需要通过握手发起。在接下来的分析中,我们将主要关注握手包和后续的数据包。BitTorrent握手握手包是对等节点之间发送的第一个数据包,用于启动通信。握手包包含五个字段,每个字段都有严格的结构化格式。握手包格式:名称长度:1字节无符号整数后跟字符串长度。ProtocolName:一个可变长度的字符串,用于标记发起初始化的对端节点支持的协议。该字段将用于兼容性问题,但在当前的主要协议实现中,该字段被设置为“BitTorrent协议”。ReservedBytes:8字节的位域,每个位域代表一个协议功能扩展,现代的Torrent客户端会使用这个域来与高级功能进行通信,以优化下载任务。InfoHash:20字节SHA1,用于标识初始化对端节点要下载的torrent文件。这个哈希是目标种子文件所有信息的哈希,包括种子名称、文件域哈希、文件大小、数量等。PeerID:20字节缓冲区,由发起者和自己指定的随机ID。当一个节点收到握手时,它会用自己的握手响应。如果两个节点的保留字节字段都设置为“扩展协议”,则节点之间将使用“扩展”消息握手来交换有关扩展组件的更多信息。BitTorrent扩展消息握手扩展消息握手用于对等节点之间共享附加扩展实现信息。与我们前面分析的BitTorrent握手不同,BitTorrent握手的大小是固定的,但是扩展消息握手可以动态改变,这将允许数据包传输大量的扩展数据。扩展消息握手格式:长度:4字节无符号整数,后跟整个消息的长度。BitTorrentMessageType:1字节,为数据包的BitTorrent消息ID,扩展消息对应20(0x14)。BitTorrentExtendedMessageType: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词典的代码。更准确的说,是解析嵌套字典的代码。在补丁发布之前(uTorrent3.5.5及之前),uTorrent将使用一个32位整数作为位字段来跟踪当前正在解析Bencoded字典的哪一部分。例如,当uTorrent在解析第一层时,该位域将被设置为'00000000000000000000000000000001',当uTorrent在解析第二层时,该位域将被设置为'00000000000000000000000000000011'。但是,如果Bencoded字典的嵌套层数超过32层会怎样?所以,我创建了这样一个字典,并把它扔给了uTorrent的字典解析器。结果如下:ThisveryNice!uTorrentcrashed!进一步分析,发现是空指针解引用错误。利用漏洞CVE-2020-8437有两个简单的利用向量,第一个需要远程对等方发送包含恶意Bencoded字典的扩展消息包,第二个需要包含恶意Bencoded字典的.torrent种子文件。1.Remotepeernodesuse当两个支持扩展消息的peer节点开始交互通信时,他们都会发送一个数据包来枚举他们支持的扩展功能,并且支持的扩展消息通过Bencoded字典发送,如果字典是恶意字典,则客户端在解析Bencoded字典时会触发漏洞CVE-2020-8437。2.torrent文件使用.torrent种子文件封装了客户端开始下载torrent所需的最基本信息。这些文件公开分享在torrent网站上,任何人都可以直接下载然后使用torrent客户端打开,因此这些文件可能成为触发漏洞CVE-2020-8437的工具。.torrent文件相当于以文件格式保存的Bencoded字典,因此我们只需将恶意Bencoded字典保存为.torrent文件即可创建攻击向量。漏洞利用代码:【点我获取】漏洞利用演示视频视频地址:【点我观看】缓解方案根据漏洞严重程度,建议用户尽快将uTorrent客户端程序升级至最新版本!
