CVE-2024-0012&CVE-2025-0108 PAN-OS 从配置文件中寻找认证绕过漏洞
CVE-2024-0012&CVE-2025-0108 PAN-OS 从配置文件中寻找认证绕过漏洞
原创 KCyber 自在安全 2025-04-20 02:14
漏洞概述
Palo Alto Networks PAN-OS
先后爆出2
个认证绕过漏洞CVE-2024-0012
和CVE-2025-0108
,漏洞原理比较类似,都是因为在多级配置转发的过程中存在逻辑缺陷,导致可通过构造特殊请求数据包实现认证绕过,从而越权访问Web
管理界面。
架构分析
解析vmdk
文件,提取文件系统。然后进入系统底层bash
,分析可知443
端口对应Nginx
服务:
[root@PA-VM ~]# ps -ef|grep 5708root 5337 2711 0 03:23 tty1 00:00:00 grep --color=auto 5708nobody 5708 3120 0 01:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.confnobody 6235 5708 0 01:01 ? 00:00:05 nginx: worker process
在nginx.conf
中定义了一个转发到28250
端口的规则:
upstream backend_mgmt { server 127.0.0.1:28250;}proxy_redirect http://$host:28250/ $scheme://$host:$server_port/;proxy_redirect http://$proxy_host:28250/ $scheme://$host:$server_port/;
对应Apache httpd
进程:
/usr/sbin/httpd -f /etc/httpd/mgmtui/conf/httpd.conf -DNO_DETACH -DFOREGROUND
在Apache httpd
配置中通过mod_php
模块调用php
进程进行解析:
<FilesMatch \.(php|phar)$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"</FilesMatch>
可见PAN-OS
中的Web
服务转发比较复杂,如果配置不当,很容易出现意想不到的漏洞:
漏洞分析
CVE-2024-0012
在分析这种配置复杂的程序时,可以首先从配置文件入手。查看Nginx
配置,在proxy_default.conf
中设置了一个名为X-pan-AuthCheck
的header
,从命名来看和认证有关:
在php
文件中搜索找到uiEnvSetup.php
中存在如下代码,猜测当X-pan-AuthCheck
头取值为off
时可能无需认证:
继续搜索$panAuthCheck
等于off
的点,发现在locations.conf
开头就将其设置为on
,在后面的location
定义中部分重新定义为了off
。同时注意到在初始化$panAuthCheck
为on
之前定义了一个以.js.map
结尾的location
,其将对应请求直接转发到$gohost$gohostExt
(对应后台的php
进程):
因此猜测当以.js.map
结尾的请求,如果设置X-pan-AuthCheck
头为off
可绕过认证。
未授权访问将跳转到登录页面:
认证绕过:
所以对于php
请求,结尾加上.js.map
,并添加X-pan-AuthCheck: off
请求头可绕过认证 (因为此时$panAuthCheck
并未赋值 )。
CVE-2025-0108
当X-pan-AuthCheck
设置为off
时,表示无需认证可直接访问。在proxy_default.conf
配置文件开头已经设置其为On
,但是URL
以/unauth
开头、或者等于/php/logout.php
等将覆盖设置为off
:
是否可以找到一个以/unauth
开头,然后结合../
实现认证绕过呢?注意到在Apache httpd
的配置文件httpd.conf
中存在一个RewriteRule
规则,将包含/PAN_help/
的静态资源请求进行重写:
组合起来看,假如构造如下请求:
/unauth/%252e%252e/php/utils/user.preference.php/PAN_help/test.js
第一步
,经过Ngnix
反向代理时将进行一次URL
解码,此时因为请求以/unauth/
开头,所以$panAuthCheck
赋值为off
,发给Apache httpd
的URL
将变为:
/unauth/%2e%2e/php/utils/user.preference.php/PAN_help/test.js
第二步
,Apache httpd
将再进行一次URL
解码,并且进行RewriteRule
规则重写后URL
如下:
/unauth/../php/utils/user.preference.php/PAN_help/test.js.gz
第三步
,该请求将会通过Apache httpd
进行标准化处理后调用mod_php
模块解析:
/php/utils/user.preference.php/PAN_help/test.js.gz
未授权访问直接302
调转至登录页面:
认证绕过访问:
在研究一些配置复杂的应用系统时,不要着急进行代码审计或者逆向分析,可以首先深入了解系统架构、进程服务和配置文件等信息,或许你就能够直接找到一些潜在的逻辑漏洞点,从而达到事半功倍的效果。
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。