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
调转至登录页面:

认证绕过访问:

在研究一些配置复杂的应用系统时,不要着急进行代码审计或者逆向分析,可以首先深入了解系统架构、进程服务和配置文件等信息,或许你就能够直接找到一些潜在的逻辑漏洞点,从而达到事半功倍的效果。

由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。