
Dieses Repo enthält ausgelesene Flash-Partitionen mit einer Firmware-Version, die anfällig für CVE-2019-17147 ist, sowie einige nützliche Binaries zum Downgrade und Debuggen Ihres WR841N-Routers.
Dieses Repo enthält ausgelesene Flash-Partitionen mit einer Firmware-Version, die für CVE-2019-17147 verwundbar ist, sowie einige nützliche Binärdateien, um deinen WR841N(V14)-Router zu downgraden und zu debuggen.
Hardware-Modifikationen wie das Überschreiben von Flash-Chip-Partitionen sind mit Risiken verbunden. Bewerte die Risiken und entscheide selbst, ob du es tun möchtest.
Der Beitrag von ZDI: https://www.zerodayinitiative.com/blog/2019/12/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-router-part-2 demonstrierte eine sehr interessante Schwachstelle, die ich wirklich gerne ausprobieren und etwas daraus lernen möchte.
Leider wurde die Firmware-Version (US) 0.9.1 4.16 v007c.0 Build 180613 Rel.42415n bereits von der US-Website entfernt und kann nicht mehr heruntergeladen werden.
Ich habe jedoch einige WR841N, die die Firmware-Version (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n ausführen, die älter ist als die von ZDI ausgenutzte, und dieselbe Schwachstelle besteht weiterhin.
Ich schätze, viele weitere Leute wären daran interessiert, diesen Exploit nachzuvollziehen, stehen aber vor demselben Problem: Sie können keinen funktionierenden WR841N finden, der eine verwundbare Version der Firmware ausführt.
Wenn du Hardware der Version TW, EU oder JP verwendest, ist es weiterhin möglich, eine ältere Firmware-Version als 180613 (das heißt, sie wurde am 2018/06/13 erstellt) herunterzuladen und deinen Router einfach herunterzustufen, indem du ihn mit alter Firmware von der offiziellen Website „upgradest“.
Obwohl ein Firmware-Downgrade möglich ist, prüft der WR841N die Firmware tatsächlich und akzeptiert keine Firmware, die für Hardware gedacht ist, die in anderen Ländern verkauft wird. Für Menschen, die in Ländern leben, in denen TP-Link keine verwundbare Firmware-Version auf ihrer Website bereitstellt (z. B. USA), ist es daher notwendig, die Prüfung im HTTP-Server zu umgehen und die verwundbare Firmware direkt in den Flash-Chip ihres Geräts zu schreiben. Genau dafür ist dieses Repo in erster Linie gedacht.
Ich habe außerdem statisches busybox und gdbserver cross-kompiliert, die auf dem WR841N funktionieren, für alle, die versuchen möchten, den Exploit zu debuggen und nachzubauen.
Bevor du versuchst, deine Flash-Partitionen zu überschreiben, solltest du die aktuellen sichern, damit du deinen Router wiederherstellen kannst, wenn du mit dieser verwundbaren Version fertig bist.
Ich gehe davon aus, dass du bereits mit der Verwendung der seriellen Konsole vertraut bist, daher überspringe ich den Hardware-Teil.
Richte auf dem Rechner deiner Wahl einen TFTP-Server ein.
In der WR841N-Konsole:
(Ersetze die IP-Adresse durch die deines TFTP-Servers)
~ # 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=
Die Flash-Partitionen des WR841N sind wie folgt:
dev: size erasesize name
mtd0: 00010000 00010000 "boot"
mtd1: 000f0000 00010000 "kernel"
mtd2: 002e0000 00010000 "rootfs"
mtd3: 00010000 00010000 "config"
mtd4: 00010000 00010000 "radio"
Die Hauptpartition, die du überschreiben musst, ist rootfs (mtd2), aber der Stabilität halber überschreiben wir auch boot und kernel.
Ich habe keine config- und radio-Partition bereitgestellt, da sie die Schwachstelle nicht beeinflussen und du sicherlich nicht mit den RF-Einstellungen herumspielen willst, um mögliche rechtliche Probleme zu vermeiden.
flashcp per TFTP auf den WR841N.In der WR841-Shell:
~ # cd /var
/var # tftp -g -r flashcp 192.168.0.100
/var # chmod +x flashcp
(Ersetze die IP-Adresse natürlich durch die deines Rechners, auf dem der TFTP-Server läuft.)
TW_wr841N_mtd0_boot_180516.bin auf den WR841N und überschreibe mit 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 auf den WR841N und überschreibe mit 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 auf den WR841N und überschreibe mit flashcp (Dies ist die größte Partition, daher wird flashcp einige Zeit brauchen, bis es fertig ist):/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 ist.
buildroot-2021.02.6 cross-kompiliert.