
このリポジトリには、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 は米国公式サイトからすでに削除されており、もはやダウンロードできません。
しかし、私は (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n というファームウェアバージョンを実行している WR841N をいくつか持っています。これは ZDI が悪用したものより古く、同じ脆弱性がまだ存在します。
このエクスプロイトの再現に興味を持つ人は他にもたくさんいると思いますが、脆弱なバージョンのファームウェアを実行している動作可能な WR841N を見つけられないという同じ問題に直面しています。
TW、EU、JP 版のハードウェアを使用している場合は、180613 より古いファームウェアバージョン(2018/06/13 にビルドされたもの)を公式サイトからダウンロードし、古いファームウェアで「アップグレード」するだけでルーターをダウングレードすることが可能です。
ファームウェアのダウングレードは可能ですが、WR841N は実際にはチェックを行い、異なる国で販売されているハードウェア向けのファームウェアを受け付けません。したがって、TP-Link が公式サイトで脆弱なバージョンのファームウェアを提供していない国(例: 米国)に住んでいる人々は、http サーバー内のチェックをバイパスし、脆弱なファームウェアをデバイスのフラッシュチップに直接書き込む必要があります。このリポジトリは主にそのためのものです。
また、WR841N で動作する静的 busybox と gdbserver をクロスコンパイルしました。エクスプロイトのデバッグと再現を試みたい方のために用意しています。
フラッシュパーティションを上書きする前に、現在のパーティションをバックアップしておくことをお勧めします。この脆弱なバージョンで作業を終えた後にルーターを復元できるようにするためです。
シリアルコンソールの使用方法についてはすでに熟知している前提で、ハードウェア部分は省略します。
任意のマシンに 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 を tftp で WR841N に転送します。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 を使用して私自身がクロスコンパイルしたものです。