WhatsApp奔溃死循环bug分析

ang010ela 漏洞 2019年12月19日发布
Favorite收藏

导语:研究人员在2019年8月发现了WhatsApp的一个漏洞,并将该漏洞报告给WhatsApp开发人员,该漏洞已在v 2.19.246及之后版本中修复。

背景

研究人员在2019年8月发现了WhatsApp的一个漏洞,并将该漏洞报告给WhatsApp开发人员,该漏洞已在v 2.19.246及之后版本中修复。

技术细节

1年前,研究人员就开始分析WhatsApp并尝试找出其中的漏洞。研究人员搭建了WhatsApp Manipulation Tool工具,并开始测试操作WhatsApp协议的一些新方法。

本文中描述如何在分享群组里让多个手机上的WhatsApp奔溃。

首先,需要浏览WhatsApp Web,并打开Chrome的DevTools。需要在加密密钥生成的地方加几个断点,然后再登陆时获取这些密钥。

第二,需要再扫描二维码后获取通过Burp Suite Web Socket 传递的secret参数。该参数中含有操作部分所必需的数据。

第三,需要开启本地python服务器,等待连接。Python服务器接收到消息后,就会解密消息,并以明文的形式发回给Burp Suite WhatsApp Manipulation Tool。

最后,Burp Suite Extension使用私钥、公钥和secret参数来连接python服务器。

然后就可以开始解密和修改会话消息了。其他设置正确的情况下,可以拦截消息。一旦消息被拦截,就可以使用该扩展来解密。解密的消息是JSON格式的:

该bug位于XMPP (Extensible Messaging and Presence Protocol)协议中,该协议是专门用于即使消息的通信协议。

在尝试发送一个消息时,参数participant就会接收到一个null值,然后抛出一个Null Pointer Exception。

可以从栈追踪中看到,函数d.g.ba.ba.run会处理所有的消息数据,比如message id、参与者的详细情况等。

在接收到不合法的电话号码时,分析器无法准确处理参与者的电话号码。比如,在接收到一个长度不在5-20范围内或非数字字符时,就会读取为null字符串。

在典型的场景中,WhatsApp群中的用户发送消息到群中,应用会确认参数participant来识别是谁发送了该消息。研究人员使用自己搭建的工具可以访问该参数并对该参数进行修改。

为了利用该bug,需要将participant的参数从发送者电话号码修改为非数字的字符串,比如‘c@s.whatsapp.net,如下图所示:

结果如下所示:

发送该消息后,所有该群成员的WhatsApp客户端就都会奔溃。

该bug不仅仅可以让app奔溃,当再次打开WhatsApp客户端时,仍然会奔溃,进入死循环。而且用户无法进入该群组中,而且群的所有消息都会丢失。奔溃后,群里的所有消息都无法恢复,必须删除应用来使奔溃停止。

微信图片_20191218143515.png

在WhatsApp中有许多有重要内容的群,如果攻击者使用该技术使类似的群奔溃,那么所有的聊天历史都会丢失,而且之后的通信也无法进行。

因为WhatsApp仍然是许多用户使用的主要通信软件,因此该漏洞的影响还是很大的。为了从该漏洞中恢复过来,用户必须卸载WhatsApp客户端,再次安装,并删除含有恶意payload的群。

PoC视频如下所示:

https://research.checkpoint.com/wp-content/uploads/2019/12/whatsapp_crash_v6.mp4

本文翻译自:https://research.checkpoint.com/2019/breakingapp-whatsapp-crash-data-loss-bug/如若转载,请注明原文地址: https://beta.4hou.com/vulnerable/22159.html
点赞 4
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论