Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-8452-check — Citrix NetScaler CVE-2026-8452용 동작 기반 패치 상태 탐지기입니다. 메모리를 악용하거나 손상시키지 않고, 제작된 SAML 요청을 전송하여 PrefixList 크기 검사가 존재하는지 확인합니다. | Kitploit
도구/GitHubGitHub/bishopfox/cve-2026-8452-check
Vulnerability ScannersVulnerability AnalysisWeb SecurityNetwork Security
GitHubbishopfox/cve-2026-8452-check

CVE-2026-8452-check

Citrix NetScaler CVE-2026-8452용 동작 기반 패치 상태 탐지기입니다. 메모리를 악용하거나 손상시키지 않고, 제작된 SAML 요청을 전송하여 PrefixList 크기 검사가 존재하는지 확인합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Citrix NetScaler SAML PrefixList 힙 오버플로 — 패치 상태 탐지 스크립트

안전하고 비파괴적인 패치 상태 검사 도구로, CVE-2026-8452 — 사전 인증 힙 오버플로 는 Citrix NetScaler ADC / NetScaler Gateway SAML 서명 표준화기에서 발생합니다. (CTX696604, CVSS 8.8). 과도하게 큰 exclusive-canonicalization PrefixList는 표준화 과정에서 고정 크기 버퍼를 오버플로시킵니다. NetScaler는 이 값을 담은 서명을 검증하기 전에 표준화를 수행하므로, 자격 증명, 세션, 유효한 서명 없이도 전체 경로에 도달할 수 있습니다. JPMorgan Chase XOR 팀의 Michael Tucker가 보고했으며, 근본 원인 및 악용 분석은 watchTowr Labs의 공로입니다.

이 스크립트는 버그를 악용하지 않으며 메모리를 손상시키지 않습니다. 대상별로 하나의 질문에 답합니다: 이 어플라이언스에 수정 사항이 적용되었는가? — 빌드를 추측하는 대신 패치를 관찰하여 행동적으로 판정합니다.

실행해도 안전한가?

예. 프로덕션 및 평가 용도로 설계되었습니다:

  • 프로브는 손상 임계값 아래에 머뭅니다. 575바이트는 패치된 빌드와 패치되지 않은 빌드가 서로 다르게 응답할 만큼 충분히 길면서도, 패치되지 않은 어플라이언스의 메모리 손상이 시작되는 길이보다 훨씬 아래입니다. 두 지원 브랜치와 두 패치 상태에 걸친 어플라이언스에서 두 수정 빌드를 포함한 측정을 통해 검증되었습니다.

  • 통과하는 임계값은 하나의 배포 속성이 아니라 고정된 코드 상수입니다. 수정된 빌드는 512바이트의 PrefixList를 허용하고 513바이트 이상을 거부합니다. 이 제한은 바이트 단위로 정확히 확인되었으며, 두 지원 브랜치에서 동일하고, 어플라이언스 구성이나 주변 SAML 메시지의 형태에 따라 변하지 않습니다. 두 경로(값을 상당히 다른 양의 XML로 감싸는)를 프로빙하여 동일한 바이트에서 동작이 바뀌는 것을 확인함으로써 확인되었습니다. 575는 제한을 63바이트 초과하므로, 판정은 대상이 어떻게 설정되어 있는지에 의존하지 않습니다.

  • 패치 적용으로 어플라이언스가 일반적으로 긴 SAML 값을 거부하지는 않습니다. 제한은 특히 PrefixList 속성에만 적용됩니다. 다른 필드(assertion consumer service URL, 발급자 이름, 알고리즘 식별자, 다이제스트 및 서명 값)를 그보다 크게 부풀려도 수정된 빌드에서는 아무것도 변하지 않으므로, 수정을 적용해도 정상 작동 중인 SAML 구성이 실패하기 시작하지 않아야 합니다.

  • 메모리가 손상되지 않으며 프로세스가 재시작되지 않습니다. 패치된 빌드에서는 크기 검사에서 프로브가 거부되고, 패치되지 않은 빌드에서는 파서 내부에서 무해하게 실패합니다. 어느 쪽도 오버플로에 도달하지 않습니다.

  • 스캔 출력에 민감한 정보는 포함되지 않습니다. 프로브는 합성 네임스페이스 접두사 토큰만 담고 있으며, 도구는 응답 본문이 아닌 판정을 보고합니다.

  • 고정된 두 길이, 스윕 없음. 575바이트 프로브와 응답하는 경로의 35바이트 대조군. 이 도구는 길이 범위를 스윕하지 않으며 다른 길이를 전혀 보내지 않습니다.

