
# ماسح مضيفات Linux سلبي يصنّف التعرض لثغرة CVE-2026-31431 عبر إصدار النواة، وسجل تغييرات التوزيعة، وحالة الوحدات، وإمكانية الوصول إلى AF_ALG، مع مخرجات JSON للتكامل مع SIEM.
المؤلفون/المساهمون: باتريك دويل (مؤلف/مشرف)، إيفي رينارد (مؤلف مشارك)، كيمبرلي-لي بانكس (مؤلف مشارك)، كريس إف (دعم/مراجعة الكود)
إفصاح الذكاء الاصطناعي: تم استخدام Claude Code لكتابة ملفات الاختبار، وكتابة بيانات الاختبار، وإجراء مراجعة أمنية للكود. تمت مراجعة جميع التعديلات يدويًا من قبل أحد المساهمين.
ملف ثنائي واحد بلغة Go مرتبط بشكل ثابت يصنف تعرض مضيف Linux لـ CVE-2026-31431.
الأداة سلبية. لا تستغل الثغرة. يصدر فحص الآلية (انظر بيان السلامة أدناه) استدعاءين للنظام بالضبط ولا يلمس مسار الكود الضعيف أبدًا.
| الإشارة | المصدر | العلامة |
|---|
| إصدار النواة مقابل الإصلاح من المصدر | uname(2) | --kernel-version |
| ذكر سجل تغييرات التوزيعة للـ CVE | apt/rpm/apk أو changelog.Debian.gz على القرص | --changelog |
حالة وحدة algif_aead | /proc/modules, modprobe.d, /lib/modules | --module |
| إمكانية الوصول إلى السطح الضعيف | socket(AF_ALG) + bind(authencesn(...)) | --mechanism |
| مدمج في vmlinux | /boot/config-$(uname -r) أو /proc/config.gz | (جزء من --module) |
إذا لم يتم إعطاء أي علامات فحص، يتم تشغيل جميع الفحوصات الأربعة.
| الوضع | المحفز | حالة الاستخدام |
|---|---|---|
| منسق بشكل جميل (افتراضي) | إخراج TTY، بدون تجاوز --format، بدون متغير بيئة NO_COLOR | تشغيلات الصدفة التفاعلية |
| نص عادي | إخراج غير TTY، أو --format=text، أو NO_COLOR=1، أو --no-color | سكربتات الصدفة، الأنابيب |
| JSON | --format=json | إدخال Syslog/SIEM، سكربتات الصدفة |
| هادئ | --quiet | رمز الخروج فقط (الأتمتة/السكربتات) |
فرض الوضع الجميل عند الأنابيب: cvecheck --pretty | tee report.txt.
فرض النص العادي في TTY: cvecheck --no-color أو NO_COLOR=1 cvecheck.
يصدر الفحص استدعاءين للنظام بالضبط socket(AF_ALG, SOCK_SEQPACKET, 0)، وbind(fd, &SockaddrALG{Type:"aead", Name:"authencesn(hmac(sha256), cbc(aes))"}). ثم يتبعه close(fd). لا يقوم بـ أي setsockopt لمفتاح، ولا accept، ولا sendmsg، ولا splice، ولا إنشاء أنابيب. يتطلب مسار الكود الضعيف sendmsg لبيانات التشفير مقترنًا بـ splice من واصف ملف مدعوم بذاكرة تخزين مؤقت للصفحات؛ لا يحدث أي من هذه العمليات، لذا لا يمكن للثغرة أن تتحرك.
الفحص الناجح يعني أن السطح قابل للوصول. ما إذا كانت النواة لا تزال تحتوي على الثغرة يتم تحديده بواسطة إشارات إصدار النواة + سجل التغييرات.
تأثير جانبي: bind ناجح يقوم بتحميل تلقائي لـ algif_aead عبر محمل وحدات النواة. يتم تشغيل فحص الوحدة قبل فحص الآلية بحيث يكون تقرير حالة التحميل قبل الفحص. لقمع التحميل التلقائي تمامًا، قم بحظر algif_aead أولاً.
| الرمز | المعنى |
|---|---|
0 | PATCHED / NOT_VULNERABLE / MITIGATED / LIKELY_NOT_EXPLOITABLE |
2 | VULNERABLE أو MECHANISM_REACHABLE (فحص جزئي، لم يتم فحص إصدار النواة) |
3 | INCONCLUSIVE (إشارات غير كافية) |
| التوزيعة | الاكتشاف | حزمة النواة | ملاحظات |
|---|---|---|---|
| Ubuntu / Debian / Mint / Pop!_OS | apt | linux-image-$(uname -r) | قراءة سجل التغييرات من القرص أولاً تتجنب هشاشة شبكة apt changelog على النوى الموقعة |
| RHEL / CentOS / Rocky / Alma / Fedora / Amazon Linux | rpm | kernel | يشحن algif_aead مدمجًا (CONFIG_..._AEAD=y)؛ تخفيف الحظر غير فعال |
| Oracle Linux | rpm | kernel أو kernel-uek | يتم اكتشاف UEK عبر سلسلة uek الفرعية في uname -r |
| openSUSE / SLES | rpm | kernel-default | |
| Alpine | apk | linux-lts / linux-virt / إلخ. | يتم اختيار النكهة من لاحقة الإصدار |
| Arch / CachyOS / Manjaro / Endeavour / Gentoo | لا يوجد | غير متاح | متداول/مصدر: يعتمد على فحص إصدار النواة |
يكتشف تلقائيًا بنية جهازك، وينزّل الملف الثنائي الصحيح في $(pwd)، ويتحقق من SHA-256 الخاص به مقابل SHA256SUMS المنشور:
curl -fsSL https://copyfail.pcdoyle.dev/install.sh | sh
يخرج السكربت برمز غير صفري عند عدم تطابق المجموع الاختباري ويزيل الملف التالف.
اختر الملف الثنائي لبنية مضيفك:
| البنية | الملف الثنائي |
|---|---|
Intel/AMD 64-bit (x86_64) | cvecheck-linux-x86_64 |
ARM 64-bit (aarch64) | cvecheck-linux-arm64 |
Intel/AMD 32-bit (i?86) | cvecheck-linux-x86 |
تحقق قبل التشغيل:
curl -LO https://github.com/pcdoyle/copy-fail-cve-2026-31431/releases/latest/download/cvecheck-linux-x86_64
curl -LO https://github.com/pcdoyle/copy-fail-cve-2026-31431/releases/latest/download/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
chmod +x cvecheck-linux-x86_64
make build # bin/cvecheck-linux-{x86_64,arm64,x86}
# SCP(SFTP) إلى الخادم:
scp ./bin/cvecheck-linux-x86_64 host:/tmp/ # أقل من 4 ميجابايت، ثابت، بدون اعتماد على glibc
# SSH:
ssh <host>
# تشغيل الملف الثنائي:
/tmp/cvecheck-linux-x86_64 # إخراج جميل سهل القراءة للبشر.
/tmp/cvecheck-linux-x86_64 --format=json # مناسب للسكربتات وSyslog وSIEM
/tmp/cvecheck-linux-x86_64 --format=text # مناسب للسكربتات والأنابيب
ssh <host> /tmp/cvecheck-linux-x86_64 # إذا تم تشغيله مباشرة، الافتراضي هو --format=text
ssh <host> /tmp/cvecheck-linux-x86_64 --format=json # مناسب لـ Syslog/SIEM
قم بتركيب جذر المضيف في مكان قابل للقراءة ومرر --root:
docker run --rm -v /:/host:ro alpine /tmp/cvecheck --root /<host-path>
يتحكم --root في جميع عمليات البحث على القرص (/etc/os-release, modprobe.d, /lib/modules, /boot/config-*, ملفات سجل التغييرات). لا تزال فحوصات إصدار النواة والآلية تلمس النواة قيد التشغيل عبر uname(2) وsocket(AF_ALG, ...).
يتم حلها بهذا الترتيب (أول تطابق يفوز):
PATCHED: سجل تغييرات التوزيعة يشير إلى معرّف CVE.NOT_VULNERABLE: النواة قيد التشغيل >= الإصدار المُصلح من المصدر.MITIGATED: algif_aead محظور و غير محمّل و غير مدمج في vmlinux.LIKELY_NOT_EXPLOITABLE: AF_ALG غير متاح والوحدة غير موجودة على القرص.MECHANISM_REACHABLE: السطح قابل للوصول ولكن لم يتم فحص إصدار النواة.VULNERABLE: النواة في نطاق الثغرة والآلية قابلة للوصول.INCONCLUSIVE: لا شيء مما سبق يطابق.إذا تم تشغيل --mechanism جنبًا إلى جنب مع --kernel-version وكلاهما يشير إلى مشكلة، تكون النتيجة VULNERABLE مع تلميح معالجة.
algif_aead حتى وصول ترقية النواة.
echo 'blacklist algif_aead' | sudo tee /etc/modprobe.d/cve-2026-31431.conf
sudo rmmod algif_aead 2>/dev/null
CONFIG_CRYPTO_USER_API_AEAD=y يضع الرمز داخل vmlinux. فقط ترقية النواة (أو تصحيح حي بنمط kpatch) يحل التعرض. تكتشف الأداة ذلك.| العرض | السبب | الإصلاح |
|---|---|---|
changelog: error="apt: exit status 100 ... Changelog unavailable for linux-signed-amd64" | نواة موقعة من Debian/Ubuntu؛ مرآة apt لا تقدم سجل تغييرات حزمة المصدر | يظهر الخطأ فقط عندما يكون الملف على القرص مفقودًا بالإضافة إلى عدم إمكانية الوصول إلى المرآة، قم بتثبيت apt-doc أو انتظر المرآة. |
module: ... config_src="" | لا يوجد تكوين نواة قابل للقراءة (لا يوجد /boot/config-*، ولا /proc/config.gz، /boot للجذر فقط) | قم بالتشغيل كجذر، أو اقبل أنه لا يمكن تحديد BuiltIn. قد يظل الحكم يُحسم عبر إشارات أخرى. |
mechanism: error="EAFNOSUPPORT" | نواة مبنية بدون CONFIG_CRYPTO_USER_API، لذا المضيف غير معرض عبر AF_ALG | سيكون الحكم LIKELY_NOT_EXPLOITABLE. |