[하루한줄] CVE-2025-0108: PAN-OS Nginx/Apache Path Confusion을 통한 인증 우회 취약점
URL
https://www.assetnote.io/resources/research/nginx-apache-path-confusion-to-auth-bypass-in-pan-os
Target
- PAN-OS 10.2.x < 10.2.13-h3
- PAN-OS 11.0.x < 11.1.6-h1
- PAN-OS 11.2.x < 11.2.4-h4
Explain
CVE-2025-0108은 Palo Alto Networks PAN-OS의 방화벽 관리 인터페이스에서 발견된 인증 우회 취약점입니다. Assetnote 연구팀이 CVE-2024-0012 및 CVE-2024-9474의 패치를 분석하는 과정에서 발견되었습니다.
이전 취약점들(CVE-2024-0012 및 CVE-2024-9474)은 공격자들이 PAN-OS 방화벽을 무력화하여 루트 권한을 획득하는 데 악용되었고, 해당 취약점의 패치 과정을 분석하는 중, 연구팀은 PAN-OS 관리 인터페이스 내에서 취약점을 발견했고, 이를 통해 CVE-2025-0108이라는 새로운 인증 우회 취약점을 발견했습니다.
이 취약점은 Nginx → Apache → PHP로 이어지는 복잡한 인증 처리 과정에서 발생하는 Path Confusion 및 URL 이중 디코딩(Double URL Decoding) 문제를 이용하여 인증을 우회하는 방식으로 작동합니다.
PAN-OS의 관리 인터페이스는 다음과 같은 방식으로 웹 요청을 처리합니다:
1. Nginx 단계
클라이언트의 요청을 수신하고, X-pan-AuthCheck
헤더를 설정하여 인증이 필요한지 여부를 결정합니다. 이후 특정 경로(/unauth/
포함)를 포함한 요청을 인증이 필요 없는 것으로 처리할 수 있습니다.
if ($uri ~ ^\/unauth\/.+$) {
set $panAuthCheck 'off';
}
이로 인해 /unauth/
경로를 포함하는 요청들은 X-pan-AuthCheck: off
가 설정되며, 인증이 필요하지 않은 것으로 처리됩니다.
2. Apache 단계
Nginx에서 전달된 요청을 다시 처리하고, mod_rewrite
를 통해 특정 경로를 재작성합니다.
<Location "/">
DirectorySlash off
RewriteEngine on
RewriteRule ^(.*)(\/PAN_help\/)(.*)\.(css|js|html|htm)$ $1$2$3.$4.gz [QSA,L]
AddEncoding gzip .gz
Options Indexes FollowSymLinks
Require all granted
</Location>
- 요청이 Apache로 전달되면, Apache는 다시 경로를 해석하고 내부 리디렉션을 수행합니다.
- 이 과정에서 URL이 한 번 더 디코딩됨으로 인해 Path Confusion이 발생할 가능성이 생깁니다.
3. PHP 단계
Apache에서 전달된 요청을 기반으로 실제 인증 여부를 판단하고 요청을 처리합니다.
if (
$_SERVER['HTTP_X_PAN_AUTHCHECK'] != 'off'
&& $_SERVER['PHP_SELF'] !== '/CA/ocsp'
&& $_SERVER['PHP_SELF'] !== '/php/login.php'
&& stristr($_SERVER['REMOTE_HOST'], '127.0.0.1') === false
) {
// ... check authentication ...
}
- 요청이 PHP 애플리케이션으로 전달될 때
X-pan-AuthCheck: off
상태라면, 인증이 불필요한 것으로 간주됩니다.
Apache의 경로 재해석 문제
Apache는 RewriteRule
을 처리할 때 내부 리디렉션(Internal Redirect)을 수행하는데, 이 과정에서 URL이 다시 한 번 디코딩됩니다.
RewriteRule (.*)\.abc$ $1 [L]
이중 디코딩이 발생하는 문제를 이용하면, 공격자는 이중 URL 인코딩(Double Encoding)을 활용하여 인증 우회를 시도할 수 있습니다.
공격자는 아래와 같은 요청을 전송하여 인증을 우회할 수 있습니다:
GET /unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css HTTP/1.1
Host: target.firewall
Connection: close
요청이 처리되는 과정
- Nginx 처리
%252e%252e
는 첫 번째 URL 디코딩에서%2e%2e
(..
)로 변환됨/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css
경로가/unauth/
를 포함하므로X-pan-AuthCheck: off
가 설정됨 (즉, 인증 불필요)
- Apache 처리
- Apache가 해당 경로를 재처리하며 내부 리디렉션 수행
%2e%2e
가 다시 디코딩되어 실제 요청 경로가/php/ztp_gate.php/PAN_help/x.css
로 변경됨- Apache는 이 요청을 정상적인 PHP 실행 요청으로 판단하여
ztp_gate.php
를 실행
- PHP 실행
- 요청이
/php/ztp_gate.php
로 전달되었으며,X-pan-AuthCheck: off
상태이므로 인증 없이 실행됨
- 요청이
이 취약점은 PAN-OS 10.2.13-h3, 11.1.6-h1, 11.2.4-h4 이후 버전에서 패치되었습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.