[단독방어] 분석 — CVE-2025-53770
CVE-2025-53770 is a critical on‑premises SharePoint deserialization flaw enabling remote code execution, and the highest‑priority immediate mitigation is to block all unauthenticated POST requests to the vulnerable serialization endpoints at the network perimeter.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.99979 · 악용난이도 easy · KEV
🔍 공격 기법
공격자는 외부에서 /_vti_bin/ 이하 혹은 client.svc와 같은 SharePoint 웹 서비스 엔드포인트에
- HTTP POST,
Content‑Type: application/octet-stream(또는binary/octet-stream)
을 지정하고 직렬화된 바이트 스트림을 전송한다. 서버는 검증 없이 .NET BinaryFormatter 등으로 역직렬화를 수행해 공격자가 삽입한 객체를 실행한다. 인증이 필요 없으며 네트워크 접근만 있으면 즉시 RCE가 발생한다.
악용 가능성: CVSS 벡터 AV:N/AC:L/PR:N/UI:N는 공격자가 네트워크를 통해 인증 없이 바로 접근할 수 있으며, 복잡한 사전 준비나 사용자의 개입이 전혀 필요하지 않다는 의미로, 실제 exploitation 조건은 “원격·무인·저복잡도” 수준입니다.
이 취약점은 Microsoft SharePoint Server의 특정 웹 서비스(예: /_vti_bin/… 혹은 SOAP/REST 엔드포인트)에서 클라이언트가 전송하는 직렬화된 객체를 역직렬화하면서 발생하므로, 공격자는 HTTP POST 요청에 조작된 serialized payload만 포함하면 됩니다.
취약한 파라미터는 보통 “data”, “payload” 등으로 명명된 바디 필드이며, 해당 필드는 인증 검증 없이 바로 처리됩니다.
SharePoint가 기본적으로 80·443 포트에서 외부에 서비스를 제공하므로, 인터넷 혹은 사내 네트워크 어디서든 접근 가능한 서버라면 공격 표면이 그대로 노출됩니다.
EPSS 값이 0.99979이라는 높은 실측 확률은 이론적 난이도가 실제 악용으로 이어지고 있음을 강력히 뒷받침합니다.
또한 KEV(가장 위험한 취약점) 목록에 등재된 점은 현재 공격 코드가 존재하고, 실제 공격자들이 이를 활용하고 있다는 구체
💥 영향 분석
역직렬화에 성공하면 공격자는 SharePoint 호스트 서버의 시스템 권한을 획득한다. 결과적으로
- 기밀 데이터 유출·삭제,
- 서비스 중단,
- 내부망으로의 추가 침투 등 3대 CIA(Confidentiality, Integrity, Availability) 모두가 심각하게 위협받는다.
🔗 관련 취약점·체이닝
본 현상은 CWE‑502 (Insecure Deserialization)와 동일한 메커니즘이며, 기존 SharePoint/.NET 기반 RCE(CVE‑2024‑xxxx 등)와 연계될 경우 초기 역직렬화 후 권한 상승 단계가 생략돼 공격 경로가 단축된다.
🔎 탐지
로그 지표
- IIS/SharePoint 웹 로그:
cs-method,cs-uri-stem,cs-content-type,sc-bytes,sc-status - Windows 이벤트 로그 (Application): Source “.NET Runtime”, EventID 1026·1000, 메시지에
SerializationException혹은BinaryFormatter포함
SIEM 탐지 규칙 예시
- 대용량 직렬화 POST 감지
1index=web sourcetype=iis 2| where cs_method="POST" 3 and (cs_uri_stem like "/_vti_bin/%" or cs_uri_stem like "%client.svc") 4 and (lower(cs_content_type)=="application/octet-stream" or lower(cs_content_type)=="binary/octet-stream") 5 and sc_bytes > 1048576 // 1 MB 이상 6| stats count by src_ip, cs_uri_stem, _time오탐: 정상 파일 업로드는 multipart/form-data이므로 위 조건에 포함되지 않도록 제외한다.
- 역직렬화 예외 이벤트 감지
1index=windows sourcetype=wineventlog source=".NET Runtime" 2(EventCode=1026 OR EventCode=1000) 3| regex _raw "SerializationException|BinaryFormatter" 4| stats count by host, src_ip, _time오탐: 개발·테스트 환경에서 발생하는 예외는 호스트 화이트리스트에 추가해 제외한다.
- 비정상 User‑Agent 패턴 감지
1index=web sourcetype=iis cs_method="POST" 2| regex cs_user_agent "^(curl|wget|PowerShell|Python-urllib).*" 3| stats count by src_ip, cs_uri_stem오탐: 내부 자동화 스크립트가 동일 UA를 사용할 수 있으니 사내 IP 대역을 화이트리스트에 포함한다.
튜닝 포인트
sc-bytes임계값(1 MB)과cs-content-type조합을 정확히 매칭하도록 필터링.- 정상 업로드는
multipart/form-data이므로 제외 규칙 반드시 적용. - 화이트리스트 기반 IP·호스트 예외를 주기적으로 검토.
※ 다중 소스 교차검증 결과(신뢰도 1.0)와 EPSS = 0.99979(실측 악용 가능성 99.9% 수준)를 근거로, 위 탐지 규칙은 높은 탐지율을 기대할 수 있다.
🛡️ 완화 방안
즉시(긴급 차단) – 방화벽/리버스 프록시에서 /_vti_bin/*와 client.svc에 대한 모든 unauthenticated POST 요청을 403 또는 404 응답으로 차단한다.
- 구현 난이도: ★★☆☆☆ (ACL 추가만 필요)
- 운영 영향: 익명 파일 업로드·서비스가 중단될 수 있음(대부분의 환경에서 허용되지 않음).
- 검증 방법: 차단 정책 적용 후
curl -X POST …/client.svc요청에 403 응답이 반환되는지 확인.
단기(완화) – IIS 인증 설정을 변경해 해당 경로에 Windows 인증만 허용하고 익명 접근을 비활성화한다.
- 구현 난이도: ★★★☆☆ (IIS 매니저 또는 web.config 수정)
- 운영 영향: 기존 익명 서비스 사용자에게 401 응답 발생, 사전 공지 필요.
- 검증 방법: 인증되지 않은 사용자가 해당 엔드포인트에 접근 시 401 반환 확인.
단기(추가) – web.config의 <requestLimits maxAllowedContentLength="1048576" /> 로 바디 크기를 1 MB 이하로 제한한다.
- 구현 난이도: ★★☆☆☆ (구성 파일 수정)
- 운영 영향: 대용량 파일 업로드 시 413 응답 발생, 파일 업로드 정책과 조율 필요.
- 검증 방법: 2 MB POST 요청 전송 후 413 반환 확인.
근본(해결) – Microsoft가 제공하는 보안 업데이트가 배포될 때까지 전체 SharePoint 서버 풀에 최신 패치를 적용하고, 가능하면 최신 버전(SharePoint Server Subscription Edition)으로 업그레이드한다.
- 구현 난이도: ★★★★☆ (패치 테스트·배포, 서비스 중단 계획 필요)
- 운영 영향: 재시작 및 잠재적 호환성 문제, 유지보수 창 확보 필요.
- 검증 방법: 패치 적용 후 취약점 스캐너(CVSS 9.8 항목)에서 해당 CVE가 “Not Vulnerable”로 보고되는지 확인.
※ KEV 등재·EPSS 0.99979·CVSS 9.8 기반으로 우선순위는 immediate이며, 위 즉시 차단 조치를 24시간 이내에 적용하는 것이 최우선이다. 패치 이후에도 임시 차단 정책을 유지하면 잔여 리스크를 최소화할 수 있다.
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=9.8 · KEV · EPSS=0.99979 · exploit=easy · in_scope=None