Ajax.NET Professional(AjaxPro)의 역직렬화 취약점은 임의의.NET 클래스를 이용해 원격 코드 실행(RCE)이 가능하다는 점에서 위험합니다. CISA KEV에 등재되어 실제 공격에 악용되고 있다는 사실도 확인됐습니다. 레거시.NET 자산을 운영 중인 기업이라면 즉시 점검이 필요합니다.
CVE-2021-23758 취약점 개요 및 RCE 메커니즘
CVE-2021-23758은 Ajax.NET Professional(AjaxPro) 라이브러리에서 발생하는 역직렬화(Deserialization of Untrusted Data) 취약점입니다. 이 취약점의 핵심은 신뢰할 수 없는 데이터를 역직렬화하는 과정에서 임의의.NET 클래스 역직렬화가 가능해진다는 점입니다.
공격자가 조작된 데이터를 전송해 서버에서 의도하지 않은 클래스를 인스턴스화하도록 유도하면 결국 원격 코드 실행(RCE)으로 이어집니다. 외부 공격자가 서버의 제어권을 획득해 임의의 명령어를 실행할 수 있는 치명적인 보안 결함입니다.
CISA KEV 등재 현황 및 대응 기한
이 취약점은 이론적 가능성을 넘어 실제 위협으로 입증됐습니다. 2026년 8월 26일, 미국 사이버보안 및 인프라 보안국(CISA)의 KEV(Known Exploited Vulnerabilities) 카탈로그에 등재됐습니다. KEV 등재는 해당 취약점이 실제 공격 환경에서 활용되었음을 CISA가 공식적으로 확인했다는 뜻입니다.
CISA가 설정한 이번 취약점의 조치 기한(Remediation Deadline)은 2026년 9월 9일이었습니다. 기한이 이미 지났는데도 여전히 패치가 적용되지 않은 레거시 시스템이 남아 있다면 공격자의 표적이 될 가능성이 매우 높습니다. 긴급한 조치가 필요합니다.
패키지별 취약 버전 경계 및 판정 기준
운영 중인 애플리케이션이 취약한지 판단하려면 사용 중인 NuGet 패키지와 버전부터 정확히 확인해야 합니다. 패키지 종류에 따라 취약 버전의 경계가 다르니 주의가 필요합니다.
| 패키지 명칭 | 취약 버전 범위 | 비고 |
|---|---|---|
| AjaxNetProfessional | 21.12.21.1 미만 버전 | 21.11.29.1 패치 버전 존재 |
| ajaxpro.2 | 모든 버전 [0,] | 패치 버전 없음 |
표에서 보이듯 ajaxpro.2 NuGet 패키지를 사용하는.NET 웹 애플리케이션은 모든 버전이 취약한 상태입니다. AjaxNetProfessional 패키지는 21.12.21.1 버전 미만을 사용 중이라면 취약한 것으로 판정합니다.
실질적 공격 성립 조건: 엔드포인트 및 코드 분석
라이브러리를 쓴다고 해서 공격이 성립하는 것은 아닙니다. 실제 공격이 성립하려면 다음과 같은 기술적 조건이 갖춰져야 합니다.
- 핸들러 등록 확인: 웹 설정 파일(
web.config) 내에ajaxpro/*.ashx또는 이와 유사한 패턴의<httpHandlers>또는<handlers>설정이 등록되어 있어야 합니다. - 메서드 구성 분석:
[AjaxPro.AjaxMethod]속성이 부여된 메서드 중object타입의 범용 인자를 받는 메서드가 존재해야 합니다. - 컨버터 로드 여부:
HashtableConverter와 같은 암시적 타입 컨버터가 시스템에 로드되어 있어야 공격 경로가 형성됩니다.
보안 담당자는 web.config 파일의 설정과 소스 코드 내의 AjaxMethod 정의를 분석해 실제 공격 가능 지점이 노출되어 있는지 확인하면 됩니다.
버전별 대응 방안: 업그레이드 및 설정 완화 조치
취약점이 확인된 경우 환경에 따라 다음 단계적 대응 방안을 적용하면 됩니다.
1. 최신 버전 업그레이드 및 패치 적용
가장 확실한 방법은 취약점이 해결된 버전으로 업데이트하는 것입니다. 수정 커밋 b0e63be에는 web.config의 AjaxPro 설정에서 IsJsonDeserializationCustomTypesDenied 값을 확인하는 로직이 들어 있어 역직렬화 공격을 방어합니다.
2. 설정 기반 완화 조치 (Mitigation)
즉각적인 패치 버전 업데이트가 불가능한 상황이거나 패치 버전이 아예 없는 경우라면 설정으로 위험을 낮출 수 있습니다. v21.11.11.1 이상의 런타임 구성을 사용 중이라면 다음 조치를 권합니다.
- 커스텀 타입 제한:
web.config파일에<jsonDeserializationCustomTypes default="deny">블록을 추가합니다. - 명시적 허용: 기본값을
deny로 설정해 모든 커스텀 타입의 역직렬화를 차단한 뒤, 서비스 운영에 반드시 필요한 허용 커스텀 타입만 명시적으로 정의해 사용합니다.
이 완화 조치는 임의의.NET 클래스가 역직렬화되는 경로를 차단해 RCE 공격 가능성을 효과적으로 억제합니다.