在高额赏金的漏洞狩猎世界里,一个漏洞有时能换来巨额回报。但当看似简单的漏洞与另一个漏洞串联时,会发生什么?这篇写法讲述了在 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)。
攻击演示与时间线
完整攻击在演示视频中展示,说明如何通过 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,合计奖金与额外奖励达到 $111,750 。
关键要点(Key Takeaways)
这一发现有力地证明:多个低严重度漏洞可以被串联,最终造成巨大影响。给研究者与开发者的若干教训:
- 客户端验证至关重要: 在端到端加密系统中,客户端是最后一道防线。所有来自外部的数据(包括文件名)都必须严格消毒与校验。
- 别低估"次要"漏洞: 看似受限的路径遍历漏洞可能与环境中的其它弱点(如 DLL 劫持)叠加,显著放大影响。
- 理解运行环境: 深入了解操作系统与受害者机器上运行的其他应用,可能会揭示意想不到的利用路径。掌握 DLL 劫持等技术能将漏洞变为完整的利用链。
- 坚持挖掘价值: 初始发现有价值,但继续深入并实现 RCE 才是真正令赏金显著提升的关键。把漏洞的全部潜在影响挖掘出来通常更有回报。
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)