[하루한줄] 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를 클라이언트에서 첨부 파일로 받을 수 있습니다. 전체적인 공격 흐름은 다음과 같습니다.

  1. InfoPath 리스트를 생성합니다.
  2. 리스트에 새 항목을 추가합니다.
  3. 항목에 deserialize 될 arbitrary object를 포함한 fake InfoPath DocumentSessionState 파일을 첨부합니다.
  4. 페이지의 HTML에서 document의 state key를 가져옵니다.
  5. FormServerAttachments.aspx 페이지에 document의 state key를 전송하여 serialize 된 DocumentSessionState를 얻습니다.
  6. 반환된 데이터에서 3에서 추가한 첨부 파일의 state key를 추출합니다.
  7. 첨부 파일의 state key를 undocumented client-side API에 전송하여 deserialization mechnism에서 첨부 파일을 실행합니다. 원격 코드 실행은 arbitrary object가 서버에서 deserialization 될 때 실행됩니다.