Palo Alto CVE-2024-3400 漏洞分析
一、前言 全球著名防火墙公司Palo Alto Networks近日在官网公布了一个CVE-2024-3400的漏洞信息,该漏洞存在于部分PAN-OS系统的GlobalProtect功能中,在某些配置打开的情况下,攻击者可以对运行该系统的设备进行未授权RCE,并且拿到系统的root权限,本文以研究学习为目的对漏洞的成因进行详细的分析。 二、影响版本 根据官网提供的信息,我们选取了PAN-OS 11.0.0版本固件作为本文的研究对象。 三、GlobalProtect分析 GlobalProtect是PAN-OS中的VPN组件,可以在管理端配置GlobalProtect Portal门户页面,其页面如下,可供VPN用户进行登录。 对固件进行解包,在/etc/nginx/sslvpn中发现了GlobalProtect Portal的服务器配置文件,查看location.conf文件,可以知道VPN的API请求直接被代理到了内部的20177端口。 通过查看端口占有情况,可知VPN请求由gpsvc程序进行处理。 四、gpsvc逆向分析 gpsvc使用golang语言编写,分析HTTP服务的调用链 net_http__ptr_conn_serve -> net_http_serverHandler_ServeHTTP -> github_com_gorilla_mux__ptr_Router_ServeHTTP -> net_http_HandlerFunc_ServeHTT -> main__ptr_GpTaskMgmt_MainHttpEntry -> main__ptr_GpTask_RunHttp -> main__ptr_GpTask_initHttp 其中main__ptr_GpTask_initHttp函数会解析请求数据包,审计该函数,注意到此处是对Cookie中的SESSID字段的处理。 在此处下断点并追踪对SESSID的处理,最终会来到main__ptr_SessDiskStore_New函数, 分析该函数的代码,其中name就是传入的SESSID,调用net_http__ptr_Request_Cookie从Cookie中获取SESSID的值,然后赋值给session->ID.str。 接下来会将session->ID.str进行简单的路径拼接,得到filename完整路径,然后传递给main_loadSessFile。 我们直接在main_loadSessFile下断点,然后调试,使用如下的测试脚本进行触发: from pwn import * import os import requests ip = '192.168.177.149' port = 20077 payload = 'POST /ssl-vpn/hipreport.esp HTTP/1.1\r\n' payload += 'Host: aa.bb.cc\r\n' payload += 'Cookie: SESSID=/aaaaaaaaaaaaa;\r\n' payload += '\r\n' sh = remote(ip,port) sh.send(payload) sh.interactive() 可以看到SESSID的内容成功拼接到filename,由于是简单的拼接,能否尝试一下/../../这种路径穿越的path?修改测试脚本。 #coding:utf8 from pwn import * import os import requests ip = '192....