Reddit

Here We Go Again (Citrix NetScaler DTLS Preauth Memory Overflow CVE-2026-88772) - watchTowr Labs

Citrix NetScaler DTLS 사전 인증 메모리 오버플로 분석

watchTowr Labs가 Citrix NetScaler의 DTLS 메모리 오버플로 취약점 CVE-2026-88772를 분석합니다. DTLS 재조립 과정에서 길이 검증을 우회해 고정 크기 버퍼를 넘치는 원리와 패치 변경을 설명하고, 취약점이 실제 공격에 악용됐다고 전합니다.

AI 요약

watchTowr Labs는 Citrix NetScaler ADC와 Gateway에서 발견된 사전 인증 취약점 CVE-2026-88772의 원인과 익스플로잇 과정을 분석합니다. 취약점은 DTLS가 활성화된 VPN 가상 서버에 영향을 줍니다. DTLS는 기본 설정에서 활성화되며, 공격자는 사용자 인증 없이 취약한 서버에 패킷을 보낼 수 있습니다. Citrix는 이 취약점을 실제 공격에서 악용된 사례로 보고했습니다.

취약점이 생긴 이유

DTLS 핸드셰이크 메시지는 여러 조각으로 나뉘어 도착할 수 있습니다. NetScaler는 조각을 NetScaler Buffer(NSB)에 저장한 뒤, 재조립이 끝나면 NSB 체인을 0x8c00바이트, 즉 35,840바이트 크기의 임시 버퍼에 복사합니다.

악성 패킷은 핸드셰이크 메시지 길이를 120바이트로 알리면서 각 조각의 길이는 1바이트라고 지정합니다. 재조립 코드는 120개의 조각을 받으면 메시지가 완성됐다고 판단하지만, NSB에는 조각별 1바이트가 아니라 패킷 데이터 대부분이 남아 있습니다. 취약한 복사 함수는 NSB 체인의 전체 크기를 확인하지 않고 임시 버퍼에 복사합니다.

패치에서 달라진 점

watchTowr는 취약한 NetScaler 14.1 빌드 73.30과 수정된 빌드 73.37을 비교했습니다. 취약한 코드에서는 각 NSB를 복사하기 전에 남은 버퍼 공간을 검사하지 않습니다. 수정된 코드는 복사할 때마다 남은 공간을 계산하고, 다음 NSB 크기가 공간을 초과하면 메시지를 거부합니다.

분석한 패킷 120개가 재조립되면 복사 대상은 DTLS 헤더를 포함해 173,665바이트가 됩니다. 35,840바이트 버퍼를 137,825바이트 초과합니다. 최초 충돌에서는 전역 목록 포인터가 덮어써졌습니다. 연구진은 포인터를 복구한 뒤 인접 객체와 메서드 포인터를 조작해 제어 흐름을 바꾸고, ROP(Return-Oriented Programming)로 메모리 페이지 권한을 바꿔 셸코드를 실행하는 과정을 확인했습니다. 바이너리에는 NX가 활성화돼 있어 메모리 권한 변경 단계가 필요했습니다.

영향과 대응

Citrix 보안 공지 CTX697096에는 CVE-2026-88772를 포함해 취약점 8건이 담겼습니다. 이 가운데 CVE-2026-88771과 CVE-2026-88772는 CVSS 4.0 기준 9.5점이며, 둘 다 실제 공격에 악용된 것으로 표시됐습니다. 나머지 항목에는 HTTP 요청 밀수와 메모리 오버플로 등이 포함됩니다.

Citrix가 권고한 수정 버전은 NetScaler ADC 및 Gateway 14.1-73.37 이상, 13.1-64.23 이상입니다. FIPS 및 NDcPP 버전에는 별도 수정 빌드가 안내됩니다. CVE-2026-88778은 업그레이드만으로 수정되지 않으며 Enhanced ISN Generation을 활성화해야 합니다. watchTowr는 환경의 취약 여부를 확인하고 조치 계획을 세우는 데 쓸 탐지 도구도 공개했습니다.

원문: watchTowr Labs / 번역·요약: Trawling