使用WebRTC开发Android Messenger:第2部分

本文是关于利用WebRTC中的漏洞开发Android Messenger的系列文章的第二部分,作者Natalie Silvanovich深入探讨了如何利用usrsctp中的漏洞破坏ASLR,以及在WebRTC中找到和利用Bug376来揭示远程对等机的内存。通过一系列复杂操作,最终实现了远程执行代码的可能性。
摘要由CSDN通过智能技术生成

这是一个由三部分组成的系列文章,内容涉及:利用WebRTC中的BUG和利用Messenger应用程序。本系列文章重点阐述了当应用程序不能应用于WebRTC补丁程序以及通信和安全问题通知中断时可能出问题的方面。

文 / Natalie Silvanovich

原文链接:

https://googleprojectzero.blogspot.com/2020/08/exploiting-android-messengers-part-2.html

 

Part 2: A Better Bug

使用WebRTC开发Android Messenger:第1部分中,我探讨了是否有可能在RTP处理中使用两个内存损坏bug来利用WebRTC。当我成功移动指令指针时,我无法破解ASLR,因此我决定寻找更适合此目的的漏洞。

 

usrsctp

我首先浏览了过去提交的WebRTC bugs,以查看是否有可能破坏ASLR。 即使很早就修复了bug,它也表明可能在何处发现了类似的漏洞。这样的bug是CVE-2020-6831,该漏洞在usrsctp中的越界读取。

usrsctp是WebRTC使用的流控制传输协议(SCTP)的实现。使用WebRTC的应用程序可以打开数据通道,该通道允许将文本或二进制数据从对等方传输。数据通道通常用于允许在视频通话期间交换文本消息,或在发生某些事件时告诉对等方,例如另一个对等方禁用其摄像头。  SCTP是数据通道的基础协议。在WebRTC中,SCTP类似于RTP,其中RTP用于音频和视频内容,SCTP用于数据。

我花了一些时间检查usrsctp代码中的漏洞。 我最终找到了CVE-2020-6831,这是从usrsctp中的堆栈缓冲区溢出。该bug使攻击者可以完全控制溢出的大小和内容。 Samuel Groß建议,这个bug可以用来破坏ASLR,方法是覆盖堆栈cookie,然后一次覆盖一个字节的返回地址,并根据应用程序是否崩溃来检测值是否正确。不幸的是,事实证明,此bug无法通过WebRTC访问,因为它需要客户端套接字连接到侦听套接字,而在WebRTC中,两个套接字都是客户端套接字。

我一直在寻找,最终找到了CVE-2020-6514。 这是WebRTC如何与usrsctp交互的一个非常不寻常的bug。  usrsctp支持自定义传输,在这种情况下,集成商需要为每个连接提供一对无效指针,以提供源地址和目标地址。 这些指针的未取消引用的值随后被usrsctp用作地址,这意味着该值包含在某些数据包中。 在WebRTC中,地址指针设置为WebRTC使用的SctpTransport实例的地址。 结果是在每个SCTP连接期间,此对象在内存中的位置将发送到远程对等方。从技术上讲,这是WebRTC中的bug,尽管usrsctp的设计也有缺陷,因为对自定义地址使用void*类型会强烈鼓励集成器使用该值的指针,尽管这是不安全的。

我希望此bug足以破解ASLR,但事实并非如此。对于漏洞利用,我需要一个已加载库的位置以及堆的位置,因此我在Android设备上进行了一系列测试,以查看这些位置之间是否存在任何关联,结果是没有任何关联。堆指针的位置不足以确定加载的库的位置。

 

我一直在寻找,我注意到usrsctp处理ASCONF块的方式中存在一个漏洞,这些块用于管理动态IP地址。该错误的来源如下:

if (param_length > sizeof(aparam_buf)) {

SCTPDBG(SCTP_DEBUG_ASCONF1, "handle_asconf: param length (%u) larger than buffer size!\n", param_length);

sctp_m_freem(m_ack);

return;

}


if (param_length <= sizeof(struct sctp_paramhdr)) {

SCTPDBG(SCTP_DEBUG_ASCONF1, "handle_asconf: param length (%u) too short\n", param_length);

sctp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值