挖洞经验 | 通过下载功能实现Facebook安卓应用任意代码执行
字数 1005 2025-08-15 21:32:10
Facebook安卓应用任意代码执行漏洞分析
漏洞概述
本漏洞存在于Facebook安卓应用的群组文件下载功能中,攻击者可以利用路径遍历漏洞覆盖应用的关键库文件,最终实现任意代码执行(ACE)。该漏洞影响通过"文件标签"(Files Tab)下载文件的功能模块。
漏洞发现过程
文件下载机制分析
Facebook安卓应用存在两种文件下载机制:
- 安全机制:直接从群组帖子中下载文件时,使用安卓内置的
DownloadManager服务,该机制安全性较高 - 不安全机制:从群组的"文件标签"(Files Tab)中下载文件时,应用会直接获取文件并无过滤地保存到下载目录
路径遍历漏洞
关键漏洞点在于第二种下载方式未对文件名进行过滤处理,导致路径遍历漏洞:
- 下载路径固定为:
/sdcard/Downloads/FILE_NAME FILE_NAME未经过滤,可包含路径遍历字符(如../)
漏洞利用技术
初始尝试
- 通过Burp代理拦截文件上传请求
- 修改文件名为
sdcard/PoC尝试直接写入系统目录 - 失败:Facebook服务端安全措施删除了此类文件
绕过安全措施
- 通过Facebook安卓应用的"添加文件"功能上传
- 使用Burp拦截请求,修改文件名为
.sdcard/PoC - 成功:文件被上传到
/sdcard目录
代码执行实现
- 创建恶意原生库(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
漏洞修复
Facebook通过添加文件名过滤修复了此漏洞,修复代码中增加了对文件名的安全检查。
漏洞影响
- 影响范围:使用"文件标签"下载功能的Facebook安卓应用用户
- 危害:可实现任意代码执行,完全控制应用行为
- 利用条件:需要诱导用户下载恶意文件
防御建议
- 对所有用户提供的文件名进行严格过滤
- 避免将文件保存到敏感目录
- 使用安全的文件下载机制(如
DownloadManager) - 对关键库文件进行完整性校验
技术要点总结
- 路径遍历:未过滤文件名导致可写入任意目录
- 库文件劫持:通过覆盖关键库实现代码执行
- 安全机制绕过:通过特定文件名格式绕过服务端过滤
- NDK利用:使用原生库实现更底层的代码执行
参考实现
安全开发人员应特别注意:
- 文件下载功能的实现方式
- 用户提供数据的严格过滤
- 关键文件的存储位置和权限设置
- 原生代码的安全风险