1. MS Window Exchange Serve
- 전자 메일, 연락처, 일정 등의 기능을 제공하는 협업 소프트웨어
1.1 Exchange Serve 구조
- Exchange Serve는 사용자 UI를 담당하는 Front-End와 로직을 담당하는 Back-End로 구성
- Front-End로 들어온 사용자 요청은 내부 처리 과정을 거쳐 1:1로 연결된 Back-End의 모듈로 전송
> 각 요청마다 처리하는 모듈이 다르며 각 모듈은 동일한 하나의 모듈을 상속받아 특성에 맞게 추가 구현됨
2. 취약점 [2]
- Exchange 서버에서 입력값 검증이 미흡하여 발생하는 SSRF 취약점으로 Exchange 서버로 인증이 가능
> 영향받는 버전: Microsoft Exchange Server 2013, 2016, 2019
> 공격자는 해당 공격을 통해 Exchange 서버에 접근할 수 있는 일부 권한 획득 및 추가적인 공격을 진행
CVE | 설명 |
CVE-2021-26857 | Exchange 서버에서 안전하지 않은 역직렬화로 인해 발생하는 임의코드실행 취약점 |
CVE-2021-27065 | Exchange 서버에서 발생하는 임의파일쓰기 취약점 |
CVE-2021-26858 |
2.1 CVE-2021-26855
- Front-End로 들어온 사용자의 요청을 Back-End로 전달 하기위해 ProxyRequestHandler 모듈을 사용 [4]
사용자 접속 페이지 | 사용자 요청 처리 모듈 | 최상위 모듈 |
/owa | OwaProxyRequestHandler | ProxyRequestHandler |
/ews | EwsProxyRequestHandler | |
/ecp | EcpProxyRequestHandler |
- ProxyRequestHandler.GetTargetBackEndServerUrl() 메서드
> urlAnchorMailbox의 값이 Null일 경우 Back-End의 Host 값을 this.AnchoredRoutingTarget.BackEndServer.Fqdn에서 가져옴
protected virtual Uri GetTargetBackEndServerUrl() {
this.LogElapsedTime("E_TargetBEUrl");
Uri result;
try {
UrlAnchorMailbox urlAnchorMailbox = this.AnchoredRoutingTarget.AnchorMailbox as UrlAnchorMailbox;
if (urlAnchorMailbox != null) {
result = urlAnchorMailbox.Url;
} else {
UriBuilder clientUrlForProxy = this.GetClientUrlForProxy();
clientUrlForProxy.Scheme = Uri.UriSchemeHttps;
clientUrlForProxy.Host = this.AnchoredRoutingTarget.BackEndServer.Fqdn;
clientUrlForProxy.Port = 444;
if (this.AnchoredRoutingTarget.BackEndServer.Version < Server.E15MinVersion) {
this.ProxyToDownLevel = true;
RequestDetailsLoggerBase<RequestDetailsLogger>.SafeAppendGenericInfo(this.Logger, "ProxyToDownLevel", true);
clientUrlForProxy.Port = 443;
}
result = clientUrlForProxy.Uri;
}
}
finally {
this.LogElapsedTime("L_TargetBEUrl");
}
return result;
}
- /owa에서 사용자 요청이 올 경우 this.AnchoredRoutingTarget.BackEndServer 값은 BEResourceRequestHandler 모듈의 ResolveAnchorMailbox() 메소드를 통해 결정
> 이때, 사용자 요청에서 "X-AnonResource-Backend" 쿠키의 값을 필터링 없이 그대로 사용
> 따라서, 공격자는 해당 헤더를 접근 불가능한 내부 사이트 또는 다른 서버로 조작하여 접근이 가능하게 됨
protected override AnchorMailbox ResolveAnchorMailbox() {
HttpCookie httpCookie = base.ClientRequest.Cookies["X-AnonResource-Backend"];
if (httpCookie != null) {
this.savedBackendServer = httpCookie.Value;
}
if (!string.IsNullOrEmpty(this.savedBackendServer)) {
base.Logger.Set(3, "X-AnonResource-Backend-Cookie");
if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1)) {
ExTraceGlobals.VerboseTracer.TraceDebug<HttpCookie, int>((long)this.GetHashCode(), "[OwaResourceProxyRequestHandler::ResolveAnchorMailbox]: AnonResourceBackend cookie used: {0}; context {1}.", httpCookie, base.TraceContext);
}
return new ServerInfoAnchorMailbox(BackEndServer.FromString(this.savedBackendServer), this);
}
return new AnonymousAnchorMailbox(this);
}
- /ecp에서 사용자 요청이 올 경우 this.AnchoredRoutingTarget.BackEndServer 값은 BEResourceRequestHandler 모듈의 ResolveAnchorMailbox() 메소드를 통해 결정
> 이때, 사용자 요청에서 "X-BEResource" 쿠키의 값을 필터링 없이 그대로 사용
> 공격자는 해당 쿠키를 조작하여 내부 서버에서 계정 정보를 획득 및 악용하여 인증을 우회할 수 있음
2.2 CVE-2021-26857 [5]
- Exchange 서버에서 안전하지 않은 역직렬화로 인해 발생하는 임의코드실행 취약점
> 메일 서버 침투 후 해당 취약점을 이용해 관리자 권한을 획득하여 시스템을 장악
2.3 CVE-2021-27065 [6]
- Exchange 서버에서 발생하는 임의파일쓰기 취약점
> 메일 서버 침투 후 OAB(Offline Address Book) 설정 파일에 한줄 웹쉘을 삽입(=재설정) 후 실행 명령을 포함한 요청을 전송해 웹쉘 실행
> OAB를 재설정하는 과정에서 경로 및 확장자를 검토하는 코드가 없어 공격자가 원하는 위치에 원하는 확장자로 파일 생성 가능 [4]
※ OAB : MS Exchange Server에서 제공하는 주소록 기능으로 Outlook이 Exchange Server와 통신할 때 다운 받게 되는 주소록으로, Exchange server와 통신하지 않는(오프라인) 상황에서 해당 파일을 참조
2.4 CVE-2021-26858 [7]
- Exchange 서버에서 발생하는 임의파일쓰기 취약점
3. 대응방안
① 벤더사에서 제공하는 업데이트 적용 [8][9]
- 특정 쿠키 값 조작 후 접근 불가 사이트 접근 및 인증우회를 방지하기 위한 유효성 검증 코드 추가
- 웹쉘 실행을 방지하기 위해 생성되는 파일의 확장자에 .txt 확장자를 추가하는 코드 추가
- KISA 보호나라 보안 공지 참고 업데이트 적용 [10]
> 즉각적인 업데이트가 불가할 경우 KISA 보호나라 임시 조치 방안 참고 [11]
② 운영체제 및 사용중인 주요 SW의 보안 업데이트 적용
③ 불필요한 네트워크 서비스의 경우 중단 또는 기능 삭제
④ 방화벽 설정 등을 통해 외부에서 들어오는 스캐닝 등 차단
⑤ 웹쉘 업로드 여부 모니터링 및 관련 보안 SW 적용
⑥ 지속적 접근을 위한 스케줄러 등록 작업 검토
⑦ 공개된 공격도구들에 대한 시그니처를 보안장비에 등록하여 차단 또는 탐지하도록 설정
⑧ 로그 모니터링
⑨ 공개된 침해지표 등을 보안장비에 등록 등
4. 참고
[1] https://nvd.nist.gov/vuln/detail/CVE-2021-26855
[2] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000127&nttId=36053&menuNo=205021
[3] https://bi-zone.medium.com/hunting-down-ms-exchange-attacks-part-1-proxylogon-cve-2021-26855-26858-27065-26857-6e885c5f197c
[4] https://chmodi.tistory.com/154
[5] https://nvd.nist.gov/vuln/detail/cve-2021-26857
[6] https://nvd.nist.gov/vuln/detail/CVE-2021-27065
[7] https://nvd.nist.gov/vuln/detail/CVE-2021-26858
[8] https://msrc.microsoft.com/blog/2021/03/multiple-security-updates-released-for-exchange-server/
[9] https://chmodi.tistory.com/157
[10] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&nttId=35929&menuNo=205020
[11] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&nttId=35931&menuNo=205020
[12] https://www.boannews.com/media/view.asp?idx=97934
[13] https://www.boannews.com/media/view.asp?idx=106528
'취약점 > XSS, SSRF' 카테고리의 다른 글
카카오톡 원클릭 취약점 (CVE-2023-51219) (0) | 2024.06.28 |
---|---|
Zimbra Collaboration Suite XSS (CVE-2023-37580) (0) | 2023.11.19 |
TorchServe SSRF 취약점_ShellTorch (CVE-2023-43654) (0) | 2023.10.09 |
Apache HTTP Server mod_proxy SSRF Vulnerability (CVE-2021-40438) (0) | 2022.12.21 |
SSRF (Server-Side Request Forgery) (1) | 2022.12.01 |