Facebook for Android 上执行任意代码
2023-3-19 14:1:23 Author: Ots安全(查看原文) 阅读量:36 收藏

点击蓝字,关注我们

通过下载功能在 Facebook for Android 上执行任意代码

  • https://dphoeniixx.medium.com/arbitrary-code-execution-on-facebook-for-android-through-download-feature-fb6826e33e0f

长话短说

最近我在 Facebook 上发现了一个适用于 Android 的 ACE,可以在不打开文件的情况下通过从组文件选项卡下载文件进行分类。

背景

我正在深入研究 Facebook 从群组下载文件的方法,我发现 Facebook 使用两种不同的机制来下载文件。如果用户从帖子本身下载文件,据我所知,它将通过名为 DownloadManager 的内置 android 服务进行下载 这是下载文件的安全方法。如果用户决定从“文件”选项卡下载文件,它将通过不同的方法下载,简而言之,应用程序将获取文件,然后将其保存到“下载”目录,不进行任何过滤。

注意:所选代码是 Facebook 推送的修复程序。易受攻击的代码没有此代码。

路径遍历

漏洞在第二种方法中,上传文件时在服务器端做了安全措施,但很容易绕过。应用程序只需获取下载文件,例如,在/sdcard/Downloads/FILE_NAME不过滤文件的情况下保存文件FILE_NAME以防止路径遍历攻击。我想到的第一个想法是使用路径遍历来覆盖本地库,这将导致执行任意代码。

我已经设置了我的 burp 套件代理然后拦截了上传文件请求并修改文件名然后../../../sdcard/PoC转发请求。

Web 上传端点

不幸的是,由于服务器端的安全措施,这还不够,我的路径遍历有效负载被删除了。我决定尝试使用有效载荷,但不幸的是,没有任何有效载荷起作用。

绕过安全措施。(旁路?)

在许多有效负载之后,我无法绕过该过滤器。我又回来浏览应用程序,可能会发现一些有用的东西,它来了!

我第一次注意到我可以通过 Facebook 移动应用程序上传文件。在我的手机上设置 burp suite 代理,在应用程序上启用白帽设置以绕过 SSL pinning,拦截上传文件请求,将文件名修改为../../../sdcard/PoC,文件已成功上传,我的有效载荷现在在文件名中!

我尝试从帖子中下载文件,但正如我所说的那样,DownloadManger 服务是安全的,因此攻击没有奏效。导航到“文件”选项卡,然后下载文件。这是我们的攻击。我的文件被写入了/sdcard/PoC!

由于我能够执行路径遍历,我现在可以覆盖本地库并执行 ACE 攻击。

开发

为了利用该攻击,我启动了一个新的 android NDK 项目来创建一个本地库,并将我的任意代码放在 JNI_OnLoad 函数上,以确保在加载库时执行恶意代码。

#include <jni.h>#include <string>#include <stdlib.h>JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {    system(“id > /data/data/com.facebook.katana/PoC”);    return JNI_VERSION_1_6;}

我构建了项目来获取我的恶意库,然后通过移动上传端点上传并将其重命名为/../../../../../data/data/com.facebook.katana/lib-xzs/libbreakpad.so

我们的漏洞现在已经准备好了!

PoC 视频:

时间线

2020 年 4 月 29 日,凌晨 5:57:将报告提交至 Facebook。

2020 年 4 月 29 日上午 11:20:Facebook 能够重现它。

2020 年 4 月 29 日中午 12:17:分类。

2020 年 6 月 16 日,中午 12:54:漏洞已修复。

2020 年 7 月 15 日,下午 5:11:Facebook 奖励了我!


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247496845&idx=1&sn=1e37ee1b4ecce89ae00251fce48ec1d4&chksm=9badbdc6acda34d03fd6740b7637f2740db09af3474d8b122b719579f1018129d52f2efececd#rd
如有侵权请联系:admin#unsafe.sh