[하루한줄] CVE-2021–42321: Some notes about Microsoft Exchange Deserialization RCE
URL
Some notes about Microsoft Exchange Deserialization RCE (CVE-2021–42321)
Target
Microsoft Exchange Server 2016 CU 21,22
Microsoft Exchange Server 2019 CU 10,11
Explain
Microsoft Exchange Server에서 deserialization에 의한 원격 코드 실행 취약점이 발견되었습니다.
serialization과 deserialization 작업에 사용되는 type을 제어하기 위해 SerializationBinder
값이 사용됩니다. 하지만 이 값이 ExchangeBinaryFormatterFactory
에 제대로 전달되지 않아 취약점이 발생합니다. SerializationBinder
값이 ExchangeBinaryFormatterFactory.CreateBinaryFormatter()
에 전달되지 않는다면 deserialization의 type을 검사하기 위해 ChainedSerializationBinder
값을 대신 사용하게 됩니다. ChainedSerializationBinder
값은 다음과 같이 초기화 되어있습니다.
- strictMode = false
- allow = System.DelegateSerializationHolder
- allowedGenerics = null
위 사진은 ChainedSerializationBinder.ValidateTypeToDeserialize()
의 코드입니다.
해당 함수가 실행될 때 BlockedDeserializationException
이 발생하면 catch문에서 flag값을 검사하고 True
일 때만 다시 throw합니다. 문제는 해당 flag 값이 ChainedSerializationBinder
에서 전달 받은 strictMode이기 때문에 항상 False
이고 예외처리가 발생하지 않습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.