
نصوص برمجية لإثبات المفهوم لثغرتين لتنفيذ تعليمات برمجية عن بُعد بدون مصادقة في سامبا (CVE-2026-4408 و CVE-2026-4480) ورفع امتيازات محلي في TelnetD (CVE-2026-28372)
يحتوي هذا المستودع على سكربتات إثبات المفهوم للثغرات التي عُرضت في المحاضرة "Forgotten but Not Gone: Unauthenticated RCEs and LPEs in Legacy Linux Services" في مؤتمر Black Hat USA 2026 وDEF CON 34.
تصعيد صلاحيات محلي في TelnetD: يمكن للمهاجمين غير المميزين استغلال ميزة متغيرات البيئة في TelnetD لمنح أنفسهم شلًا بصلاحيات الجذر. بحسب التصميم ووفقًا لـ RFC الخاصة به، يتيح بروتوكول Telnet لعملائه تعيين متغيرات بيئة لجلسة الشل. كانت هذه الميزة سيئة التصميم من منظور أمني. كانت الخدمة تسمح للعملاء غير المصادقين بتعيين متغيرات بيئة لعملية telnetd نفسها ولجميع عملياتها الفرعية. إحدى عملياتها الفرعية هي /usr/bin/login. سمح لنا تعيين متغيرات البيئة كعميل telnet عن بُعد بإطلاق /usr/bin/login مع متغير البيئة “CREDENTIALS_DIRECTORY”. يؤدي ذلك إلى جعل عملية login تبحث عن ملف باسم “login.noauth” في الدليل المحدد بواسطة “CREDENTIALS_DIRECTORY”. إذا كان الملف يحتوي على السلسلة النصية “yes”، تتخطى عملية login المصادقة وتمنح العميل شلًا يعمل بصلاحيات المستخدم الذي حدده العميل. ويمكن أن يكون أي مستخدم، حتى الجذر.
تنفيذ تعليمات برمجية عن بُعد بدون مصادقة في Samba عبر SAMR: يعتمد Samba على أوامر شل محددة في ملف الإعدادات (smb.conf) لتنفيذ عمليات مختلفة يطلبها عملاؤه، مثل إضافة مشاركة شبكة جديدة، أو إضافة طابعة جديدة، والمزيد. تستقبل بعض أوامر الشل معاملات بناءً على الطلب المُرسل من العميل. وفي معظم الأحيان، يتم تعقيم المعاملات وهروب الأحرف الخاصة قبل تنفيذ الأمر لمنع حقن الشل.
تكمن الثغرة في الدالة “check_password_complexity" التي تنسّق سلسلة نصية يحددها العميل داخل أمر شل دون تعقيمها. تتطلب الثغرة شرطين:
لتكوين البرنامج الخفي الخاص بـ RPC في samba (samba-dcerpcd) لاستخدام NCACN_IP_TCP، يجب تشغيله كخدمة نظام منفصلة وليس كجزء من خدمة samba الرئيسية. أيضًا، يجب ضبط الخيار "rpc start on demand helpers” في ملف الإعدادات على القيمة “no”.
تنفيذ تعليمات برمجية عن بُعد بدون مصادقة في Samba عبر SPOOLSS: تقوم الدالة generic_job_submit أيضًا بتنسيق سلسلة نصية يتحكم بها العميل داخل أمر شل دون تعقيمها. يؤدي الجمع بين الإعدادات التالية إلى هذه الثغرة:
يمكن لعميل غير مصادق طلب الوصول إلى مشاركة طابعة عبر واجهة RPC الخاصة بـ spoolss. بعد ذلك، يمكن إرسال مهمة طباعة عبر الدالة RpcStartDocPrinter. سيُستخدم اسم المستند المحدد في الطلب كاسم مهمة يُنسَّق داخل المعامل “%J” للأمر. يؤدي استدعاء hRpcEndDocPrinter إلى تشغيل generic_job_submit التي ستنفذ الأمر “print command” من الإعدادات بعد تنسيق اسم المهمة دون تعقيم. سيتم تنفيذ الكود المُرسل من الاستغلال بصلاحيات المستخدم "nobody". إذا أُضيف الإعداد "valid users = @users" إلى قسم مشاركة الطابعة، يظل الاستغلال يعمل، لكنه يتطلب بيانات اعتماد صالحة. إذا تمت المصادقة، سيتم تنفيذ الكود المُرسل من الاستغلال بصلاحيات المستخدم المصادق وليس بصلاحيات "nobody".