Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-0300-audit — CVE-2026-0300(PAN-OS User-ID 인증 포털 노출)에 대한 읽기 전용 감사 도구 | Kitploit
도구/GitHubGitHub/tailwindrg/cve-2026-0300-audit
Cloud Infrastructure SecurityVulnerability AnalysisScripting & AutomationConfiguration AuditingNetwork SecurityDevSecOps
GitHubtailwindrg/cve-2026-0300-audit

cve-2026-0300-audit

CVE-2026-0300(PAN-OS User-ID 인증 포털 노출)에 대한 읽기 전용 감사 도구

저장소 보기
84개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-0300 감사 도구

CVE-2026-0300에 대한 읽기 전용 감사 도구 — PA-Series 및 VM-Series 방화벽의 PAN-OS User-ID 인증 포털(구 "Captive Portal")에서 발생하는 인증되지 않은 버퍼 오버플로 취약점입니다.

이 저장소는 Tailwind Resource Group 보안 권고 TRG-SA-2026-003과 함께 제공되며 다음을 포함합니다:

  • audit_portal.py — Tier 1: 단일 방화벽 감사
  • audit_fleet.py — Tier 2: Panorama 기반 플릿 스윕(동시 실행)
  • panos_audit.py — 두 CLI에서 공유하는 라이브러리

이 스크립트는 읽기 전용입니다. PAN-OS XML API에 show 스타일 쿼리를 실행하며 구성을 절대 수정하지 않습니다. API 키는 URL 쿼리 매개변수가 아닌 X-PAN-KEY HTTP 헤더를 통해 전송되므로 PAN 관리 평면 액세스 로그, TLS 검사 프록시 로그 또는 감사자의 프로세스 인자에 나타나지 않습니다.

존재 이유

CVE 레코드는 최신 기능 이름인 "User-ID 인증 포털"을 사용합니다. PAN-OS XML 스키마, CLI 설정 항목 및 문서 URL 경로는 여전히 레거시 captive-portal 용어를 사용합니다. show config running | match authentication-portal로 플릿을 감사하는 운영자는 해당 문자열이 구성 요소로 나타나지 않기 때문에 모든 구성을 조용히 놓치게 됩니다. 이 도구는 구성이 작성된 시점과 관계없이 스키마에 맞는 요소 이름을 검색합니다.

이 명명 문제에 대한 전체 Tailwind 분석은 TRG-SA-2026-003, "Captive Portal의 레거시 흔적"에 있습니다.

요구 사항

  • Python 3.10 이상
  • 표준 라이브러리만 사용 — pip install 불필요
  • 방화벽(또는 Tier 2의 경우 Panorama)에 대한 읽기 권한이 있는 PAN-OS API 키
  • 방화벽 관리 인터페이스의 CA 서명(또는 운영자가 신뢰하는) 인증서; --insecure는 일회성 초기 감사에만 제공됩니다

Tier 1 — 단일 방화벽

root@kitploit:~
export PAN_API_KEY="<key>"
./audit_portal.py --hostname fw1.example.com

테이블 출력 예시:

root@kitploit:~
vsys: vsys1
  configured:    True
  enabled:       True
  redirect_host: auth-portal.internal.example.com
  mode:          redirect
  bound:         ethernet1/3(internal-trust), ethernet1/4(guest)
  tls_verified:  True
  risk:          EXPOSED_LIKELY

기타 출력 형식: --output json 또는 --output csv.

기타 플래그: 단일 vsys 감사용 --vsys <name>, 느린 업스트림용 --timeout/--retries, stderr에 상세 오류 정보를 출력하는 --debug.

Tier 2 — Panorama 플릿 스윕

root@kitploit:~
export PAN_API_KEY="<panorama-key>"
./audit_fleet.py --hostname panorama.example.com --workers 16 --output csv > fleet-audit.csv

CSV의 각 행은 포털 상태, 리디렉트 호스트, 모드, 인터페이스 바인딩 및 위험 분류가 포함된 하나의 디바이스-vsys입니다. 이 스크립트는 Panorama의 target=<serial> API 매개변수를 사용하므로 관리 방화벽에 직접 연결하지 않습니다 — Panorama에 대한 단일 연결로 전체 플릿을 스윕합니다.

