
إثبات مفهوم لاستغلال تجاوز سعة المخزن المؤقت قبل المصادقة في GNU InetUtils telnetd (CVE-2026-32746)، بما في ذلك بيئة مختبر Docker وسكربت كشف للاختبار الأمني المصرح به.
تنفيذ كود عن بُعد قبل المصادقة عبر تجاوز سعة المخزن المؤقت في معالج SLC (تعيين الأحرف المحلية) لوضع LINEMODE في telnetd الخاص بـ GNU InetUtils.
CVSS 3.1: 9.8 (حرج) | CWE: CWE-120, CWE-787
تقوم الدالة add_slc() في telnetd/slc.c بإلحاق 3 بايتات لكل ثلاثية SLC بمخزن مؤقت ثابت بحجم 108 بايت (slcbuf) دون التحقق من الحدود. يمكن لمهاجم غير مصادق إرسال خيار فرعي SLC مُصمم يحتوي على 40+ ثلاثية (رموز دالة > 18/NSLC) أثناء التفاوض على الخيارات - قبل أي موجه تسجيل دخول - مما يؤدي إلى تجاوز سعة المخزن المؤقت، وإفساد مؤشر slcptr في BSS، وتحقيق كتابة عشوائية عندما تستخدم end_slc() المؤشر المُفسد.
# بناء بيئة المختبر الضعيفة
docker compose up -d
# الكشف (غير مدمر)
python3 detect.py 127.0.0.1 2323
# الاستغلال (يُعطل telnetd - يؤكد الثغرة)
python3 exploit.py 127.0.0.1 2323
# التنظيف
docker compose down
يعمل إعداد Docker على تشغيل حاوية Debian مع inetutils-telnetd 2.4 تحت xinetd، معروضة على المنفذ 2323. معزولة تمامًا - لا تلمس أي شيء على مضيفك.
WILL LINEMODE لتفعيل التفاوض على وضع LINEMODEDO LINEMODE ويدخل في معالجة الخيار الفرعي SLCadd_slc() رد "غير مدعوم" (3 بايتات) لكل ثلاثية في مخزن مؤقت بحجم 104 بايتslcptr وبيانات BSS المجاورةend_slc() علامة نهاية الخيار الفرعي عبر slcptr المُفسد (كتابة عشوائية)| الملف | الوصف |
|---|---|
exploit.py | PoC لاستغلال التعطل/DoS |
Dockerfile | مختبر telnetd الضعيف |
docker-compose.yml | إعداد مختبر بأمر واحد |
xinetd-telnet.conf | إعداد خدمة xinetd |
detect.py | سكربت كشف الإصدار غير المدمر |
لتجاوز DoS، ستحتاج إلى:
slcbuf ← slcptr)end_slc() عبر slcptr المُفسدتُقدم هذه الأداة لأغراض اختبار الأمان المصرح به والأغراض التعليمية فقط. لا تستخدمها ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها. المؤلف غير مسؤول عن سوء الاستخدام.
MIT