프로브를 수정하는 경우 PROBE_PREFIXES를 변경하지 말고 길이를 스윕하지 마십시오. 575바이트는 하중을 견디는 값입니다. 다른 PrefixList 길이는 어플라이언스를 불안정하게 만들 수 있으며, 최소 한 건은 이 수정 사항이 포함된 빌드에서 발생했습니다. 따라서 길이 스윕은 이 버그를 탐구하는 안전한 방법이 아니며, 더 짧다고 더 안전한 것도 아닙니다.

작동 방식

패치된 빌드는 과도하게 큰 PrefixList를 특징적인 메시지와 함께 깔끔하게 거부합니다. 패치되지 않은 빌드는 파서를 통과하여 일반 내부 오류를 반환합니다. 동일한 요청 하나에 두 가지 다른 응답:

575바이트 PrefixList응답
패치되지 않음500 Internal Server Error 43549
패치됨200 Malformed Assertion sent to Netscaler

두 경로가 시도되며, IdP가 먼저 시도되고 하나가 응답을 주는 즉시 중단됩니다. 각각 단독으로도 충분하며, 함께 사용하면 두 SAML 역할을 모두 다룹니다:

경로요청필요 사항
1 (첫 번째)POST /saml/login — 서명된 AuthnRequest, ds:SignedInfo의 PrefixList대상 vserver에 바인딩된 SAML IdP 정책
2 (대체)POST /cgi/samlauth — SAMLResponse, assertion 서명의 PrefixList대상 vserver의 SAML SP assertion consumer service

IdP 경로가 먼저 시도되는 이유는 둘 중 더 견고하기 때문입니다. 이 경로는 Issuer 값, AssertionConsumerServiceURL, 시계 오차(clock skew)에 영향을 받지 않습니다. 어플라이언스의 오차 허용 범위를 크게 벗어난 IssueInstant도 여전히 정확히 판별하는데, 이는 표준화가 시간 검사와 서명 검사보다 먼저 수행되기 때문입니다.

경로 1의 AuthnRequest는 반드시 서명되어야 합니다. 서명되지 않은 요청은 패치된 빌드와 패치되지 않은 빌드 모두에서 200 Malformed Assertion sent to Netscaler를 반환하며, 이는 패치된 신호와 바이트 단위로 동일합니다. 따라서 서명 블록을 생략한 프로브는 모든 어플라이언스를 패치된 것으로 보고합니다. 서명은 유효할 필요가 없으며, 이 도구의 서명도 유효하지 않습니다. 단지 존재하기만 하면 됩니다. 그 SignedInfo가 PrefixList를 표준화기로 전달하는 수단이기 때문입니다.

수정 경계에서의 동작

두 지원 브랜치 모두 수정 빌드에서 정확히 동작이 바뀌며, 두 경로 모두 동일합니다:

빌드판정
13.1-63.16마지막 취약한 13.1VULNERABLE
13.1-63.18최초 수정된 13.1PATCHED
14.1-66.59취약한 14.1VULNERABLE
14.1-72.61최초 수정된 14.1PATCHED

13.1-63.16과 63.18은 연속된 릴리스이므로, 이 변경은 중간 빌드에 걸친 변동이 아니라 패치 자체에 기인합니다.

이것들은 이 수정 사항이 처음 등장한 빌드이며, 프로브는 정확히 그 전환을 감지합니다. 이제 그것들은 업그레이드 대상 빌드가 아닙니다. 이후 보안 권고가 이를 대체했으므로, 13.1-63.18과 14.1-72.61은 여기서 PATCHED로 응답하지만 최신 문제에는 여전히 노출되어 있습니다. 현재 수정 빌드는 Remediation을 참조하십시오.

빌드 지문을 사용하지 않는 이유는?

