[하루한줄] CVE-2025-53770(RCE), CVE-2025-53771(Authentication bypass) :Microsoft SharePoint 취약점

URL

https://securelist.com/toolshell-explained/117045/

Target

  • 온프레미스 Microsoft SharePoint Server (Subscription Edition, 2019, 2016 등 지원되는 온프레미스 버전)

Explain

CVE-2025-53770/CVE-2025-53771은 온프레미스 SharePoint 서버에서 발생하는 취약점으로, 공격자가 악성 파일을 업로드하고 암호화 비밀을 추출할 수 있게 합니다.

이 취약점은 이전 취약점 CVE-2025-49704와 CVE-2025-49706의 패치를 우회한 취약점이며, 역직렬화 기법과 Viewstate 악용을 통해 RCE 공격을 수행할 수 있습니다. 초기 취약점(CVE-2025-49706, CVE-2025-49704)은 Pwn2Own Berlin 2025에서 시연되었고, 이후 7월에 패치되었지만 추가 분석 결과 초기 패치가 해결되지 않아 CVE-2025-53770/CVE-2025-53771이 새로 발견되었습니다.

CVE-2025-59704

초기 취약점 CVE-2025-49704은 외부에서 전달된 WebPart 마크업을 통해 서버가 신뢰하지 않은 데이터를 역직렬화하면서 발생합니다.

공격자는 POST 요청의 매개변수 MSOtlPn_UriMSOtlPn_DWP를 이용하는데, Microsoft.SharePoint.dll의 GetPartPreviewAndPropertiesFromMarkup 메서드 코드를 확인해보면 해당 변수들이 어떻게 처리되는지 볼 수 있습니다. MSOtlPn_Uri는 CONTROLTEMPLATES 폴더 내부 파일을 가리키는 경로이고, MSOtlPn_DWP는 WebPart 형식의 마크업(XML 유사 구문)이 포함돼있습니다.

image.png

MSOtlPn_DWP에 포함된 XML 자체에는 취약점이 없지만 공격자가 CompressDataTable 속성에 악성 페이로드를 넣으면 Microsoft.PerformancePoint.Scorecards.Client.dll의 ExcelDataSet이 인스턴스화 되고, 해당 컨트롤의 DataTable getter가 페이로드를 처리하면서 역직렬화가 트리거됩니다.

image1.png

BinarySerialization.Deserialize()는 XML에 적힌 타입들이 허용 목록에 있는지 XmlValidator로 검사해 역직렬화를 막도록 설계되었습니다. 그래서 공격자는 ExpandedWrapper 같은 위험한 타입을 직접 넣지 않고 허용된 컬렉션(List 등) 안에 숨겨 검사를 우회했고, 역직렬화가 통과되어 가젯 체인이 실행될 수 있습니다.

CVE-2025-53770

CVE-2025-53770은 CVE-2025-49704의 변종으로, CVE-2025-49704의 패치가 일부 경로&컨트롤에 대해서만 패치되었기 때문에 공격자가 우회할 여지가 있었습니다.

Microsoft는 해당 취약점에 대한 패치를 발표하고 XML의 요소를 검증하는 XmlValidator를 강화했습니다

image2.png

대응방안

  • Microsoft의 최신 보안 업데이트 적용
  • AMSI 활성화 및 antivirus 업데이트
  • Machinekey 재설정

CVE-2025-53771

Sharepoint는 웹 서버(IIS)와 ASP.NET 플랫폼에서 동작합니다. IIS와 ASP.NET에는 각각 인증 절차가 있고, SharePoint는 IIS를 통합모드로 운영하도록 설계되어 있습니다. 이 모드에서는 IIS의 인증과 ASP.NET 인증이 하나의 흐름으로 합쳐져 최종적으로 PostAuthenticateRequest 단계에서 인증 결과가 정리됩니다.

PostAuthenticateRequestHandler는 이 최종 단계에서 호출되는 함수로,

초기 취약점 CVE-2025-49706는 Microsoft.SharePoint.dll의 PostAuthenticateRequestHandler 메서드에 존재합니다.

image3.png

문제는 PostAuthenticateRequestHandler가 클라이언트 요청의 Referer 헤더에 따라 플래그를 변경하는 로직에 있습니다. 이 메서드는 Referer가 다음 중 하나와 일치하는지 확인합니다. (대소문자 구분 x)

  • /_layouts/SignOut.aspx
  • /_layouts/14/SignOut.aspx
  • /_layouts/15/SignOut.aspx

이 세 URL은 로그아웃 흐름과 연관된 경로인데, 코드가 이를 로그아웃 요청으로 인식하면 내부 플래그를 flag6 = falseflag7 = true로 설정합니다.
하지만 플래그 조합이 flag6=false, flag7=true 으로 되면, !flag7 분기를 건너뛰고, flag6 분기는 쿠키 기반의 추가 검사를 수행합니다. 이 검사에 실패하면 인증 거부 호출(SendAccessDeniedHeader)이 되지 않기 때문에, 인증 검사를 우회할 수 있습니다.

image4.png

결과적으로 공격자는 요청의 Referer 헤더만 위조하여 내부 관리 엔드포인트와 같은 경로에 비인증 상태로 접근할 수 있게 됩니다

Microsoft는 2025년 7월 8일 패치에서 Referrer가 로그아웃 페이지일 때, 요청 경로가 “ToolPane.aspx”로 끝나는지 확인하는 검사를 추가했습니다.

image5.png

하지만 요청 url에 /을 추가하면 요청 경로의 문자열이 endsWith(“ToolPane.aspx”) = false가 되어 CVE-2025-49706의 패치를 우회할 수 있습니다.

image6.png

이에 7월 20일 보강패치로 endsWith에서 화이트리스트 기반 허용 경로 검사로 바꾸어 패치했습니다.

image7.png

Reference