
يحتوي هذا المستودع على أقسام فلاش مفرّغة بإصدار برنامج ثابت معرّض للثغرة CVE-2019-17147، بالإضافة إلى بعض الملفات الثنائية المفيدة لتخفيض الإصدار وتصحيح أخطاء جهاز التوجيه WR841N الخاص بك.
يحتوي هذا المستودع على أقسام فلاش مفرّغة بإصدار برنامج ثابت ضعيف بالنسبة لـ CVE-2019-17147، وبعض الملفات الثنائية المفيدة لخفض إصدار جهاز التوجيه WR841N(V14) وتصحيح أخطائه.
إجراء تعديلات على العتاد مثل الكتابة فوق أقسام شريحة الفلاش ينطوي على مخاطر. قيّم المخاطر وقرر بنفسك ما إذا كنت تريد القيام بذلك أم لا.
أظهر المنشور من ZDI: https://www.zerodayinitiative.com/blog/2019/12/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-router-part-2 ثغرة مثيرة للاهتمام للغاية أرغب بشدة في تجربتها وتعلم شيء منها.
لسوء الحظ، تمت إزالة إصدار البرنامج الثابت (US) 0.9.1 4.16 v007c.0 Build 180613 Rel.42415n من الموقع الأمريكي ولم يعد ممكنًا تنزيله.
ومع ذلك، لدي بعض أجهزة WR841N تعمل بإصدار البرنامج الثابت (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n، وهو أقدم من الإصدار الذي استغله ZDI وما تزال الثغرة نفسها موجودة.
أظن أن كثيرين آخرين سيهتمون بإعادة إنتاج هذا الاستغلال لكنهم يواجهون المشكلة نفسها، إذ لا يمكنهم العثور على جهاز WR841N يعمل بإصدار ضعيف من البرنامج الثابت.
إذا كنت تستخدم عتادًا بإصدار TW أو EU أو JP، فلا يزال من الممكن تنزيل إصدار برنامج ثابت أقدم من 180613 (أي أنه مبني في 2018/06/13) وخفض إصدار الراوتر الخاص بك فقط عن طريق «ترقيته» بالبرنامج الثابت القديم من الموقع الرسمي.
على الرغم من أن خفض إصدار البرنامج الثابت ممكن، فإن WR841N يتحقق فعليًا ولن يقبل برنامجًا ثابتًا مخصصًا لعتاد يُباع في بلدان مختلفة. لذا، بالنسبة للأشخاص الذين يعيشون في البلدان التي لا توفر فيها TP-Link إصدارًا ضعيفًا من البرنامج الثابت على موقعها (على سبيل المثال، الولايات المتحدة)، سيحتاجون إلى تجاوز الفحص في خادم http وكتابة البرنامج الثابت الضعيف مباشرة في شريحة الفلاش بجهازهم. هذا هو الغرض الرئيسي من هذا المستودع.
لقد قمت أيضًا بتجميع (cross compile) نسخة ثابتة من busybox وgdbserver تعمل على WR841N لمن يرغب في محاولة تصحيح الأخطاء وإعادة إنشاء الاستغلال.
قبل محاولة الكتابة فوق أقسام الفلاش، يجب عليك عمل نسخة احتياطية من الأقسام الحالية حتى تتمكن من استعادة الراوتر بعد الانتهاء من اللعب بهذا الإصدار الضعيف.
أفترض أنك معتاد بالفعل على استخدام وحدة التحكم التسلسلية (serial console)، لذا سأتخطى الجزء الخاص بالعتاد.
قم بإعداد خادم tftp على الجهاز الذي تختاره.
في وحدة تحكم WR841N:
(استبدل عنوان IP بعنوان خادم tftp الخاص بك)
~ # cat /dev/mtd0 > /var/WR841N_backup_mtd0_boot.bin
~ # tftp -p -r /var/WR841N_backup_mtd0_boot.bin 192.168.0.100
~ # rm /var/WR841N_backup_mtd0_boot.bin
~ #
~ # cat /dev/mtd1 > /var/WR841N_backup_mtd1_kernel.bin
~ # tftp -p -r /var/WR841N_backup_mtd1_kernel.bin 192.168.0.100
~ # rm /var/WR841N_backup_mtd1_kernel.bin
~ #
~ # cat /dev/mtd2 > /var/WR841N_backup_mtd2_rootfs.bin
~ # tftp -p -r /var/WR841N_backup_mtd2_rootfs.bin 192.168.0.100
~ # rm /var/WR841N_backup_mtd2_rootfs.bin=
أقسام الفلاش في WR841N كما يلي:
dev: size erasesize name
mtd0: 00010000 00010000 "boot"
mtd1: 000f0000 00010000 "kernel"
mtd2: 002e0000 00010000 "rootfs"
mtd3: 00010000 00010000 "config"
mtd4: 00010000 00010000 "radio"
القسم الرئيسي الذي تحتاج إلى الكتابة فوقه هو rootfs (mtd2)، لكن من أجل الاستقرار سنقوم أيضًا بالكتابة فوق boot وkernel.
لم أقدم قسمي config وradio لأنهما لا يؤثران على الثغرة، وبالتأكيد لا تريد العبث بإعدادات الترددات اللاسلكية (RF) لتجنب مشكلات قانونية محتملة.
flashcp إلى WR841N باستخدام tftp.في شل WR841:
~ # cd /var
/var # tftp -g -r flashcp 192.168.0.100
/var # chmod +x flashcp
(استبدل عنوان IP بجهازك الذي يشغّل خادم tftp، بالطبع.)
TW_wr841N_mtd0_boot_180516.bin إلى WR841N واكتب فوق القسم باستخدام flashcp:/var # tftp -g -r TW_wr841N_mtd0_boot_180516.bin 192.168.0.100
/var # ./flashcp TW_wr841N_mtd0_boot_180516.bin /dev/mtd0
/var # rm TW_wr841N_mtd0_boot_180516.bin
TW_wr841N_mtd1_kernel_180516.bin إلى WR841N واكتب فوق القسم باستخدام flashcp:/var # tftp -g -r TW_wr841N_mtd1_kernel_180516.bin 192.168.0.100
/var # ./flashcp TW_wr841N_mtd1_kernel_180516.bin /dev/mtd1
/var # rm TW_wr841N_mtd1_kernel_180516.bin
TW_wr841N_mtd2_rootfs_180516.bin إلى WR841N واكتب فوق القسم باستخدام flashcp (هذا هو أكبر قسم، لذا سيستغرق flashcp بعض الوقت حتى ينتهي):/var # tftp -g -r TW_wr841N_mtd2_rootfs_180516.bin 192.168.0.100
/var # ./flashcp TW_wr841N_mtd2_rootfs_180516.bin /dev/mtd2
/var # rm TW_wr841N_mtd2_rootfs_180516.bin
0.9.1 4.16 v009e.0 Build 180516 Rel.81030n.
buildroot-2021.02.6.