
محاكاة استغلال وتخفيف أثر CVE-2025-54918 (ثغرة Windows NTLM). يتضمن سكربتات الكشف، وتطبيق التصحيحات عبر Ansible، وتحصين CI/CD. يعرض تصعيد الامتيازات من وصول منخفض المستوى إلى صلاحيات SYSTEM في بيئات السحابة الهجينة.
محاكاة استغلال وتخفيف أثر CVE-2025-54918 (ثغرة NTLM في Windows). يتضمن سكربتات كشف، وتصحيحًا عبر Ansible، وتقوية لـ CI/CD. يوضح تصعيد الامتيازات من وصول منخفض المستوى إلى SYSTEM في بيئات سحابية هجينة.
بقلم Mark Mallia
في بيئات السحابة الهجينة اليوم، أصبح الخط الفاصل بين تفاعل المستخدم واختراق النظام أكثر رقة من أي وقت مضى. تستكشف هذه المقالة سلسلة هجوم واقعية تبدأ بثغرة رسومية تبدو غير ضارة وهي CVE-2025-55226، وهي حالة سباق في نواة الرسومات في Windows، وتتصاعد إلى سيطرة كاملة على مستوى SYSTEM عبر CVE-2025-54918، وهي ثغرة تجاوز حرج في مصادقة NTLM.
ومعًا، توضح هاتان الثغرتان كيف يمكن للمهاجمين الانتقال من تنفيذ البرمجيات عن بُعد إلى تصعيد الامتيازات في خطوات قليلة فقط. والأهم من ذلك، أنها تُظهر كيف يمكن لمهندس DevOps أول أن يكتشف هذه التهديدات ويخفف أثرها ويراقبها باستخدام الأتمتة، وتكامل CI/CD، والبنية التحتية كرمز.
تاريخ الإصدار: 16 سبتمبر 2025 (ثلاثاء التصحيح)
يحدد أحدث تنبيه أمني من Microsoft خللًا خطيرًا في win32k.sys، وهي نواة الرسومات الأساسية المستخدمة في إصدارات Windows لسطح المكتب والخوادم على حد سواء. يكمن الضعف في حالة سباق تتيح للمهاجم تشغيل تنفيذ برمجي عن بُعد (RCE) على أي نظام يعمل فيه هذا البرنامج التشغيلي الضعيف. وبما أن هذا البرنامج يقع في قلب GDI (واجهة أجهزة الرسومات)، يمكن إساءة استخدامه لتشغيل تعليمات برمجية عشوائية في وضع النواة، وهو مستوى امتياز يمكن أن يعرض الجهاز بالكامل للخطر.
لماذا هذا مهم؟
- يستهدف نظامًا فرعيًا أساسيًا يدعم كل واجهة مستخدم رسومية، من أجهزة الكمبيوتر المكتبية العادية إلى الخوادم عالية الأداء.
- توفر تصحيح صدر يوم الثلاثاء إصلاحًا فوريًا، ولكن فقط إذا كان المسؤولون يعرفون كيفية اكتشافه ونشره ومراقبته في الوقت المناسب.
المقتطف التالي يسحب الإصدار الحالي من win32k.sys من السجل، ويقارنه بالإصدار المُصَحَّح، ويسجّل حالات عدم التطابق في ملف CSV يمكن استيراده إلى Excel أو Tableau.
# DetectWin32k.ps1 – check for vulnerable win32k.sys
$target = 'Microsoft-Windows-GraphicsKernel'
$patchVersion = '6.0.22.7' # Expected patched version
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\$target"
$currentVer = Get-ItemProperty $regPath | Select-Object -ExpandProperty ImagePath
$kernelFile = Join-Path $env:SystemRoot \System32\win32k.sys
$fileVersion = (Get-ChildItem $kernelFile).VersionInfo.FileVersion
if ($fileVersion -ne $patchVersion) {
Write-Output "vulnerable: $currentVer (actual=$fileVersion, expected=$patchVersion)" | Out-File -Encoding ascii .\report.csv
}
ماذا يفعل:
ملف YAML التالي يخبر Ansible بتطبيق تحديث win32k.sys وإعادة تشغيل خدمة GDI على جميع المضيفات المستهدفة.
---
- name: Deploy Windows graphics kernel patch
hosts: windows_servers
gather_facts: yes
tasks:
- name: Copy new win32k.sys
copy:
src: /tmp/patches/win32k.sys
dest: C:\Windows\System32\
mode: '0644'
force: yes
- name: Restart GDI service
win_service:
name: w32k
state: restarted
ماذا يفعل:
windows_servers).أنشئ لوحة بسيطة تعرض استخدام جدول كائنات GDI عبر الوقت.
# grafana-dashboard.yml
apiVersion: 1
dashboard:
title: “GDI Usage”
panels:
- name: “Objects in use”
type: graph
targets:
- query: "SELECT timestamp, gdi_objects FROM win32k_stats WHERE $__timeFilter()"
ماذا يفعل:
win32k_stats) ويعرضها على لوحة Grafana. يمكنك إعداد تنبيهات عند ارتفاع الاستخدام فوق حد معين، وهو مؤشر مبكر على انتكاسات البرنامج التشغيلي.أضف خطوة اختبار إلى خط أنابيب Jenkins أو GitHub Actions تمارس التصحيح عبر اختبار التشويش (fuzzing) على win32k.sys باستخدام أداة خفيفة (مثل wdfuzz).
# .github/workflows/cve55226.yml
name: CVE‑2025‑55226 CI
on:
push:
branches:
- main
jobs:
test_and_deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Run fuzzer
run: |
wdfuzz.exe -t win32k.sys -c config.yaml
if ($LASTEXITCODE -eq 0) { Write-Host "Fuzz passed" }
- name: Deploy patch
uses: ansible/[email protected]
with:
playbook: DetectWin32k.ps1
ماذا يفعل:
main.يبدأ الأمر بخلل واحد في محرك الرسومات. يجد المهاجم طريقة لاستغلال حالة سباق في نواة Windows كما هو موضح أعلاه، متسللًا عبر الدفاعات ومنفذًا برمجيات عن بُعد. هذه هي CVE-2025-55226. لكن الخطر الحقيقي يتكشف عندما يقترنها بـ CVE-2025-54918، وهي نقطة ضعف في مصادقة NTLM. وفجأة، لا يقتصر الأمر على الدخول فقط، بل على السيطرة.
ما بدأ كخلل رسومي يتحول إلى تصعيد امتيازات كامل، يمنح المهاجم وصولًا على مستوى SYSTEM. سلسلة الأحداث هذه ليست نظرية فحسب، بل هي تذكير بأنه في البيئات الهجينة اليوم، نادرًا ما توجد الثغرات بمعزل عن بعضها.
تاريخ النشر: 9 سبتمبر 2025 (ثلاثاء التصحيح)
درجة CVSS v3.1: 8.8 (عالية)
المتجه: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE: CWE‑287 – مصادقة غير سليمة
المكوّن المتأثر: NTLM في Windows (إدارة تقنية الشبكة الجديدة)
الخلل هو خطأ منطقي في طريقة تحقق NTLM من بيانات المصادقة. يمكن للمهاجم الذي يصل إلى مضيف عبر الشبكة، حتى مع امتيازات ضئيلة، خداع النظام لمنحه حقوقًا على مستوى SYSTEM. وهذا يعني أنه بعد اختراق محطة عمل أو وحدة تحكم بالمجال، يمكن للخصم تثبيت التطبيقات، وسرقة الملفات السرية، وإنشاء حسابات مسؤول جديدة، أي السيطرة الكاملة تقريبًا على الهدف.
هذه الثغرة جزء من نمط متزايد في 2025: لقد تم بالفعل الإبلاغ عن ثغرتين أخريين في NTLM (CVE‑2025‑53778 وCVE‑2025‑21311). تصحيح مايكروسوفت لهذه المشكلة يصلح روتين مقارنة غير صحيح كان يقبل قيم تجزئة معينة بشكل خاطئ.
# Find hosts with vulnerable NTLM settings
$target = "dc01.company.local"
Invoke-Command -ComputerName $target -ScriptBlock {
Get-WmiObject -Class Win32_OperatingSystem |
Select-Object CSName, Version, BuildNumber
} | Out-File -FilePath C:\temp\nlm_detection.txt
# Check the NTLM policy value
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon" |
Select-Object "LmCompatibilityLevel"
# Export to CSV for quick review
$report = @()
foreach ($item in Get-WmiObject -Class Win32_Service | Where { $_.Name -eq "netlogon"}) {
$report += [pscustomobject]@{
Service = $item.Name
LmCompat = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon").LmCompatibilityLevel
}
}
$report | Export-Csv -Path C:\temp\nlm_report.csv -NoTypeInformation
يسحب السكربت إصدار نظام التشغيل الحالي، ويتحقق من أن مفتاح Netlogon مضبوط على القيمة التي توصي بها Microsoft (3)، ويكتب النتائج في ملف CSV سهل الاستهلاك.
---
- name: Patch NTLM for Windows servers
hosts: windows_dc01, windows_dc02, windows_dc03
gather_facts: true
tasks:
- name: Enable Netlogon compatibility level
win_regedit:
path: HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon
key: LmCompatibilityLevel
value: 3
datatype: dword
- name: Install Microsoft patch KB5000000
win_updates:
category_name: Security
search_keyword: KB5000000
reboot_after: true
انشر الدليل إلى جميع وحدات تحكم المجال. تضمن المهمة ضبط السياسة بشكل صحيح وتثبيت أحدث تحديث أمني، بحيث لا يمكن استغلال الخلل المنطقي نفسه بعد الآن.
باستخدام Responder وImpacket يمكنك محاكاة هجوم إعادة توجيه NTLM واقعي:
secretsdump.py من Impacket بيانات المصادقة.# Start Responder on the attack box
responder -i eth0 -f
# Dump credentials from the victim
python3 impacket/secretsdump.py <victim-ip> <domain-admin-username>
# Replay hash to the target
python3 impacket/ntlmrelay.py <victim-ip> <target-ip>
شغّل السكربت في بيئة خاضعة للتحكم وتحقق من حصولك على وصول على مستوى SYSTEM.
أضف مهمة تقوية NTLM إلى خط الأنابيب الخاص بك:
- name: Validate Netlogon compatibility level
win_regedit:
path: HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon
key: LmCompatibilityLevel
value: 3
datatype: dword
state: present
# Trigger when new patches are applied
- name: Reboot if required and restart services
win_reboot:
reboot_timeout_sec: 120
تُشغَّل المهمة تلقائيًا كلما تم تشغيل خط الأنابيب بواسطة بناء تصحيح جديد.
أنشئ تنبيهًا يتم إطلاقه عندما يسجل مضيف دخولًا باستخدام مصادقة NTLM تطابق نمط التجزئة الضعيف:
input {
beats {
type => "winlogbeat"
}
}
filter {
if [event_id] == "4624" and [logon_type] =~ /NTLM/ {
mutate {
add_field => { "[ntlm_match]" => "true" }
}
}
}
output {
elasticsearch {
hosts => ["es.company.local"]
index => "ntlm_audit"
}
}
يذهب التنبيه إلى Sentinel للتصور، مما يسمح لمسؤولي التوظيف برؤية أن الإصلاح قد طُبّق ويتم مراقبته.
الأمن لا يقتصر على تصحيح الثغرات فقط؛ بل يتعلق بفهم كيفية ترابطها، وكيف تتطور، وكيف يمكن تسليحها بطرق غير واضحة فورًا. من خلال الربط بين CVE-2025-55226 وCVE-2025-54918، أوضحت كيف يمكن لخلل واحد في برنامج تشغيل الرسومات أن يفتح الباب أمام اختراق كامل للنظام. والأهم من ذلك، أوضحت كيف يمكن لمهندس DevOps أن يستجيب ليس فقط بإصلاحات تقنية، بل بالبصيرة والأتمتة والمرونة.