[하루한줄] CVE-2021-27076: SharePoint Replay Style Deserialization 취약점
URL
CVE-2021-27076: A REPLAY-STYLE DESERIALIZATION ATTACK AGAINST SHAREPOINT
Target
- Microsoft SharePoint
Explain
Microsoft SharePoint에서 session state를 악용하여 원격 코드 실행이 가능한 취약점이 발견되었습니다. SharePoint의 InfoPath에서 문서는 serialize 된 후 session state에 저장됩니다. session state에서 읽은 데이터는 BinaryFormatter.Deserialize
로 전송되는데, 해커가 arbitrary data를 지정할 수 있으면 원격 코드 실행이 가능합니다.
SharePoint 애플리케이션에서 session state mechanism을 통해 첨부 파일 업로드 데이터는 첨부 파일 업로드 session state에 추가된 데이터에 해당하는 key(editingSessionId
)를 통해 검색됩니다. 마찬가지로 DocumentSessionState
Deserialization 데이터는 Deserialization session state에 추가된 데이터에 해당하는 key를 통해 검색됩니다. 하지만 editingSessionId
가 클라이언트에 의해 조작될 수 있어 첨부 파일 데이터를 DocumentSessionState
Deserialization에서 사용할 수 있습니다.
첨부 파일을 업로드할 때 session state key는 클라이언트에서 확인할 수 없고, 서버의 DocumentSessionState
객체에 존재합니다. 따라서 첨부 파일 mechanism의 document의 state key를 전송하여 serialize 된 DocumentSessionState
를 클라이언트에서 첨부 파일로 받을 수 있습니다. 전체적인 공격 흐름은 다음과 같습니다.
- InfoPath 리스트를 생성합니다.
- 리스트에 새 항목을 추가합니다.
- 항목에 deserialize 될 arbitrary object를 포함한 fake InfoPath
DocumentSessionState
파일을 첨부합니다. - 페이지의 HTML에서 document의 state key를 가져옵니다.
FormServerAttachments.aspx
페이지에 document의 state key를 전송하여 serialize 된DocumentSessionState
를 얻습니다.- 반환된 데이터에서 3에서 추가한 첨부 파일의 state key를 추출합니다.
- 첨부 파일의 state key를 undocumented client-side API에 전송하여 deserialization mechnism에서 첨부 파일을 실행합니다. 원격 코드 실행은 arbitrary object가 서버에서 deserialization 될 때 실행됩니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.