
Este repositorio contiene particiones flash extraídas con versión de firmware vulnerable a CVE-2019-17147, y algunos binarios útiles para degradar y depurar tu router WR841N.
Este repositorio contiene particiones flash volcadas con versión de firmware vulnerable a CVE-2019-17147, y algunos binarios útiles para degradar y depurar tu router WR841N(V14).
Realizar modificaciones de hardware, como sobrescribir particiones del chip flash, conlleva riesgos. Evalúa los riesgos y decide por ti mismo si deseas hacerlo o no.
La publicación de ZDI: https://www.zerodayinitiative.com/blog/2019/12/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-router-part-2 demostró una vulnerabilidad muy interesante que realmente me gustaría probar y aprender algo de ella.
Desafortunadamente, la versión de firmware (US) 0.9.1 4.16 v007c.0 Build 180613 Rel.42415n ya ha sido eliminada del sitio web de EE. UU. y ya no se puede descargar.
Sin embargo, tengo algunos WR841N que ejecutan la versión de firmware (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n, que es más antigua que la que ZDI explotó y la misma vulnerabilidad aún existe.
Supongo que muchas más personas estarían interesadas en reproducir este exploit pero se enfrentan al mismo problema: no pueden encontrar un WR841N funcional que ejecute una versión vulnerable del firmware.
Si estás utilizando hardware de las versiones TW, EU o JP, aún es posible descargar una versión de firmware anterior a 180613 (lo que significa que fue construida el 2018/06/13) y degradar tu router simplemente "actualizándolo" con firmware antiguo desde el sitio web oficial.
Aunque la degradación del firmware es posible, el WR841N verifica y no acepta firmware destinado a hardware vendido en diferentes países. Así que para aquellas personas que viven en países donde TP-Link no proporciona una versión vulnerable de firmware en su sitio web (por ejemplo, EE. UU.), necesitarán eludir la verificación en el servidor HTTP y escribir el firmware vulnerable directamente en el chip flash de su dispositivo. Para eso principalmente es este repositorio.
También he compilado de forma cruzada busybox y gdbserver estáticos que funcionan en WR841N para cualquiera que quiera intentar depurar y recrear el exploit.
Antes de intentar sobrescribir tus particiones flash, deberías hacer una copia de seguridad de las actuales para poder restaurar tu router después de terminar de jugar con esta versión vulnerable.
Asumo que ya estás familiarizado con el uso de la consola serie, así que omitiré la parte del hardware.
Configura un servidor tftp en la máquina que prefieras.
En la consola del WR841N:
(Reemplaza la dirección IP con la de tu 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=
Las particiones flash en WR841N son las siguientes:
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 partición principal que necesitas sobrescribir es rootfs (mtd2), pero por estabilidad también sobrescribiremos boot y kernel.
No he proporcionado las particiones config y radio porque no afectan la vulnerabilidad y ciertamente no quieres meterte con la configuración de RF para evitar posibles problemas legales.
flashcp al WR841N con tftp.En el shell del WR841N:
~ # cd /var
/var # tftp -g -r flashcp 192.168.0.100
/var # chmod +x flashcp
(Reemplaza la dirección IP con la de tu máquina que ejecuta el servidor tftp, por supuesto.)
TW_wr841N_mtd0_boot_180516.bin al WR841N y sobrescribe 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 al WR841N y sobrescribe 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 al WR841N y sobrescribe con flashcp (Esta es la partición más grande, por lo que flashcp tomará algo de tiempo en 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.