将路径遍历串联为 RCE —— Meta 的 $111,750 漏洞

148 阅读1分钟

官网:http://securitytech.cc/

将路径遍历串联为 RCE —— Meta 的 $111,750 漏洞

在高额赏金的漏洞狩猎世界里,一个漏洞有时能换来巨额回报。但当看似简单的漏洞与另一个漏洞串联时,会发生什么?这篇写法讲述了在 2024 年 6 月 Meta BountyCon 活动中发现的一个关键漏洞链:将文件放置问题串联为远程代码执行(RCE),最终为研究者赢得了第一名和 $111,750 的大奖。

本文分解了整个攻击链,从最初的路径遍历缺陷到巧妙的 DLL 劫持技术,展示了创造性思维与坚持如何把一个小漏洞放大为严重安全威胁。


按原文配图(可点击放大)

流程图


从路径遍历到 RCE:价值 $111,750 的 Facebook Messenger 漏洞

初始突破:加密聊天中的路径遍历

调查从针对 Messenger 的端到端加密(E2EE)聊天功能开始。在 E2EE 场景下,服务端无法看到加密内容,客户端必须自行验证所有接收的数据——这种客户端信任模型常常带来丰富的攻击面。

思路很直接:如果 Windows 版 Messenger 客户端在处理通过加密通道发送的文件附件时存在缺陷,就可能产生漏洞。研究人员向附件文件名中注入特殊构造的路径遍历序列(URL 编码形式的 ..\%2e%2e%5c),很快就发现了问题。

Messenger 客户端天真地接受了该文件名,并按照遍历序列指示的位置保存附件。例如,一个名为 ..\test.bat 的文件会被保存到意图目录之外。完整路径大致类似:

C:\Users\vulna\AppData\Local\Messenger\TamStorage\media_bank\AdvancedCrypto\100027775233281\persistent\da7a85eb-aac7-46da-9cba-7a2f38f88e08\2024\06\03\20240603T091559605.att.04484a15-4cbf-4a1d-9e65-a48c59dcc7a2\..\test.bat

这证实了经典的路径遍历漏洞:攻击者可以发送消息给受害者并将任意文件写入其 Windows 机器上的某个位置。但这并不意味着立即可以远程执行代码——还存在阻碍。


按原文配图(可点击放大)

突破沙箱目录示意


障碍:Windows 路径长度限制(MAX_PATH)

最初的兴奋很快被一个重大限制浇了冷水:Windows 的 MAX_PATH(典型为 260 字符)限制。Messenger 存放附件的基础目录本身就非常长:

C:\Users\vulna\AppData\Local\Messenger\TamStorage\media_bank\AdvancedCrypto\100027775233281\persistent\da7a85eb-aac7-46da-9cba-7a2f38f88e08\2024\06\03\20240603T091559605.att.04484a15-4cbf-4a1d-9e65-a48c59dcc7a2\

仅此路径就占用了 212 个字符,只剩下 48 个字符可用于遍历序列与最终的目标文件名。每个 ..\ 占用 3 个字符,向上遍历 11 级(..\..\..\..\..\..\..\..\..\..\..)就需要 33 个字符,将文件放到 C:\Users\vulna\AppData\Local\。这时仅剩 15 个字符 用于目标文件夹和文件名。此外,该漏洞不允许覆盖已存在文件。挑战变成了:如何在只有 15 个字符文件名限制且目标目录被其他应用填满的情况下,实现代码执行。


转折:通过 DLL 劫持实现 RCE

解决方案来自一个广为人知的 Windows 攻击技术:DLL 劫持。许多应用在启动时会加载所需的 DLL,并按特定顺序查找这些 DLL,通常包括应用程序运行目录。如果攻击者能把恶意 DLL 放到在合法 DLL 之前被搜索到的位置,应用就会加载恶意 DLL。

研究显示,受害者机器上安装的其他流行应用(例如 Viber 和 Slack)也容易受到此类攻击。具体而言,Viber 客户端在启动时会尝试从其应用目录 C:\Users\vulna\AppData\Local\Viber 加载 qwave.dll,而该目录中默认并不存在该 DLL。

这就是“金钥匙”。有效的 payload 路径为:

..\Viber\qwave.dll

该路径恰好 19 个字符 长。经过对遍历序列的精确计算,最终构造出的文件名为:

%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5cViber%5cqwave.dll

当受害者在加密的 Messenger 聊天中收到这个文件时,客户端会把恶意 qwave.dll 保存到 C:\Users\vulna\AppData\Local\Viber\。受害者下次启动 Viber 时,应用会加载并执行攻击者的代码,从而无需进一步用户交互即可实现远程代码执行(RCE)。


按原文配图(可点击放大)

DLL 劫持流程图


攻击演示与时间线

完整攻击在演示视频中展示,说明如何通过 Messenger 发送文件最终在受害者 Windows 机器上实现代码执行。可观看证明概念(PoC)视频:Attack Demonstration

披露与赏金时间线如下:

  • 2024-06-03: 提交关于路径遍历漏洞的初始报告。Meta 安全团队确认问题,并指出若能展示代码执行会显著提高奖金额。
    • 2024-06-05: 提交完整的 RCE 链,使用对 Viber 的 DLL 劫持实现。
    • 2024-08-08: 初始奖励 $34,500 发放。随后关于 Meta 对移动 RCE 的奖金额度细则进行讨论。
    • 2024-08-23: 最终奖励调整为 75,000,合计奖金与额外奖励达到75,000,合计奖金与额外奖励达到 **111,750**。

关键要点(Key Takeaways)

这一发现有力地证明:多个低严重度漏洞可以被串联,最终造成巨大影响。给研究者与开发者的若干教训:

  • 客户端验证至关重要: 在端到端加密系统中,客户端是最后一道防线。所有来自外部的数据(包括文件名)都必须严格消毒与校验。
    • 别低估“次要”漏洞: 看似受限的路径遍历漏洞可能与环境中的其它弱点(如 DLL 劫持)叠加,显著放大影响。
    • 理解运行环境: 深入了解操作系统与受害者机器上运行的其他应用,可能会揭示意想不到的利用路径。掌握 DLL 劫持等技术能将漏洞变为完整的利用链。
    • 坚持挖掘价值: 初始发现有价值,但继续深入并实现 RCE 才是真正令赏金显著提升的关键。把漏洞的全部潜在影响挖掘出来通常更有回报。

公众号:安全狗的自我修养

vx:2207344074

Gitee:gitee.com/haidragon

GitHub:github.com/haidragon

Bilibili:haidragonx