이 버그에는 원리적으로도 동작할 수 없기 때문입니다. 13.1-63.16과 13.1-63.18은 수정 바로 양쪽 빌드로, 바이트 단위로 동일한 tmindex.html, base.css 및 resources.js를 제공합니다. 수정 사항은 어떤 웹 자산도 건드리지 않습니다. 정적 자산 해시도 브랜치 간에 충돌하므로, 해시 기반 접근법은 취약한 어플라이언스를 패치된 빌드로 판정하여 정상으로 보고할 수 있으며, 이는 탐지 도구가 가질 수 있는 최악의 실패 모드입니다. 따라서 빌드 지문 방식은 의도적으로 구현되지 않았습니다. 패치 상태는 프로브 또는 자격 증명이 있는 경우 show ns version을 통해 얻습니다.

요구 사항

  • Python 3.8+, 표준 라이브러리만 사용 — 타사 패키지 없음.

사용법```bash

single target

./cve_2026_8452_check.py https://gateway.example.com

a specific AAA / Gateway virtual server

./cve_2026_8452_check.py https://gateway.example.com:9443

scan a list, one target per line ('#' comments allowed), compact output

./cve_2026_8452_check.py -f targets.txt --brief

machine-readable output for pipelines

./cve_2026_8452_check.py -f targets.txt --json > results.json

도구를 **Gateway 또는 AAA 가상 서버**에 지정하세요(관리 인터페이스가 아님).
전제 조건은 가상 서버마다 적용되므로, VIP가 여러 개인 어플라이언스는 각각 테스트해야 합니다.

### 옵션

| 플래그 | 설명 |
| --- | --- |
| `URL` | 하나 이상의 `https://HOST[:PORT]` 대상 |
| `-f, --targets-file FILE` | 파일에서 대상 읽기(한 줄에 하나씩; `#` 주석) |
| `-b, --brief` | 대상마다 정렬된 한 줄 — 판정, 대상, 이유 태그 — 많은 호스트를 스캔할 때 |
| `--json` | 구조화된 JSON 결과 출력 |
| `--no-color` | 컬러 출력 비활성화 (`NO_COLOR` 및 non-TTY도 인식) |
| `--timeout SECS` | 요청당 타임아웃(기본값: 15) |

### 예제

**패치되지 않은 어플라이언스,** IdP 경로에서 응답하고 대조군과 대조하여 확인됨:```console
$ ./cve_2026_8452_check.py https://gateway.example.com:9443
====================================================================
  CVE-2026-8452 - NetScaler SAML PrefixList patch-state check
  https://gateway.example.com:9443
====================================================================

>> Identifying the appliance
     [ OK ]  NetScaler indicators: 5 (CSP contains citrixng://)
>> Probing patch state (64 prefixes / 575 bytes, confirmed against a 35-byte control)
     idp /saml/login      HTTP 500 / 43549: no size check present
     idp /saml/login      35-byte control: HTTP 200 "message timestamp outside the appliance's skew tolerance": a different SAML condition, not the size check
     [FAIL]  Size check absent (via the IDP route)

====================================================================
                         RESULT: VULNERABLE
====================================================================

  https://gateway.example.com:9443 via IDP  [size-check-absent]

  The size check is absent. This appliance is unpatched for
  CVE-2026-8452. Upgrade to 13.1-63.21+ / 14.1-73.32+ (12.1 and
  13.0 are EOL and never fixed).

====================================================================

The control line is worth reading closely: the 35-byte request clears the size check and is then rejected for its stale IssueInstant, while the 575-byte probe never got that far. That is the ordering the whole method rests on — canonicalization runs before the time check, just as it runs before the signature check.

A patched appliance, the same request against the fix build. Only the probe line differs — the oversized PrefixList is rejected by name instead of falling through to the internal error:```console

Probing patch state (64 prefixes / 575 bytes, confirmed against a 35-byte control) idp /saml/login HTTP 200 "Malformed Assertion": size check rejected the probe idp /saml/login 35-byte control: HTTP 200 "message timestamp outside the appliance's skew tolerance": a different SAML condition, not the size check [ OK ] Size check present (via the IDP route)

                      RESULT: PATCHED
도구 다운로드