NOW Briefing
/saml/login에 조작된 SAML 요청 한 건을 보내는 것만으로 세션 토큰 등 프로세스 메모리 조각을 응답 쿠키에 실어 유출할 수 있습니다. 유출된 세션 토큰은 로그인 자격증명 없이 정상 세션을 탈취하는 데 쓰일 수 있습니다.
Citrix NetScaler 인증 없는 메모리 유출 취약점 (CVE-2026-8451)
■ 개요
NetScaler ADC/Gateway는 기업 경계에서 애플리케이션 트래픽을 처리하고 VPN·원격접속 게이트웨이 역할을 수행하는 장비입니다. CVE-2026-8451은 이 제품을 SAML(조직 간 로그인 정보를 주고받는 인증 표준) 신원 제공자로 설정한 경우에만 노출되는 취약점입니다. 인터넷에 /saml/login 엔드포인트가 열려 있으면, 인증 이전 단계에서 누구나 공격을 시도할 수 있는 구조입니다.
이 취약점의 핵심 위험은 인증 없는 메모리 유출입니다. 조작된 SAML 요청을 처리하는 과정에서 장비가 요청 버퍼 경계를 넘어 인접한 프로세스 메모리를 읽고, 그 내용을 응답 쿠키에 담아 돌려줍니다. 유출된 조각에 유효한 세션 토큰이 포함되면 공격자는 아이디·비밀번호나 다단계 인증을 거치지 않고도 로그인된 사용자 세션을 가로챌 수 있습니다. 이는 2023년 대규모 침해를 낳은 CitrixBleed(CVE-2023-4966)와 동일한 공격 패턴입니다.
이 공격 패턴은 공개 직후 실제 악용으로 확인됐습니다. 2026년 6월 30일 Citrix 보안 권고 CTX696604와 watchTowr Labs의 분석·공개 익스플로잇이 나왔으며, 발표 하루 안에 디코이 센서(공격 유인용 미끼 장비)를 운영하는 업체의 관측 기준으로 /saml/login을 겨냥한 스캐닝과 확인된 공격 페이로드가 포착됐습니다. 인증 없이 악용할 수 있고 공격 난이도가 낮기 때문에, 노출 자산이 있다면 즉시 대응해야 합니다.
■ 요약
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2026-8451("CitrixBleed to Infinity") |
| CVSS 점수 | CVSS 8.8 / High |
| 취약점 유형 | CWE-125 경계를 벗어난 읽기(OOB read) — 인증 없이 발생하는 메모리 유출 |
| 영향/위험 |
• 인증 없이 프로세스 메모리 조각 유출 가능 • 세션 토큰 탈취를 통한 세션 가로채기 가능 • SAML IdP 구성 장비에 한해 인증 없는 원격 악용 가능 • 공개 24시간 내 실제 악용 관측 |
| 취약 버전 |
• NetScaler ADC/Gateway 14.1 < 14.1-72.61 • NetScaler ADC/Gateway 13.1 < 13.1-63.18 • ADC FIPS < 14.1-72.61 FIPS • ADC FIPS/NDcPP < 13.1-37.272 |
| 패치 버전 |
• 14.1-72.61 이상 • 13.1-63.18 이상 • 13.1-37.272(FIPS/NDcPP) 이상 |
■ 기술 분석
이번 메모리 유출은 NetScaler 내부의 자체 XML 파서가 SAML AuthnRequest 문서의 속성값을 처리하는 방식에서 발생합니다. XML 속성값을 따옴표로 감싼 경우에는 짝이 되는 따옴표에서 멈추지만, 따옴표 없이 전달된 미인용 값은 공백이나 개행에서 멈추지 않고 널바이트(\0)나 닫는 꺾쇠(>)를 만날 때까지만 계속 읽습니다.
이 루프에는 버퍼 끝 검사가 없습니다. 따라서 공격자가 종료 문자가 없는 미인용 속성값을 요청 말미에 배치하면, 파서는 요청 버퍼를 벗어나 인접 메모리를 계속 스캔합니다. 그렇게 읽힌 범위가 속성값 길이로 그대로 계산되면서, 경계를 넘은 메모리 내용이 응답에 포함됩니다. watchTowr Labs가 공개한 취약 파서 디컴파일 의사코드에서도 이 스캔 루프를 확인할 수 있습니다.
// 인용값이면 따옴표, 아니면 공백을 종료 문자로 설정
if (ch == '\'' || ch == '"') {
terminator = ch;
first = *++cursor;
} else {
terminator = ' '; // 미인용 값이지만 공백으로는 멈추지 않음
first = ch;
}
// 종료 문자를 찾을 때까지 전진 — 버퍼 끝 검사가 없음
scanPos = cursor;
while (first != '\0' && first != '>') { // 널바이트/'>' 까지만 정지
scanPos++;
first = *scanPos; // ← 버퍼 경계를 넘어 읽음
if (first == terminator)
break;
}
out->value_ptr = cursor;
out->value_len = scanPos - cursor; // 경계 넘은 길이가 그대로 유출
이렇게 경계 밖에서 읽힌 바이트는 최종적으로 응답의 NSC_TASS 쿠키에 실려 클라이언트로 반환됩니다. 공격자는 이 값을 디코딩해 인접 프로세스 메모리를 복원합니다. watchTowr 분석에서는 메모리 채움 마커(0xdeadbeef)와 프로세스 포인터로 보이는 값이 함께 회수돼, 실제 메모리 노출이 확인됐습니다.
INFO
이 취약점이 위험한 이유는 유출 대상에 활성 세션 토큰이 포함될 수 있기 때문입니다. 세션 토큰이 새어 나가면 비밀번호와 다단계 인증을 우회해 세션 자체를 재사용할 수 있어, 단순 정보 노출을 넘어 인증 우회로 이어집니다.
■ PoC
위 파서 동작을 이용한 공개 익스플로잇은 미인용·미종료 속성을 가진 SAML 요청을 /saml/login에 인증 없이 보내고, 응답 쿠키에서 유출 바이트를 회수하는 구조입니다. 아래 예시는 재현용 코드가 아니라, 취약점이 왜 발생하는지 근본 로직만 방어 관점에서 단순화한 것입니다. 정확한 트리거 페이로드와 오프셋은 의도적으로 생략했습니다.
# 방어용으로 단순화한 예시 — 실제 익스플로잇이 아닙니다
def scan_attr_value(buf, i):
start = i
# 취약: 버퍼 길이(len) 검사 없이 종료 문자만 탐색
while buf[i] not in (0x00, ord('>')): # 공백/개행으로는 멈추지 않음
i += 1 # ← 여기서 버퍼 경계를 넘어감
return buf[start:i] # 인접 메모리가 값에 포함됨
# 피해 조건: 종료 문자가 없는 미인용 속성을 가진 SAML 요청을
# /saml/login 으로 인증 없이 전송하면
# 결과: 유출분이 응답 NSC_TASS 쿠키(base64)로 반환됨
# ... 세션 토큰 복원·재사용 로직 생략 ...
WARN
위 예시는 공개 PoC의 검증 관점을 방어적으로 단순화한 것으로, 실제 익스플로잇이 아닙니다. 실제 공개 익스플로잇은 유효한 세션 토큰까지 회수할 수 있으므로, 영향 버전을 운영했다면 노출 여부와 무관하게 세션이 유출됐다고 가정하고 대응해야 합니다.
■ 탐지 및 점검
• 앞선 유출 경로가 /saml/login에 한정되므로, SAML IdP로 구성된 NetScaler인지 먼저 확인하고, 아니라면 이 취약점의 직접 노출 대상이 아님을 문서화합니다.
• 웹/프록시 로그에서 POST /saml/login 요청 중 본문이 비정상적으로 긴 공백(관측 사례는 476개 공백)으로 채워지거나 속성이 닫히지 않은 SAML AuthnRequest를 조사합니다.
• 응답에 비정상적으로 큰 NSC_TASS 쿠키가 실려 나간 트랜잭션을 점검하고, 해당 요청의 출발지 IP를 확보합니다.
• 관측된 침해 지표(IoC)인 출발지 IP 146.70.139[.]154(M247/AS9009, 프랑크푸르트)와 User-Agent python-requests/2.32.5를 로그·차단 목록과 대조합니다.
• 여러 자산을 순차 스캔하며 404 응답 후 200을 반환한 자산에 곧바로 페이로드를 보내는 자동화 패턴이 있었는지 확인합니다.
CHECK
IoC 매칭은 이미 관측된 지표만 걸러내므로, 공개 이후 취약 버전을 운영한 기간 전체의 /saml/login 트래픽까지 소급 점검해야 합니다. 공격 페이로드는 정상 SAML 요청과 형태가 유사해, 요청 길이·속성 종결 여부·응답 쿠키 크기를 함께 봐야 식별됩니다.
■ 대응 방안
• 실제 악용이 확인된 만큼, 영향 버전을 패치 빌드(14.1-72.61, 13.1-63.18, FIPS/NDcPP는 13.1-37.272) 이상으로 즉시 업그레이드합니다.
• 즉시 패치가 어려우면, SAML IdP 기능이 필수가 아닌 장비에서는 /saml/login 노출을 차단하거나 해당 구성을 임시 비활성화합니다.
• 패치 후에는 유출됐을 수 있는 활성 세션을 모두 종료하고 세션 토큰을 강제 재발급해, 이미 탈취된 토큰의 재사용을 무력화합니다.
• 장비에 저장된 관리자 자격증명·API 키 등 메모리에 상주할 수 있는 비밀값을 교체합니다.
• 일반 독자(자사에 NetScaler SAML IdP가 없는 조직)는 직접 조치 대상은 아니지만, CitrixBleed 계열은 공개 직후 대규모 악용으로 번진 전례가 있으므로 원격접속 장비의 인터넷 노출 범위와 패치 현황을 이번 기회에 함께 점검하는 것을 권장합니다.
TIP
패치만으로는 이미 유출된 세션 토큰을 회수할 수 없습니다. 반드시 업그레이드와 세션 무효화·비밀값 교체를 한 세트로 진행해야 잔존 위험을 줄일 수 있습니다.
[참고 자료]
watchTowr Labs — CitrixBleed To Infinity And Beyond (CVE-2026-8451)
watchTowr — Detection Artifact Generator (GitHub)
CyberScoop — Citrix patches a new NetScaler flaw with echoes of CitrixBleed
Cyber Security News — CitrixBleed Vulnerability Exploited Within 24 Hours of Public Disclosure



