Mozilla位于AWS上的0day RCE
字数 1210 2025-08-26 22:11:15

WebPageTest 0day RCE漏洞分析与利用教学

漏洞概述

本教学文档详细分析Mozilla在AWS上部署的WebPageTest服务中发现的0day远程代码执行(RCE)漏洞。该漏洞组合了SSRF、文件上传和竞争条件等多个安全问题,最终导致攻击者可以在Mozilla服务器上执行任意代码。

漏洞背景

WebPageTest是一款网站性能分析工具,允许用户测试给定URL或主机的性能状况。Assetnote CS安全服务发现:

  • Mozilla的两个子域名部署了WebPageTest服务:
    • wpt-vpn.stage.mozaws.net
    • wpt1.dev.mozaws.net
  • 这些实例未启用认证机制,允许匿名访问

漏洞组件分析

1. 文件上传与解压漏洞

关键文件:/www/work/workdone.php

漏洞点:

if (isset($_FILES['file']['tmp_name'])) {
    ExtractZipFile($_FILES['file']['tmp_name'], $testPath);
    CompressTextFiles($testPath);
}

允许上传任意ZIP文件并解压到指定位置,但存在IP限制:

!strcmp($_SERVER['REMOTE_ADDR'], "127.0.0.1")

2. 安全目录函数(SecureDir)的竞争条件

SecureDir函数位于/www/common_lib.inc(2322-2347行):

function SecureDir($path) {
    $files = scandir($path);
    foreach ($files as $file) {
        $filepath = "$path/$file";
        if (is_file($filepath)) {
            $parts = pathinfo($file);
            $ext = strtolower($parts['extension']);
            if (strpos($ext, 'php') === false && strpos($ext, 'pl') === false && ...) {
                @chmod($filepath, 0666);
            } else {
                @chmod($filepath, 0666);
                unlink($filepath);
            }
        } elseif ($file != '.' && $file != '..' && is_dir($filepath)) {
            SecureDir($filepath);
        }
    }
}

竞争条件:在文件被解压后到被删除前存在时间窗口,攻击者可利用此间隙访问恶意文件。

3. IP伪造漏洞

/www/common.inc第70行:

if (isset($_SERVER["HTTP_FASTLY_CLIENT_IP"])) 
    $_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_FASTLY_CLIENT_IP"];

通过设置FASTLY-CLIENT-IP请求头可伪造客户端IP为127.0.0.1,绕过IP限制。

漏洞利用步骤

第一步:获取有效测试ID

  1. 访问WebPageTest页面(如wpt-vpn.stage.mozaws.net)
  2. 对任意网站(如google.com)执行Traceroute操作
  3. 获取重定向URL中的测试ID,如:
    http://wpt-vpn.stage.mozaws.net/result/171124_GW_9/

第二步:构造恶意ZIP文件

创建包含PHP webshell的ZIP文件,例如:

malicious.php
<?php system($_GET['cmd']); ?>

第三步:组合攻击

使用两个并行攻击:

  1. 上传攻击:使用Burp Intruder或Turbo Intruder发送大量请求:

    • 设置FASTLY-CLIENT-IP: 127.0.0.1
    • 上传恶意ZIP文件到/www/work/workdone.php
  2. 访问攻击:同时发送大量请求尝试访问解压后的PHP文件

关键点

  • 提高线程数(200+)以利用竞争条件
  • 使用高效工具如Turbo Intruder增加成功率

漏洞修复建议

  1. 实施身份验证机制
  2. 移除或严格限制IP伪造功能
  3. 改进文件处理流程,消除竞争条件
  4. 对上传文件进行更严格的内容检查

总结

该漏洞展示了如何组合多个看似小的安全问题形成完整的攻击链。关键点包括:

  1. 未认证的WebPageTest实例
  2. 通过HTTP头伪造IP地址
  3. 文件上传与解压功能
  4. SecureDir函数中的竞争条件

此漏洞被Mozilla漏洞悬赏项目确认为有效漏洞,奖励500美元。

WebPageTest 0day RCE漏洞分析与利用教学 漏洞概述 本教学文档详细分析Mozilla在AWS上部署的WebPageTest服务中发现的0day远程代码执行(RCE)漏洞。该漏洞组合了SSRF、文件上传和竞争条件等多个安全问题,最终导致攻击者可以在Mozilla服务器上执行任意代码。 漏洞背景 WebPageTest是一款网站性能分析工具,允许用户测试给定URL或主机的性能状况。Assetnote CS安全服务发现: Mozilla的两个子域名部署了WebPageTest服务: wpt-vpn.stage.mozaws.net wpt1.dev.mozaws.net 这些实例未启用认证机制,允许匿名访问 漏洞组件分析 1. 文件上传与解压漏洞 关键文件: /www/work/workdone.php 漏洞点: 允许上传任意ZIP文件并解压到指定位置,但存在IP限制: 2. 安全目录函数(SecureDir)的竞争条件 SecureDir 函数位于 /www/common_lib.inc (2322-2347行): 竞争条件 :在文件被解压后到被删除前存在时间窗口,攻击者可利用此间隙访问恶意文件。 3. IP伪造漏洞 /www/common.inc 第70行: 通过设置 FASTLY-CLIENT-IP 请求头可伪造客户端IP为 127.0.0.1 ,绕过IP限制。 漏洞利用步骤 第一步:获取有效测试ID 访问WebPageTest页面(如wpt-vpn.stage.mozaws.net) 对任意网站(如google.com)执行Traceroute操作 获取重定向URL中的测试ID,如: http://wpt-vpn.stage.mozaws.net/result/171124_GW_9/ 第二步:构造恶意ZIP文件 创建包含PHP webshell的ZIP文件,例如: 第三步:组合攻击 使用两个并行攻击: 上传攻击 :使用Burp Intruder或Turbo Intruder发送大量请求: 设置 FASTLY-CLIENT-IP: 127.0.0.1 上传恶意ZIP文件到 /www/work/workdone.php 访问攻击 :同时发送大量请求尝试访问解压后的PHP文件 关键点 : 提高线程数(200+)以利用竞争条件 使用高效工具如Turbo Intruder增加成功率 漏洞修复建议 实施身份验证机制 移除或严格限制IP伪造功能 改进文件处理流程,消除竞争条件 对上传文件进行更严格的内容检查 总结 该漏洞展示了如何组合多个看似小的安全问题形成完整的攻击链。关键点包括: 未认证的WebPageTest实例 通过HTTP头伪造IP地址 文件上传与解压功能 SecureDir函数中的竞争条件 此漏洞被Mozilla漏洞悬赏项目确认为有效漏洞,奖励500美元。