[하루한줄] 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_Uri
와 MSOtlPn_DWP
를 이용하는데, Microsoft.SharePoint.dll의 GetPartPreviewAndPropertiesFromMarkup 메서드 코드를 확인해보면 해당 변수들이 어떻게 처리되는지 볼 수 있습니다. MSOtlPn_Uri
는 CONTROLTEMPLATES 폴더 내부 파일을 가리키는 경로이고, MSOtlPn_DWP
는 WebPart 형식의 마크업(XML 유사 구문)이 포함돼있습니다.
MSOtlPn_DWP
에 포함된 XML 자체에는 취약점이 없지만 공격자가 CompressDataTable 속성에 악성 페이로드를 넣으면 Microsoft.PerformancePoint.Scorecards.Client.dll의 ExcelDataSet이 인스턴스화 되고, 해당 컨트롤의 DataTable getter가 페이로드를 처리하면서 역직렬화가 트리거됩니다.
BinarySerialization.Deserialize()
는 XML에 적힌 타입들이 허용 목록에 있는지 XmlValidator
로 검사해 역직렬화를 막도록 설계되었습니다. 그래서 공격자는 ExpandedWrapper
같은 위험한 타입을 직접 넣지 않고 허용된 컬렉션(List 등) 안에 숨겨 검사를 우회했고, 역직렬화가 통과되어 가젯 체인이 실행될 수 있습니다.
CVE-2025-53770
CVE-2025-53770은 CVE-2025-49704의 변종으로, CVE-2025-49704의 패치가 일부 경로&컨트롤에 대해서만 패치되었기 때문에 공격자가 우회할 여지가 있었습니다.
Microsoft는 해당 취약점에 대한 패치를 발표하고 XML의 요소를 검증하는 XmlValidator를 강화했습니다
대응방안
- 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 메서드에 존재합니다.
문제는 PostAuthenticateRequestHandler가 클라이언트 요청의 Referer 헤더에 따라 플래그를 변경하는 로직에 있습니다. 이 메서드는 Referer가 다음 중 하나와 일치하는지 확인합니다. (대소문자 구분 x)
/_layouts/SignOut.aspx
/_layouts/14/SignOut.aspx
/_layouts/15/SignOut.aspx
이 세 URL은 로그아웃 흐름과 연관된 경로인데, 코드가 이를 로그아웃 요청으로 인식하면 내부 플래그를 flag6 = false
및 flag7 = true
로 설정합니다.
하지만 플래그 조합이 flag6=false
, flag7=true
으로 되면, !flag7
분기를 건너뛰고, flag6
분기는 쿠키 기반의 추가 검사를 수행합니다. 이 검사에 실패하면 인증 거부 호출(SendAccessDeniedHeader
)이 되지 않기 때문에, 인증 검사를 우회할 수 있습니다.
결과적으로 공격자는 요청의 Referer 헤더만 위조하여 내부 관리 엔드포인트와 같은 경로에 비인증 상태로 접근할 수 있게 됩니다
Microsoft는 2025년 7월 8일 패치에서 Referrer가 로그아웃 페이지일 때, 요청 경로가 “ToolPane.aspx”로 끝나는지 확인하는 검사를 추가했습니다.
하지만 요청 url에 /을 추가하면 요청 경로의 문자열이 endsWith(“ToolPane.aspx”) = false가 되어 CVE-2025-49706
의 패치를 우회할 수 있습니다.
이에 7월 20일 보강패치로 endsWith에서 화이트리스트 기반 허용 경로 검사로 바꾸어 패치했습니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.