Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
asus-cmd — ASUS Router infosvr UDPブロードキャスト rootコマンド実行 | Kitploit
ツール/GitHubGitHub/jduck/asus-cmd
組み込みシステムセキュリティIoTセキュリティ脆弱性分析エクスプロイトネットワークセキュリティペネトレーションテストハードウェアとIoTセキュリティ
GitHubjduck/asus-cmd

asus-cmd

ASUS Router infosvr UDPブロードキャスト rootコマンド実行

リポジトリを見る
2523511年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

ASUSルーター infosvr UDPブロードキャスト rootコマンド実行

ASUSのルーターのいくつかのモデルには、LANまたはWLANインターフェース上のUDPブロードキャストポート9999で待ち受けるinfosvrと呼ばれるサービスが含まれています。これは、ローカルサブネット上のルーターを自動的に見つけることでルーターの設定を容易にするために、ASUSのツールの1つによって使用されます。このサービスはroot権限で実行され、認証なしのコマンド実行の脆弱性を含んでいます。このサービスのソースコードは、ルーターの他の部分と同様に、ASUSのサポートサイトから入手できます。

CVE

この問題に割り当てられたCVEはCVE-2014-9583です(あいにく、結局CVE-2014-10000ではありません :-/)。

影響を受けるバージョン

現在、該当するルーター(RT-AC66U、RT-N66Uなど)のすべての既知のファームウェアバージョンが脆弱であると推定されています。テストは3.0.0.376.2524-g0013f52に対して実施されました。

以下のルーター/ファームウェアバージョンが脆弱であると確認されています:

ルーターファームウェアバージョン確認者
RT-N66U3.0.0.4.376_1071-g8696125Friedrich Postelstorfer
RT-AC87U3.0.0.4.378_3754David Longenecker
RT-N56U3.0.0.4.374_5656@argilo
RT-AC68U3.0.0.4.376_3626-g9a8323e@Arie
DSL-N55U3.0.0.4.374_4422-gc83c78f@S2-
DSL-AC68U3.0.0.4.376_2158-g340202b@magJ, @gitFurious
RT-AC66R3.0.0.4.376_2524-g0013f52@asgh
RT-AC66R3.0.0.4.376_3602@facerolling
RT-AC55U3.0.0.4.376_6587-gaa506e9@pellaeon
RT-N12HP_B13.0.0.4.374_1327@vittee
RT-N163.0.0.4.220@xorrbit

さらに、コミュニティ支援のasuswrt-merlinに基づくファームウェアを実行しているルーターは、バージョン376.49_5より前では脆弱です。

2015年1月12日以降にリリースされたファームウェアリビジョンを使用するルーターは影響を受けないはずです。次の表は、影響を受けないルーター/ファームウェアの報告をまとめたものです。

ルーターファームウェアバージョン確認者
RT-AC66R3.0.0.4.376_3754-g5ef7c1f@asgh
RT-N12HP_B13.0.0.4.376_3754-g5ef7c1f@vittee

技術的詳細

ASUSのコードの拡張フォークであるASUSWRT-Merlinプロジェクトからの以下の抜粋を検討してください。ファイル全体(さらなる笑いのために推奨)はここで閲覧できます。

