CVE-2026-79977 in Zephyr
الملخص
بحسب VulDB • 24/10/2026
تعرض خدمة VPN الخاصة بـ WireGuard في الملف `subsys/net/lib/wireguard/wg.c` لثغرة حيث تم تحديث نقطة نهاية (endpoint) الزميل (peer) بناءً على رسالة لم يتم التحقق من صحتها. داخل الدالة `handle_transport_data()`، عندما لا يتطابق مؤشر الاستلام ذي الـ 32 بت في رسالة نقل البيانات الواردة مع أي جلسة نشطة، يقوم الكود بجدولة مصادقة جديدة (handshake) ونسخ عنوان المصدر للقطعة (datagram) إلى حقل `peer->endpoint` باستخدام دالة `memcpy(&peer->endpoint, peer_addr, sizeof(peer->endpoint))`. وبما أن مؤشر الاستلام غير معروف، فلا توجد مفتاح يمكن من خلاله التحقق من صحة هذه الرسالة، وبالتالي فإن العنوان المكتوب في `peer->endpoint` يتم تزويده بالكامل بواسطة المهاجم. تحدث جميع تحديثات نقطة النهاية الأخرى في التنفيذ فقط بعد المصادقة — إما بعد مصادقة Noise في دالة `handle_handshake_init()`، أو بعد فك تشفير AEAD وفحص مكافحة إعادة التشغيل (anti-replay check) في دالة `wg_process_data_message()`.
تم تسجيل مستمع WireGuard باستخدام الدالة `net_udp_register()` دون أي فلتر لعنوان أو منفذ بعيد، ويعمل افتراضياً على المنفذ UDP 51820 (`CONFIG_WIREGUARD_PORT`)، وتقوم الدالة `wg_ctrl_recv()` بتحديد هوية الزميل بناءً على الواجهة بدلاً من الهوية المشفرة. وبالتالي، يمكن لأي مضيف قادر على إرسال قطعة بيانات UDP إلى هذا المنفذ استغلال الثغرة دون الحاجة لمراقبة حركة المرور الشرعية: حيث تكفي قطعة بيانات بحجم 16 بايت تحمل نوع نقل البيانات، وبتات محجوزة مُصفّرة (صفرية)، ومؤشر استقبال عشوائي. يتم تنفيذ الفرع المعرض للثغرة كلما كان الزميل لا يملك مصادقة صالحة ولا زوج مفاتيح حالي — وهي الحالة عند الإقلاع وبعد انتهاء صلاحية الجلسة.
تؤدي قطعة بيانات واحدة مزيفة إلى إعادة توجيه `peer->endpoint` إلى عنوان يختاره المهاجم، وتُرسل جميع عمليات بدء المصادقات اللاحقة، ورسائل الحفاظ على الاتصال (keepalives)، وحزم البيانات المشفرة إلى هذا العنوان. لا يتلقى الزميل الشرعي عمليات البدء هذه وبالتالي لا يعيد المصادقة أبداً، ولا يوجد ما يقوم بإعادة تعيين نقطة النهاية لاحقاً، مما يترك النفق غير صالح للاستخدام بشكل دائم على الأجهزة التي لا يبدأ فيها الزميل مصادقاته الخاصة. يمكن للمهاجم أيضاً إعادة توجيه عمليات بدء الاتصال إلى الزعيم الحقيقي لوضع نفسه في مسار النفق، ومراقبة النص المشفر وبيانات حركة المرور، وحذف الحزم انتقائياً. تمنع التشفير من طرف إلى طرف الخاص بـ WireGuard فك التشفير أو تزوير محتوى النفق، لذا فإن الأثر هو فقدان التوافر (availability) وسرية محدودة فقط، وليس اختراق المفاتيح.
يتمثل الإصلاح في إزالة تعلم نقطة النهاية تماماً من هذا المسار: يتم الحفاظ على استعادة الجلسة القديمة (stale-session recovery)، ولكن تُرسل المصادقة الجديدة فقط إلى نقطة نهاية تم تعلمها من رسالة موثوقة، مع العودة إلى `cfg_endpoint` المُهيأ إذا لم يكن أي منهما معروفًا، ويتم تجاهل الرسالة عندما لا يكون أي منها متاحاً. يُصنف الخيار `CONFIG_WIREGUARD` على أنه تجريبي وليس ممكناً افتراضياً.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.