研究人员在Facebook instagram 安卓和iOS 版本APP 发现了一个高危漏洞,攻击者可以拒绝用户访问APP,完全控制用户账户,甚至使用手机设备监控用户。
漏洞细节
漏洞存在于instagram 在图像处理方法中,技术上将漏洞作为溢出漏洞(CVE-2020-1895),当instagram 试图在发送更大的文件时触发漏洞。攻击者可以通过向攻击目标发送精心伪造的图片来触发漏洞。
有漏洞的函数是read_jpg_copy_loop,整数溢出会在解压过程中引起。
Read_jpg_copy_loop代码段
在处理JPEG 图像文件时,有漏洞的函数会处理图像尺寸。以下是有漏洞代码的伪代码:
_wrap_malloc 内存块将根据图像小的三个参数分配内存块。Width和height 都是16位的整数(uint16_t)。
cinfo->output_component 告诉我们每个像素有多少个字节。变量值代表不同的含义,1代表Greyscale、3表示RGB、4表示RGB Alpha\CMYK等。
除了height和width外,output_component 也可以被攻击者完全控制。因为在分析过程中不会验证文件中的其他数据。
__warp_malloc 希望其参数在32位的寄存器中进行处理。也就是说如果分配的大小超过 (2^32) 字节会导致整数溢出。
分配的大小是通过图像的width乘 height再乘以 output_components 得到的。因为没有检查,一旦被攻击者控制,进一步滥用就会导致整数溢出。
分配后,memcpy 将调用函数,然后将图像数据复制到分配的内存中。
复制过程是一行一行进行的:
为了导致内存崩溃,还需要溢出决定分配大小的整数,计算结果必须大于32 比特。当复制的数据大于时2^32 (4GB) 如果循环到无法映射的页面,程序很可能会崩溃:
漏洞利用
从漏洞利用的角度来看,线性溢出漏洞使攻击者能够控制分布的大小、溢出的数量和溢出内存区域的内容。
攻击者可以遵循以下步骤:
- · 通过邮件、WhatsApp、恶意图片通过短信发送给受害者;
- · 如果用户保存图片并打开图片instagram APP,然后开始使用漏洞,攻击者可以远程完全控制目标手机;
- · 使用漏洞会使受害者instagram APP 继续崩溃,除非卸载后重新安装。

补丁
Facebook 今年春天修复了这个漏洞,Facebook说在野外没有发现任何漏洞的迹象。
更多技术细节见:
https://research.checkpoint.com/2020/instagram_rce-code-execution-vulnerability-in-instagram-app-for-android-and-ios/
本文翻译自:https://www.bleepingcomputer.com/news/security/instagram-bug-allowed-crashing-the-app-via-image-sent-to-device/如果转载,请注明原始地址
【编辑推荐】