Palo Alto CVE-2024-3400 漏洞分析

IoT 1个月前 admin
101 0 0

前  言

全球著名防火墙公司Palo Alto Networks近日在官网公布了一个CVE-2024-3400的漏洞信息,该漏洞存在于部分PAN-OS系统的GlobalProtect功能中,在某些配置打开的情况下,攻击者可以对运行该系统的设备进行未授权RCE,并且拿到系统的root权限,本文以研究学习为目的对漏洞的成因进行详细的分析。


影响版本

根据官网提供的信息,我们选取了PAN-OS 11.0.0版本固件作为本文的研究对象。


Palo Alto CVE-2024-3400 漏洞分析

GlobalProtect分析

GlobalProtect是PAN-OS中的VPN组件,可以在管理端配置GlobalProtect Portal门户页面,其页面如下,可供VPN用户进行登录 。


Palo Alto CVE-2024-3400 漏洞分析


对固件进行解包,/etc/nginx/sslvpn中发现了GlobalProtect Portal的服务器配置文件,查看location.conf文件,可以知道VPN的API请求直接被代理到了内部20177端口 。


Palo Alto CVE-2024-3400 漏洞分析


通过查看端口占有情况,可知VPN请求由gpsvc程序进行处理。


Palo Alto CVE-2024-3400 漏洞分析

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字段的处理 。


Palo Alto CVE-2024-3400 漏洞分析


在此处下断点并追踪对SESSID的处理,最终会来到main__ptr_SessDiskStore_New函数,


Palo Alto CVE-2024-3400 漏洞分析


分析该函数的代码,其中name就是传入的SESSID,调用net_http__ptr_Request_CookieCookie中获取SESSID的值,然后赋值给session->ID.str


Palo Alto CVE-2024-3400 漏洞分析


接下来会将session->ID.str进行简单的路径拼接,得到filename完整路径,然后传递给main_loadSessFile


Palo Alto CVE-2024-3400 漏洞分析


我们直接在main_loadSessFile下断点,然后调试,使用如下的测试脚本进行触发:


Palo Alto CVE-2024-3400 漏洞分析
Palo Alto CVE-2024-3400 漏洞分析


可以看到SESSID的内容成功拼接到filename,由于是简单的拼接,能否尝试一下/../../这种路径穿越的path?修改测试脚本。

Palo Alto CVE-2024-3400 漏洞分析

可以看到,/../../../path_filepath_Join函数处理后,前缀的文件夹路径被成功消除了 。


Palo Alto CVE-2024-3400 漏洞分析


这意味着我们可以对main_loadSessFile函数指定任意路径的filename参数。这可以做什么?分析main_loadSessFile函数,其中有一条调用链main_loadSessFile(filename)->main_fileLock(filename)->syscall_Open(filename, 0x40LL, 0x180u)


Palo Alto CVE-2024-3400 漏洞分析


注意到第二个参数0x40,这是O_CREAT的值,这意味着如果文件不存在,则会创建文件,由于filename可以被任意控制,意味着可以在系统的任何地方创建一个文件,且文件名任意指定。查看刚才测试的脚本执行后,在/tmp目录下查看,确实生成了/tmp/aaaaaaaaaaaaa文件 。


Palo Alto CVE-2024-3400 漏洞分析

漏洞利用分析-telemetry

漏洞可以让我们在系统任何目录创建一个文件名可控的文件,如何结合到命令注入中?telemetry是系统中的一个数据收集服务,一般在首次配置时会弹出是否开启此功能的提示框。


Palo Alto CVE-2024-3400 漏洞分析


其状态可以在Device->Setup标签下查看,要开启,还需要配置好Device Certificate


Palo Alto CVE-2024-3400 漏洞分析


在固件中分析,telemetry/etc/cron.d中有许多telemetry的定时任务文件。


Palo Alto CVE-2024-3400 漏洞分析


这些定时任务会定期运行,其中device_telemetry_send就是负责发送数据的任务,可以看到,/usr/local/bin/dt_sendroot权限运行。


Palo Alto CVE-2024-3400 漏洞分析


分析dt_send,该程序是python写的,主函数调用了check_and_send()函数。


Palo Alto CVE-2024-3400 漏洞分析


继续分析check_and_send()函数,send_file_dirs_all()会被调用。


Palo Alto CVE-2024-3400 漏洞分析


send_file_dirs_all会调用send_file_dir,在该函数中,首先列出目录下所有文件名,然后一个个的传递给send_file进行发送。


Palo Alto CVE-2024-3400 漏洞分析


send_file代码如下,将filename拼接到命令行中,然后调用techsupport.dosys,经过测试,techsupport.dosys函数并不支持命令注入。


Palo Alto CVE-2024-3400 漏洞分析


继续跟踪进入dt_curl脚本的代码,该脚本中send_file同样也使用了命令行拼接,但是在pansys执行时有一个参数shell=True,有了这个参数,整个命令行字符串会交给bash进行解释,这意味着这里可以进行命令注入。


Palo Alto CVE-2024-3400 漏洞分析

思路梳理

由于gpsvc可以在任意目录创建文件,且文件名可控,我们可以在dt_send脚本遍历发送数据的目录下写入一个带命令注入文件名的文件,经过分析,dt_send会遍历/opt/panlogs/tmp/device_telemetry/minute目录,当dt_send调用send_file_dir时就能够遍历到我们创建的文件,并把文件名传递到dt_curl中的send_file,造成命令注入,由于dt_sendroot执行,我们注入的命令也将是root权限的。


需要注意的是,dt_send可能需要等待5分钟或者20分钟甚至更久,才会发送一次数据,因此我们使用漏洞在目录下创建注入文件后,需要等待一段时间,命令才会被执行。


EXP

参考:

https://packetstormsecurity.com/files/178099/paloalto-exec.txt


漏洞模式总结

本漏洞首先是由gpsvc中的路径穿越开始的,在审计这类golang语言写的程序时,我们可以重点关注一下path_filepath_Join这类的路径拼接函数,在处理之前是否对路径中的危险字符进行检测。


修复建议

目前官方已经发布了更新版本。

Palo Alto CVE-2024-3400 漏洞分析

参考链接

CVE-2024-3400 PAN-OS: OS Command Injection Vulnerability in GlobalProtect

Palo Alto – Putting The Protecc In GlobalProtect (CVE-2024-3400)

Palo Alto OS Command Injection






【版权说明】

本作品著作权归ha1vk所有

未经作者同意,不得转载

Palo Alto CVE-2024-3400 漏洞分析

ha1vk


二进制安全研究员,BlackHat USA 2022 WASM演讲者,专注IOT、硬件、内核等方面的研究。


往期回顾

01
MikroTik RouterOS CVE-2023-32154 认证前RCE漏洞分析
02
JSON解析不一致性漏洞探究
03
IoT设备常见Web Server漏洞挖掘思路分析
04
探索 D-Bus 跨进程消息传递中的安全风险


Palo Alto CVE-2024-3400 漏洞分析
每周三更新一篇技术文章  点击关注我们吧!


原文始发于微信公众号(破壳平台):Palo Alto CVE-2024-3400 漏洞分析

版权声明:admin 发表于 2024年4月18日 下午4:17。
转载请注明:Palo Alto CVE-2024-3400 漏洞分析 | CTF导航

相关文章