주요 플래그:

  • --workers N — 동시 감사 스레드(기본 8, 최대 32). 1000개 디바이스 플릿은 직렬 스윕이 1시간 이상 걸리는 반면 몇 분 안에 완료됩니다.
  • --timeout, --retries — API 호출별 설정. 일시적인 URLError 및 HTTP 5xx는 제한된 백오프로 재시도됩니다.
  • --exclude-disconnected — 기본적으로 연결이 끊긴 디바이스는 패치 기간 동안 계속 표시되도록 risk=DISCONNECTED로 포함됩니다. 이 플래그를 사용하여 제외할 수 있습니다.
  • --min-expected-devices N — Panorama가 N보다 적은 디바이스를 반환하면 경고(stderr)를 출력합니다. 알려진 플릿 규모에 대한 응답 잘림을 감지하는 데 유용합니다.
  • --serial-filter '0007*' — 일련번호로 glob 필터링하여 하위 집합을 감사합니다.
  • --debug — stderr에 디바이스별 상세 오류 정보를 출력합니다(업스트림 reason 문자열 포함; 고객용 CSV에 호스트 이름이 유출되는 것을 방지하기 위해 기본적으로 꺼져 있음).

위험 분류

출력의 risk 열은 다음 중 하나입니다:

EXPOSED_LIKELY는 힌트이지 판정이 아닙니다 — 영역 이름은 운영자 규칙이지 강제 사항이 아닙니다. 이 스크립트는 보안 정책 검토를 대체할 수 없습니다. 플릿 출력에서 주의가 필요한 곳을 먼저 정렬할 뿐입니다.

스크립트가 수행하는 작업 — 그리고 수행하지 않는 작업

수행:

  • vsys별 <captive-portal> 블록 쿼리(스키마 요소 이름은 UI 명명 또는 PAN-OS 버전과 관계없이 항상 captive-portal).
  • 활성화/비활성화, 리디렉트 호스트, 모드 및 영역 확인 인터페이스 바인딩 보고.
  • 영역 이름 휴리스틱으로 위험을 분류하여 플릿 출력에서 EXPOSED_LIKELY 행이 먼저 표시되도록 함.
  • API 키를 X-PAN-KEY 헤더로 전송하여 URL 액세스 로그 및 프로세스 인자에 노출되지 않도록 함.
  • XML 파서의 엔티티 확장 공격을 방어하기 위해 응답 본문 크기(50MB) 제한.
  • 제한된 백오프로 일시적 오류 재시도.

수행하지 않음:

  • 보안 정책을 포괄적으로 검토하지 않음. 포털이 신뢰할 수 없는 네트워크에서 도달 가능한지 여부는 정책 규칙, NAT 및 영역 바인딩에 따라 달라집니다 — 운영자는 감사 출력에서 해당 검토를 완료해야 합니다.
  • 네트워크 프로브로 도달 가능성을 테스트하지 않음. 순수 구성 감사만 수행.
  • 구성을 수정하지 않음. 모든 API 호출은 읽기 전용입니다.

PAN-OS API 키 생성

PAN-OS API 키는 이를 생성한 사용자의 역할과 권한을 상속합니다.

중요 주의사항: PAN-OS에는 읽기 전용 XML API 권한이 없습니다.

XML API 탭의 관리자 역할 권한은 범주별로 이진 Enable/Disable입니다 — 구성, 운영 요청, 커밋, 내보내기, 가져오기, 보고서, 로그, User-ID 에이전트. XML API에 대해 구성을 활성화하면 show와 set/edit/delete/move/rename/clone 작업이 모두 허용됩니다. 운영 요청을 활성화하면 <request><restart>를 포함한 임의의 <request> 작업이 허용됩니다. Web UI 및 REST API 탭은 읽기 전용 옵션을 제공하지만 XML API 탭은 그렇지 않습니다.

이러한 XML API 범주를 활성화하여 생성된 "감사 사용자"는 디바이스에 대한 전체 XML API 쓰기 권한을 보유합니다. 결과 키를 권한 있는 자격 증명으로 취급하십시오: 감사 기간으로 수명을 제한하고, 비밀 관리자에 저장하고, 작업이 완료되면 사용자를 비활성화하십시오.

공식 PAN 참조: API 키 가져오기(PAN-OS XML API).

WebUI를 통한 방법

