
Questo repository contiene partizioni flash estratte con versione del firmware vulnerabile a CVE-2019-17147 e alcuni binari utili per eseguire il downgrade e il debug del tuo router WR841N.
Questa repo contiene partizioni flash estratte con versione del firmware vulnerabile a CVE-2019-17147 e alcuni binari utili per fare il downgrade e il debug del tuo router WR841N(V14).
Effettuare modifiche hardware come sovrascrivere le partizioni del chip flash comporta dei rischi. Valuta i rischi e decidi tu stesso se vuoi farlo o meno.
Il post di ZDI: https://www.zerodayinitiative.com/blog/2019/12/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-router-part-2 ha dimostrato una vulnerabilità molto interessante che volevo davvero provare e da cui imparare qualcosa.
Purtroppo la versione del firmware (US) 0.9.1 4.16 v007c.0 Build 180613 Rel.42415n è già stata rimossa dal sito statunitense e non può più essere scaricata.
Tuttavia ho alcuni WR841N che eseguono la versione del firmware (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n, più vecchia di quella sfruttata da ZDI e in cui la stessa vulnerabilità esiste ancora.
Immagino che molte altre persone sarebbero interessate a riprodurre questo exploit ma si trovano ad affrontare lo stesso problema: non riescono a trovare un WR841N funzionante che esegua una versione vulnerabile del firmware.
Se stai usando hardware della versione TW, EU o JP, è ancora possibile scaricare una versione del firmware precedente alla 180613 (cioè costruita il 2018/06/13) e fare il downgrade del router semplicemente "aggiornandolo" con il vecchio firmware dal sito ufficiale.
Sebbene il downgrade del firmware sia possibile, il WR841N in realtà controlla e non accetta firmware destinato a hardware venduto in paesi diversi. Quindi per chi vive in paesi in cui TP-Link non fornisce la versione vulnerabile del firmware sul proprio sito (ad esempio, gli Stati Uniti), sarà necessario bypassare il controllo nel server http e scrivere il firmware vulnerabile direttamente nel chip flash del proprio dispositivo. È principalmente a questo che serve questa repo.
Ho anche compilato in cross-compilation busybox e gdbserver statici che funzionano sul WR841N per chiunque voglia provare a fare debug e ricreare l'exploit.
Prima di tentare di sovrascrivere le partizioni flash, dovresti eseguire il backup di quelle correnti, così da poter ripristinare il router dopo aver finito di giocare con questa versione vulnerabile.
Presumo che tu abbia già familiarità con l'uso della console seriale, quindi salterò la parte hardware.
Configura un server tftp sulla macchina che preferisci.
Nella console del WR841N:
(Sostituisci l'indirizzo IP con quello del tuo server 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=
Le partizioni flash del WR841N sono le seguenti:
dev: size erasesize name
mtd0: 00010000 00010000 "boot"
mtd1: 000f0000 00010000 "kernel"
mtd2: 002e0000 00010000 "rootfs"
mtd3: 00010000 00010000 "config"
mtd4: 00010000 00010000 "radio"
La partizione principale da sovrascrivere è rootfs (mtd2), ma per motivi di stabilità sovrascriveremo anche boot e kernel.
Non ho fornito le partizioni config e radio perché non influenzano la vulnerabilità e sicuramente non vuoi toccare le impostazioni RF per evitare potenziali problemi legali.
flashcp nel WR841N con tftp.Nella shell del WR841:
/var # tftp -g -r flashcp 192.168.0.100
/var # chmod +x flashcp
(Ovviamente, sostituisci l'indirizzo IP con quello della tua macchina che esegue il server tftp.)
TW_wr841N_mtd0_boot_180516.bin nel WR841N e sovrascrivi con 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 nel WR841N e sovrascrivi con 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 nel WR841N e sovrascrivi con flashcp (Questa è la partizione più grande, quindi flashcp impiegherà un po' di tempo per finire):/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.