root@kitploit:~
   177  char *processPacket(int sockfd, char *pdubuf)
   178  {
   ...
   202      phdr = (IBOX_COMM_PKT_HDR *)pdubuf;
   ...
   207      if (phdr->ServiceID==NET_SERVICE_ID_IBOX_INFO &&
   208          phdr->PacketType==NET_PACKET_TYPE_CMD)
   209      {
   ...

processPacket関数は、INFO_PDU_LENGTH(512)バイトのパケットを受信した後に呼び出されます。脆弱なコードパスは具体的にはmain->processReq->processPacketです。サービスはパケットを構造体にキャストし、ServiceIDとPacketTypeフィールドが期待される値と一致するかどうかをチェックします。

次のブロックは、この脆弱性の根本原因であると考えられるものを含んでいます。

root@kitploit:~
   222          if (phdr->OpCode!=NET_CMD_ID_GETINFO && phdr->OpCode!=NET_CMD_ID_GETINFO_MANU)
   223          {
   224                  phdr_ex = (IBOX_COMM_PKT_HDR_EX *)pdubuf;       
   225                  
   226                  // Check Mac Address
   227                  if (memcpy(phdr_ex->MacAddress, mac, 6)==0)
   228                  {
   229                          _dprintf("Mac Error %2x%2x%2x%2x%2x%2x\n",
   230                                  (unsigned char)phdr_ex->MacAddress[0],
   231                                  (unsigned char)phdr_ex->MacAddress[1],
   232                                  (unsigned char)phdr_ex->MacAddress[2],
   233                                  (unsigned char)phdr_ex->MacAddress[3],
   234                                  (unsigned char)phdr_ex->MacAddress[4],
   235                                  (unsigned char)phdr_ex->MacAddress[5]
   236                                  );
   237                          return NULL;
   238                  }
   239                  
   240                  // Check Password
   241                  //if (strcmp(phdr_ex->Password, "admin")!=0)
   242                  //{
   243                  //      phdr_res->OpCode = phdr->OpCode | NET_RES_ERR_PASSWORD;
   244                  //      _dprintf("Password Error %s\n", phdr_ex->Password);     
   245                  //      return NULL;
   246                  //}
   247                  phdr_res->Info = phdr_ex->Info;
   248                  memcpy(phdr_res->MacAddress, phdr_ex->MacAddress, 6);
   249          }

このブロックは、設計上認証を必要としないと思われるいくつかのOpCode値を除外することから始まります。次に、memcpyを呼び出し、戻り値をゼロと比較しているのが不審です。これは、作者が代わりにmemcmpを使用するつもりだったことを強く示しています。とはいえ、このチェックが適切に実装されていたとしても、デバイスのMACアドレスを知っていることは認証として十分とは言えません。

次のブロックはコメントアウトされていますが、作者がかつてパスワードチェックを試していたことを示しています。ただし、この場合、パスワードは"admin"としてハードコードされていました。

続いて、次のswitch文は、指定されたOpCodeに基づいて処理を振り分けます。

root@kitploit:~
   251          switch(phdr->OpCode)
   252          {
   ...
   428                  case NET_CMD_ID_MANU_CMD:
   429                  {
   430                       #define MAXSYSCMD 256
   431                       char cmdstr[MAXSYSCMD];
   432                       PKT_SYSCMD *syscmd;
   ...
   440                       syscmd = (PKT_SYSCMD *)(pdubuf+sizeof(IBOX_COMM_PKT_HDR_EX));
   ...
   443                       if (syscmd->len>=MAXSYSCMD) syscmd->len=MAXSYSCMD;
   444                       syscmd->cmd[syscmd->len]=0;
   445                       syscmd->len=strlen(syscmd->cmd);
   446                       fprintf(stderr,"system cmd: %d %s\n", syscmd->len, syscmd->cmd);
   447  #if 0
   ...
   512  #endif
   513                       {
   514                          sprintf(cmdstr, "%s > /tmp/syscmd.out", syscmd->cmd);
   515                          system(cmdstr);

攻撃者がNET_CMD_ID_MANU_CMDのOpCode値を指定した場合、前述のブロックはパケットをPKT_SYSCMD構造体にキャストして処理します。そのため、syscmdのすべてのメンバーは攻撃者によって完全に制御されます。コマンド文字列をNUL終了するために注意を払う(ウインク)前に、作者は514行目でコマンドを実行します。コマンドの実行後、出力は一時ファイルから読み取られ、開始パケットの送信元アドレスに送り返されます。

推奨事項

エンドユーザー: ファームウェアをリビジョン3.0.0.4.376.3754以降に更新してください。ルーターの「アップデートを確認」機能が正しく動作しない場合があることに注意することが重要です。実行中のファームウェアのバージョンを手動で確認し、古い場合は新しいファームウェアをダウンロード/インストールしてください。

ASUS/Merlin: このサービスからリモートコマンド実行機能を削除してください。強力な認証で保護されていたとしても、パスワードをローカルネットワーク全体にブロードキャストすることは望ましいものではありません。コマンド実行が本当に必要な場合は、SSHまたは同様の安全なメカニズムを介して提供されるべきです。

回避策

David Longeneckerは、起動時にinfosvrプロセスを強制終了するために、script_usbmount nvram設定と組み合わせてスクリプト(JFFS)を使用することを推奨しています。詳細については彼のブログ記事を参照してください。

Eric Sauvageau(@RMerl)は、ポート9999をファイアウォールで遮断することを推奨しています。詳細については、Small Net Builderフォーラムの彼の投稿を参照してください。

あるいは、起動のたびにプロセスを強制終了してinfosvrサービスを無効にしてください。さらなる楽しみ/皮肉として、エクスプロイトを使用してこれを実行します:

root@kitploit:~
$ ./asus-cmd "killall -9 infosvr"
[...]

注:このコマンドには応答が返ってきません。繰り返しますが、これはデバイスが再起動するたびに実行する必要があります。

リリースされた修正

この問題の最初の開示後、複数の関係者がそれぞれのコードベースでこの問題に対処しました。

2015/01/08 - Eric Sauvageauはasuswrt-merlinコードベースでこの問題を修正しました。修正を組み込んだ最初のリリースは376.49_5です。彼の変更はここ、ここ、およびここで確認できます。 2015/01/12 - ASUSは影響を受けるデバイス向けの新しいファームウェアリビジョン(3.0.0.4.376.3754)をリリースしました。これは脆弱ではないと報告されています。

ASUSは、指定されたコマンドを実行する前にateCommand_flag nvram変数が1に設定されるようにすることで問題に対処しました。この変数は通常のビルドでは設定されません。

root@kitploit:~
loc_404958:
la      $v0, 0x400000
addiu   $a0, $v0, (aAtecommand_fla - 0x400000)  # "ateCommand_flag"
la      $v0, 0x400000
addiu   $a1, $v0, (g_ascONE - 0x400000)  # "1"
la      $v0, 0x400000
addiu   $t9, $v0, (check_nvram - 0x400000)
jalr    $t9 ; check_nvram
nop
lw      $gp, 0x290+var_270($fp)
bnez    $v0, lbl_execute_command
nop
sw      $zero, 0x290+var_14($fp)
b       lbl_return_zero

エクスプロイト

このアドバイザリが置かれているリポジトリには、この問題に対する動作するエクスプロイトが含まれています。

エクスプロイト出力例:

root@kitploit:~
$ ./asus-cmd "nvram show | grep -E '(firmver|buildno|extendno)'"
[*] sent command: nvram show | grep -E '(firmver|buildno|extendno)'
[!] received 512 bytes from 10.0.0.2:37625
    0c 15 0033 54ab7bc4 41:41:41:41:41:41
    0031 nvram show | grep -E '(firmver|buildno|extendno)'
[!] received 512 bytes from 10.0.0.1:9999
    0c 16 0033 54ab7bc4 xx:xx:xx:xx:xx:xx
    004e buildno=376
extendno_org=2524-g0013f52
extendno=2524-g0013f52
firmver=3.0.0.4

その他のリンク

"ASUSWRT 3.0.0.4.376_1071 - LANバックドアコマンド実行"
(これが私の公開のきっかけとなりました。彼のエクスプロイトはothers/ディレクトリにもミラーされています)
http://www.exploit-db.com/exploits/35688/

"セキュリティ:LAN側のセキュリティホール - 緩和策"
http://forums.smallnetbuilder.com/showthread.php?t=21774

"ASUSルーターをお持ちですか?ネットワーク上の誰かがおそらくそれをハッキングできます"
http://arstechnica.com/security/2015/01/got-an-asus-router-someone-on-your-network-can-probably-hack-it/

"ASUSのバグにより、ローカルネットワーク上のユーザーがワイヤレスルーターを乗っ取れる"
http://dnlongen.blogspot.com/2015/01/asus-bug-lets-those-on-your-local.html

"エクスプロイトにより、ローカルネットワークからASUSルーターをハッキング可能に"
http://www.itworld.com/article/2867255/exploit-allows-asus-routers-to-be-hacked-from-local-network.html

"ASUSワイヤレスルーターはネットワーク内の誰でも悪用できる"
http://it.slashdot.org/story/15/01/09/1349229/asus-wireless-routers-can-be-exploited-by-anyone-inside-the-network

"ほとんどのASUSルーターが乗っ取りバグの影響を受け、エクスプロイトが公開される" http://www.zdnet.com/article/asus-routers-vulnerable-to-network-attack-exploit-published/

"rootコマンド実行の欠陥がASUSルーターを悩ませる" http://threatpost.com/root-command-execution-flaw-haunts-asus-routers/110276

ツールをダウンロード