방화벽(또는 audit_fleet.py를 사용하는 경우 Panorama)에서:

  1. 관리자 역할 생성. Device > Admin Roles(또는 Panorama > Admin Roles)로 이동합니다. Add를 클릭합니다.

    • 역할 이름을 예: audit-config-and-op로 지정합니다.
    • Web UI 탭에서 모든 항목을 None으로 설정합니다(감사 사용자에게 UI 액세스 불필요).
    • XML API 탭에서 Configuration 및 Operational Requests를 활성화합니다. Commit, Export, Import, Report, Log 및 User-ID Agent는 비활성화 상태로 둡니다.
    • OK를 클릭합니다. 결과 역할은 전체 XML API 구성 및 운영 요청 권한을 부여합니다 — 위 주의사항을 참조하십시오.
  2. 감사 사용자 생성. Device > Administrators(또는 Panorama > Administrators)로 이동합니다. Add를 클릭합니다.

    • 이름: 예: audit-cve-2026-0300.
    • 강력한 암호를 설정하거나 인증 프로필에 바인딩합니다.
    • 관리자 유형: Role Based → audit-config-and-op 선택.
    • OK를 클릭한 다음 후보 구성을 Commit합니다.
  3. 새 사용자의 자격 증명으로 API 키 생성. PAN-OS는 WebUI에 "API 키 생성" 버튼을 제공하지 않습니다 — keygen 엔드포인트가 지원되는 경로입니다. 자격 증명이 URL 액세스 로그에 기록되지 않도록 POST 본문을 사용하십시오:

    root@kitploit:~
    read -rs AUDIT_PW; echo
    export PAN_API_KEY="$(curl -ksX POST "https://fw1.example.com/api/" \
      --data-urlencode "type=keygen" \
      --data-urlencode "user=audit-cve-2026-0300" \
      --data-urlencode "password=$AUDIT_PW" \
      | grep -oE '<key>[^<]+' | cut -c6-)"
    unset AUDIT_PW
    

    read -rs는 암호를 터미널에 표시하지 않고 셸 기록에도 남기지 않고 읽습니다. 스크립트는 결과 를 환경에서 읽어 HTTP 헤더로 전송합니다 — 암호와 키 모두 스크립트 실행 중 URL 액세스 로그나 에 나타나지 않습니다.

보안 강화 참고 사항

  • 암호와 키를 셸 기록에 남기지 마십시오. read -rs는 암호를 보호합니다. PAN_API_KEY의 키는 파일에서 붙여넣는 대신 위 스니펫을 통해 대화식으로 설정하는 것이 좋습니다. 파일에서 소싱해야 하는 경우 세션에 set +o history를 사용하십시오.
  • 방화벽 관리 인터페이스에 CA 서명 인증서를 사용하십시오. 두 감사 스크립트의 --insecure 플래그는 TLS 호스트 이름 확인 및 인증서 검증을 완전히 비활성화합니다. 경로상의 모든 공격자는 감사 응답을 MITM하여 루팅된 디바이스에 대해 portal_enabled=False를 보고할 수 있습니다. audit_fleet.py 스크립트는 플릿 스윕에 --insecure와 함께 --accept-mitm-risk를 요구합니다. 오염된 응답의 폭발 반경이 플릿 전체이기 때문입니다.
  • 완료 시 키를 교체하십시오. 감사 사용자를 비활성화하거나 삭제하면 해당 사용자로 생성된 모든 키가 무효화됩니다.

종료 코드

  • 0 — 감사된 vsys에 포털이 활성화되지 않음
  • 2 — vsys를 찾을 수 없음(일시적 또는 지원되지 않는 구성)
  • 3 — 하나 이상의 vsys에 포털이 활성화됨(검토 필요)
  • 4 — API 호출 실패(인증, TLS, 네트워크)

"포털 활성화" 시 0이 아닌 종료는 의도적입니다 — 명확한 신호가 필요한 CI/플릿 스윕 파이프라인에 스크립트를 연결할 수 있습니다.

라이선스

Apache License, Version 2.0에 따라 라이선스가 부여됩니다. 전체 조건은 LICENSE를 참조하십시오.

상업적 사용이 허용됩니다. 저작자 표시가 필요합니다(파생 저작물에 저작권 고지 및 라이선스 파일 유지).

Copyright 2026 Tailwind Resource Group.

참고 자료

  • TRG-SA-2026-003 — CVE-2026-0300에 대한 Tailwind Resource Group 보안 권고
  • PAN PSIRT — https://security.paloaltonetworks.com/CVE-2026-0300
  • PAN 모범 사례(포털 액세스 제한) — https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u000000CqbiCAC
  • Tailwind Resource Group — https://tailwindrg.com
도구 다운로드
레이블의미
INFO_NOT_CONFIGURED디바이스에 <captive-portal> 블록이 없음. CVE-2026-0300 범위 밖.
INFO_DISABLED포털이 구성되었지만 enabled=no. 취약한 코드 경로가 활성화되지 않음.
REVIEW_POLICY_NO_BINDINGS포털이 활성화되었지만 구성에서 인터페이스 바인딩을 찾을 수 없음. WebUI로 확인.
EXPOSED_LIKELY포털이 활성화되고 이름이 신뢰할 수 없는 노출을 암시하는 영역(untrust, dmz, guest, external, internet, wan, public)에 바인딩됨. 먼저 조사.
REVIEW_POLICY포털이 활성화되고 내부 명명 영역에 바인딩됨. 보안 정책을 검토하여 도달 가능성을 확인.
PAN_API_KEY
X-PAN-KEY
ps auxww
  • 감사 작업이 완료되면 사용자를 비활성화합니다. Device > Administrators로 이동하여 audit-cve-2026-0300을 찾아 Delete(또는 사용자 비활성화)를 클릭합니다. 커밋합니다. 이렇게 하면 해당 사용자에 대해 생성된 모든 키가 무효화됩니다.