
أداة اكتشاف وتخفيف الثغرات الأمنية لأخطاء Copy Fail و Dirty Frag (CVE-2026-31431, CVE-2026-43284, CVE-2026-43500)
تدقيق مضيف لينكس بعيد عبر SSH بحثًا عن ثغرات نواة "Copy Fail" و "Dirty Frag" (وحدات النواة) واختياريًا تطبيق التخفيفات:
| CVE | الاسم | الوحدات المتأثرة |
|---|---|---|
| CVE-2026-31431 | Copy Fail | algif_aead |
| CVE-2026-43284 | Dirty Frag (IPsec) | esp4, esp6, ipcomp4, ipcomp6, xfrm_user |
| CVE-2026-43500 | Dirty Frag (RxRPC) | rxrpc, kafs |
لكل وحدة متأثرة، يبلغ vcheck عما إذا كانت محملة حاليًا، أو مدمجة في النواة قيد التشغيل، أو لها آثار سابقة في سجلات النواة، أو بها مقابس AF_ALG حية (Copy Fail فقط)، وما إذا كانت مدرجة بالفعل في القائمة السوداء تحت /etc/modprobe.d/.
مع -fix، يبلغ vcheck عن الحالة الأولية، ويكتب مقطعًا cve-XXXX-XXXXX-disable.conf لأي وحدة غير مدرجة في القائمة السوداء بعد، ثم يعيد تشغيل الفحوصات ويبلغ عن الحالة النهائية. مع -fix -unload، يحاول vcheck أيضًا تفريغ الوحدات المتأثرة التي كانت محملة قبل الإصلاح، ثم يستخدم الفحص النهائي للتحقق مما إذا كانت لا تزال محملة. مع -fix -rebuild-initramfs، يعيد vcheck بناء initramfs للنواة قيد التشغيل فقط بعد كتابة مقطع، بحيث يتم تضمين القائمة السوداء في صورة الإقلاع التالية. إدخالات النواة الأقدم تحتفظ بـ initramfs الأصلي الخاص بها كخيار احتياطي.
-fix فقط بعد تشغيل تحقق فقطقم دائمًا بتشغيل vcheck بدون -fix أولاً. اقرأ التقرير وتأكد من أن الوحدات المتأثرة آمنة لتعطيلها على هذا المضيف قبل إعادة التشغيل باستخدام -fix. تعطيل وحدات النواة التي تعتمد عليها أعباء العمل الشرعية يمكن أن يؤثر على المستخدمين ويكسر التطبيقات.
بشكل خاص:
-fix على أنه آمن فقط عندما لا تكون أي من الوحدات المتأثرة محملة حاليًا — أي كل وحدة يتم الإبلاغ عنها إما mitigated أو module not blacklisted (بدون سطور VULNERABLE أو blacklisted but currently loaded). الوحدة المحملة تعني دائمًا تقريبًا أن شيئًا ما على المضيف يستخدمها بنشاط؛ تحقق من ذلك قبل وضعها في القائمة السوداء.esp4, esp6, ipcomp4, ipcomp6, xfrm_user) مطلوبة لأي نشر IPsec/strongSwan/WireGuard-over-IPsec/IKE. وحدات ipcomp4/ipcomp6 تنفذ ضغط حمولة IPComp وقد يتم التفاوض عليها تلقائيًا كجزء من SA IPsec حتى عندما لا تكون مهيأة بشكل صريح. لا تضع أيًا منها في القائمة السوداء على بوابة VPN، أو نقطة نهاية IPsec، أو في أي مكان يعيد فيه ip xfrm policy قواعد. لاحظ أن وحدة إطار العمل xfrm_algo ليست متعمدة في هذه القائمة — وفقًا لتوجيهات البائعين (Red Hat, Ubuntu, AWS)، يكفي حظر وحدات بروتوكول ESP و IPComp بالإضافة إلى واجهة تكوين netlink الخاصة بـ xfrm_user، وأن وضع xfrm_algo في القائمة السوداء سيكسر كل تحويل xfrm آخر دون فائدة إضافية.rxrpc, kafs) مطلوبة لأي مضيف يقوم بتركيب أنظمة ملفات AFS. تعطيلها سيكسر تلك التركيبات عند الإقلاع التالي.algif_aead يعرض تشفير النواة عبر عائلة المقابس AF_ALG. نادرًا ما يستخدمه رمز التطبيق مباشرة، لكن تحقق عن طريق سرد المقابس الحية (ss -p --af-alg) والتحقق من المستهلكين في مساحة المستخدم قبل وضعها في القائمة السوداء.مقاطع القائمة السوداء التي يكتبها vcheck تعمل فقط عند وقت تحميل الوحدة (عادة الإقلاع التالي، أو modprobe -r <module> بينما النظام خامل). الوحدة التي تكون محملة بالفعل ستستمر في العمل حتى بعد -fix — سيقوم vcheck بالإبلاغ عن هذا كـ blacklisted but currently loaded; run 'modprobe -r' or reboot. تمرير -unload مع -fix يطلب من vcheck تشغيل modprobe -r للوحدات المتأثرة المحملة بعد كتابة مقاطع القائمة السوداء. استخدمه فقط عندما تكون قد أكدت أن الوحدات آمنة للإزالة من النواة قيد التشغيل.
تمرير -rebuild-initramfs مع -fix يعيد إنشاء initramfs للنواة قيد التشغيل فقط (update-initramfs -u -k $(uname -r) على Debian/Ubuntu، dracut -f --kver $(uname -r) على RHEL/Fedora). النوى الأخرى المثبتة تحتفظ بـ initramfs الحالي دون تغيير، لذلك إذا حدث خطأ بعد إعادة التشغيل يمكنك اختيار إدخال نواة أقدم من قائمة الإقلاع واستعادة النظام. تركيبات النوى المستقبلية تعيد بناء initramfs الخاص بها من الحالة الحالية لـ /etc/modprobe.d/، لذلك تنتشر القائمة السوداء تلقائيًا دون الحاجة لإعادة تشغيل vcheck. إذا كان كل من update-initramfs و dracut غير موجودين (مثل Arch, Alpine, الصور الثابتة)، يحذر vcheck ويستمر — أعد البناء يدويًا باستخدام أداة التوزيعة قبل إعادة التشغيل.
يمكن أن يستغرق إعادة البناء عدة دقائق (خاصة dracut على المضيفات التي تحتوي على العديد من برامج التشغيل)، مما قد يتجاوز المهلة التشخيصية -command-timeout. يتم تشغيله تحت مهلة خاصة به -initramfs-timeout (الافتراضي 10m) بحيث يحصل إعادة البناء على الوقت الذي يحتاجه بينما تبقى الفحوصات السريعة ضمن ميزانيتها الضيقة. قم بزيادة -initramfs-timeout للأجهزة البطيئة، أو مرر 0 لتعطيل المهلة تمامًا. أثناء الأوامر البعيدة طويلة الأمد، يرسل vcheck طلبات keepalive SSH كل 30s افتراضيًا للحفاظ على عدادات الخمول في NAT/جدار الحماية من قطع الاتصال. اضبط هذا باستخدام -ssh-keepalive، أو مرر 0 لتعطيله.
Homebrew (macOS):
brew install --cask krisiasty/tap/vcheck
الملفات الثنائية الجاهزة لنظام Linux و macOS و Windows منشورة على صفحة الإصدارات.
من المصدر (يتطلب Go 1.26+):
go install github.com/krisiasty/vcheck@latest
vcheck -host HOST [flags]
| الإشارة | الافتراضي | الوصف |
|---|---|---|
-host | (مطلوب) | المضيف البعيد |
-user | $USER | المستخدم البعيد |
-port | 22 | منفذ SSH البعيد |
-agent | true | استخدام وكيل SSH للمصادقة |
-identity | (فارغ) | المسار إلى ملف مفتاح خاص (يطلب عبارة المرور إذا كان مشفرًا) |
-password | false | طلب كلمة مرور SSH |
-insecure | false | قبول مفاتيح المضيف غير المسجلة في known_hosts؛ عدم التطابق مع مفتاح مسجل لا يزال يفشل |
-fix | false | كتابة مقاطع /etc/modprobe.d للوحدات غير المدرجة في القائمة السوداء بالفعل |
-unload | false | مع -fix، تفريغ الوحدات المتأثرة بعد وضعها في القائمة السوداء |
-rebuild-initramfs | false | مع -fix، إعادة بناء initramfs للنواة قيد التشغيل فقط (update-initramfs أو dracut) |
-skip-logs | false | تخطي فحوصات تاريخ سجل النواة |
-timeout | 15s | مهلة اتصال SSH |
-ssh-keepalive | 30s | فترة keepalive SSH (0 لتعطيل) |
-command-timeout | 30s | مهلة الأمر البعيد (0 لتعطيل) |
-initramfs-timeout | 10m | مهلة خطوة إعادة بناء initramfs (0 لتعطيل)؛ تُستخدم فقط مع -rebuild-initramfs |
-debug | false | زيادة مستوى تفصيل السجل |
-version | false | عرض الإصدار والخروج |
يجب أن ينتج واحد على الأقل من -agent أو -identity أو -password طريقة مصادقة قابلة للاستخدام. يتم تجربة الطرق بالترتيب المدرج.