
Este repositório contém partições de flash despejadas com versão de firmware vulnerável ao CVE-2019-17147, e alguns binários úteis para fazer downgrade e depurar seu roteador WR841N.
Este repositório contém partições flash extraídas com uma versão de firmware vulnerável à CVE-2019-17147, além de binários úteis para fazer downgrade e depurar seu roteador WR841N(V14).
Fazer modificações de hardware, como sobrescrever partições do chip flash, traz riscos. Avalie os riscos e decida por si mesmo se deseja fazê-lo ou não.
O artigo da ZDI: https://www.zerodayinitiative.com/blog/2019/12/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-router-part-2 demonstrou uma vulnerabilidade muito interessante que eu realmente gostaria de testar e aprender algo com ela.
Infelizmente, a versão do firmware (US) 0.9.1 4.16 v007c.0 Build 180613 Rel.42415n já foi removida do site americano e não pode mais ser baixada.
No entanto, tenho alguns WR841N rodando a versão de firmware (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n, que é mais antiga que a explorada pela ZDI e a mesma vulnerabilidade ainda existe.
Acho que muitas outras pessoas gostariam de reproduzir este exploit, mas enfrentam o mesmo problema: não conseguem encontrar um WR841N funcional rodando uma versão vulnerável do firmware.
Se você estiver usando hardware das versões TW, EU ou JP, ainda é possível baixar versões de firmware anteriores a 180613 (ou seja, construídas em 2018/06/13) e fazer downgrade do seu roteador apenas "atualizando-o" com firmware antigo do site oficial.
Embora o downgrade de firmware seja possível, o WR841N verifica e não aceita firmware destinado a hardware vendido em países diferentes. Portanto, para aqueles que moram em países onde a TP-Link não fornece versões vulneráveis do firmware em seu site (por exemplo, EUA), será necessário contornar a verificação no servidor HTTP e gravar o firmware vulnerável diretamente no chip flash do dispositivo. É para isso que este repositório serve principalmente.
Também compilei de forma estática o busybox e o gdbserver que funcionam no WR841N para quem quiser tentar depurar e recriar o exploit.
Antes de tentar sobrescrever suas partições flash, você deve fazer backup das atuais para poder restaurar seu roteador depois de terminar de brincar com esta versão vulnerável.
Presumo que você já esteja familiarizado com o uso do console serial, então pularei a parte de hardware.
Configure um servidor tftp na máquina de sua escolha.
No console do WR841N:
(Substitua o endereço IP pelo do seu servidor 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=
As partições flash no WR841N são as seguintes:
dev: size erasesize name
mtd0: 00010000 00010000 "boot"
mtd1: 000f0000 00010000 "kernel"
mtd2: 002e0000 00010000 "rootfs"
mtd3: 00010000 00010000 "config"
mtd4: 00010000 00010000 "radio"
A partição principal que você precisa sobrescrever é rootfs (mtd2), mas por questão de estabilidade, também sobrescreveremos boot e kernel.
Não forneci as partições config e radio porque elas não afetam a vulnerabilidade e você certamente não quer mexer nas configurações de RF para evitar possíveis problemas legais.
flashcp para o WR841N via tftp.No shell do WR841N:
~ # cd /var
/var # tftp -g -r flashcp 192.168.0.100
/var # chmod +x flashcp
(Substitua o endereço IP pela sua máquina que está executando o servidor tftp, obviamente.)
TW_wr841N_mtd0_boot_180516.bin para o WR841N e sobrescreva com 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 para o WR841N e sobrescreva com 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 para o WR841N e sobrescreva com flashcp (Esta é a maior partição, então o flashcp levará algum tempo para terminar):/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.