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
- 访问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文件,例如:
malicious.php
<?php system($_GET['cmd']); ?>
第三步:组合攻击
使用两个并行攻击:
-
上传攻击:使用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美元。