
PAN-OS 대상이 CVE-2026-0265에 취약한지 안전하게 탐지합니다.
세션 인증이나 상태 변경 없이 Palo Alto Networks PAN-OS GlobalProtect 포털이 CVE-2026-0265에 취약한지 안전하게 판별합니다.
CVE-2026-0265는 PAN-OS 및 Panorama에 영향을 미치는 원격 인증 우회 취약점으로, 인증 프로파일이 Cloud Authentication Service(CAS)를 사용할 때 트리거됩니다. 취약한 libpanmp_mp.so의 pan_auth_verify 함수는 공격자가 제어하는 alg 헤더만을 기준으로 JSON Web Token 서명 검증을 수행합니다. 즉, alg=HS256과 서명으로 HMAC-SHA256(cas_public_key_pem, header.payload)를 사용하는 위조된 JWT가 실제 RS256 서명된 CAS 토큰인 것처럼 수락되어, 모든 공격자가 모든 사용자를 가장할 수 있습니다.
이 버그는 GlobalProtect 포털 (/saml/acs.esp, VPN 세션 획득) 및 관리 UI (/SAML20/SP/ACS, 전체 PAN-OS 관리자 권한 획득)의 두 가지 공격 표면을 통해 접근 가능합니다. 이 도구는 GlobalProtect 포털 표면만 다룹니다.
단일 익명 GET /global-protect/prelogin.esp 요청으로 권위 있는 판정에 필요한 모든 정보를 얻을 수 있습니다:
<cas-auth>yes|no</cas-auth>가 포함됩니다. yes 값은 이 리스너에 대해 CVE 전제 조건이 충족되었음을 확인합니다.<saml-request> 필드에 아웃바운드 CAS 요청 토큰이 포함됩니다. 이를 디코딩하면 방화벽의 권위 있는 버전 문자열을 얻을 수 있으며, 이는 벤더 권고의 기본 버전별 패치-핫픽스 매트릭스와 교차 참조되어 판정을 생성합니다..saas 단락 — Palo Alto의 설명(2026-05-21)에 따라 PA 클라우드 관리 빌드는 기본 베이스 빌드 번호와 관계없이 영향을 받지 않습니다.스크립트는 판정, 방화벽이 보고한 PanOS 버전(방어자가 자신의 인벤토리와 평가를 교차 검증할 수 있음), 기본 분류 컨텍스트(prelogin_status, prelogin_msg, http_status, 오류 메모)를 출력합니다. 파이프라인에 더 풍부한 장치 메타데이터가 필요한 경우 대상 URL을 자체 인벤토리와 교차 참조하세요.
git clone https://github.com/BishopFox/CVE-2026-0265-check
cd CVE-2026-0265-check
pip install requests
Python 3.9+ 및 requests 패키지가 필요합니다.
하나 이상의 대상을 위치 인수, --targets-file 또는 stdin을 통해 전달하세요. 호스트 이름 및 host:port 문자열은 자동으로 https://로 감싸집니다.
python3 CVE-2026-0265-check.py [options] <target> [<target>...]
기본 출력은 stdout의 대상당 하나의 JSON 객체입니다 (jq 호환).
스크립트는 대상당 세 가지 판정 클래스 중 하나를 출력합니다. 확정 판정은 해당 대상의 취약성 질문에 권위 있게 답변합니다. 미확정 판정은 프로브가 결론에 도달할 수 없었으며 운영자의 후속 조치가 필요함을 나타냅니다.
| 판정 | 상황 |
|---|---|
VULNERABLE | CAS 연결됨, PanOSversion이 이 기본 버전에 대한 권고의 패치된 핫픽스보다 엄격히 낮고, .saas가 아님. |
$ python3 CVE-2026-0265-check.py -b -f targets.txt
https://gp1.customer.example VULNERABLE 11.1.6-h23
https://gp2.customer.example PATCHED 11.1.6-h32
https://vpn.cloud.customer.example NOT-AFFECTED-SAAS 11.2.7-h9.saas
https://mgmt.customer.example NOT-AFFECTED-NO-CAS -
https://www.customer.example NOT-AFFECTED-NOT-GLOBALPROTECT -
https://internal-vpn.customer.example UNDETERMINED-MTLS-GATED -
$ python3 CVE-2026-0265-check.py gp.customer.example | jq .
{
"target": "https://gp.customer.example",
"verdict": "VULNERABLE",
"panos_version": "11.1.6-h23",
"prelogin_status": "Success",
"http_status": 200,
"notes": [
"11.1.6-h23 is below the advisory's patched hotfix for this base."
]
}
gpsvc는 연속 프로빙 시 rate-limit를 적용합니다 — 스크립트는 각 HTTP 503를 증가하는 백오프로 재시도하지만, -c 5와 적당한 -t는 대규모 플릿에 친화적입니다:
cat all-targets.txt | python3 CVE-2026-0265-check.py -b -c 5
스크립트는 다음 조건에서만 확정 판정을 생성할 수 있습니다:
NOT-AFFECTED-NOT-GLOBALPROTECT 또는 UNDETERMINED-ERROR로 해석됨).UNDETERMINED-MTLS-GATED) 또는 공격적인 User-Agent 검사에 의해 게이트되지 않아야 합니다 (그렇지 않으면 UNDETERMINED-VERSION-GATED).MIT 라이선스에 따라 배포됩니다.
사전 상호 동의 없이 대상을 공격하기 위해 이 도구를 사용하는 것은 불법입니다. 모든 해당 지역, 주, 연방 법률을 준수하는 것은 최종 사용자의 책임입니다. 개발자는 어떠한 책임도 지지 않으며 이 프로그램으로 인한 오용이나 손해에 대해 책임을 지지 않습니다.
| 플래그 | 의미 |
|---|
-f, --targets-file FILE | FILE에서 한 줄에 하나의 대상 읽기 |
-t, --timeout SECONDS | 요청당 타임아웃. 기본값: 20.0 |
-c, --concurrent N | 최대 병렬 대상 수. 기본값: 5 |
-b, --brief | 전체 JSON 대신 대상당 <url>\t<verdict>\t<panos_version> 출력 |
--user-agent UA | 프로브 User-Agent를 재정의합니다. 기본값은 gpsvc의 GP-클라이언트 버전 게이트를 우회하는 브라우저 유사 Chrome 문자열입니다. 액세스 로그 감사 가시성이 필요하고 버전 게이트 경로가 필요하지 않은 경우 사용자 지정 UA를 사용하세요. |
| 판정 | 상황 |
|---|
PATCHED | CAS 연결됨, PanOSversion이 이 기본 버전에 대한 권고의 패치된 핫픽스 이상임. |
NOT-AFFECTED-SAAS | CAS 연결됨, 그러나 PanOSversion에 .saas 접미사가 있음 (PA 클라우드 관리; PA 2026-05-21에 따라 영향 없음). |
NOT-AFFECTED-NO-CAS | 프리로그인이 성공했지만 <cas-auth>가 SAML / RADIUS / LDAP / 로컬 인증을 나타냄. CVE가 이 리스너에 적용되지 않음. |
NOT-AFFECTED-NOT-GLOBALPROTECT | 응답 형태가 GP 포털이 아님 (예: "GlobalProtect portal does not exist"). 범위 밖. |
| 판정 | 상황 | 권장 후속 조치 |
|---|
UNDETERMINED-VERSION-GATED | gpsvc가 "CAS is not supported by the client" 반환. CAS는 연결되었지만 User-Agent 이유로 프로브가 거부됨. 이 응답에서 PanOSversion을 읽을 수 없음. | 실제 GP-클라이언트 문자열로 --user-agent를 설정하여 재시도. |
UNDETERMINED-MTLS-GATED | 프리로그인 응답에 "Valid client certificate is required" 포함. 인증 표면이 mTLS 게이트 뒤에 숨겨짐. | 별도 채널(고객의 권위 있는 버전 또는 유효한 클라이언트 인증서를 사용한 프로브)을 통해 빌드 확인. |
UNDETERMINED-ERROR | 네트워크 오류, 잘못된 형식의 응답, PanOSversion을 구문 분석할 수 없음, 또는 cas-auth=yes에도 불구하고 Token 디코딩 실패. | 재실행; 지속되면 이 위치에서 대상에 도달할 수 없는 것일 수 있음. |