[하루한줄] CVE-2022-21969: Microsoft Exchange Deserialization RCE
URL
Searching for Deserialization Protection Bypasses in Microsoft Exchange (CVE-2022–21969)
Target
- Microsoft Exchange Server
- 2013 Cumulative Update 23
- 2016 Cumulative Update 21, 22
- 2019 Cumulative Update 10, 11
Explain
Microsoft에서 개발한 메시징, 협업 소프트웨어 제품인 Microsoft Exchange Server에서 deserialization을 통한 원격 코드 실행(Remote code execution) 취약점이 발견되었습니다. 이전에 발견된 동일한 취약점 CVE-2021-42321에서 추가된 보호 기법을 우회하여 rpc 명령어를 통해 원격 코드 실행이 가능합니다.
Microsoft Exchange는 Microsoft.Exchange.Rpc.ExchangeCertificates.ExchangeCertificateRpcServer
클래스에서 /rpc
에서 호출 가능한 함수 프로토 타입을 정의합니다. 그 후 byte[] inputBlob
을 통해 Microsoft.Exchange.Servicelets.ExchangeCertificate.ExchangeCertificatesServerHelper
에서 구현된 다음 Microsoft.Exchange.Management.SystemConfigurationTasks.ExchangeCertificateRpc
생성자가 호출됩니다.
ExchangeCertificateRpc
에서 DeserializeObject(inputBlob, false)
메서드를 호출하는데, 해당 메서드는 SerializationBinder
와 같은 보호 조치 없이 BinaryFormatter
를 deserialization 합니다. 이를 통해 ysoserial.NET
에서 생성된 페이로드를 사용하여 원격 코드 실행이 가능합니다.
하지만 CVE-2021-42321을 우회하여 악성 페이로드를 deserialization 하기 위해서는 다음의 조건이 필요합니다.
strictMode
를False
로 설정- 페이로드 오브젝트의 어셈블리 이름은 ysoserial.NET에서 제공하는 어셈블리 이름과 일치하지 않아야 함
Microsoft.Exchange.Diagnostics.ChainedSerializationBinder.GlobalIDisallowedTypesForDeserialization
에 ysoserial.NET에서 제공하는 deserialization gadget을 종료하는 deny list가 존재합니다.
strictMode
의 기본 값을 False
로 설정한 후, 위의 ysoserial.NET에서 제공하는 gadget의 일부가 오타로 인해 deny list에 감지되지 않습니다. 이를 통해 CVE-2021-42321에서 추가된 보호 기법을 우회하여 deserialization을 통한 원격 코드 실행이 가능합니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.