2016年11月22日,Apache官方安全团队发布了关于Apache Tomcat存在远程代码执行漏洞的公告。该漏洞与Oracle之前修复的mxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)相关,是由于使用了JmxRemoteLifecycleListener功能导致。
漏洞详情见下文。
漏洞编号
CVE-2016-8735
漏洞描述
该漏洞的诱因存在于Oracle已经修复的JmxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)。因为Tomcat也使用了JmxRemoteLifecycleListener监听功能,但并没有及时升级,导致该远程代码执行漏洞。
漏洞危害
黑客通过利用漏洞可以实现远程命令执行,严重情况下可能会导致业务中断或数据泄露。
漏洞利用条件
需要外部开启JmxRemoteLifecycleListener监听端口,实现远程利用。
漏洞影响范围
- 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
漏洞测试方案
您可以使用以下方式检测该漏洞:
人工检查是否开启了10001和10002端口服务并发布在互联网上。
检查Tomcat是否启用了JmxRemoteLifecycleListener功能。
检查server.xml文件是否包含以下内容:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
注意:不推荐使用PoC测试方式。
漏洞修复建议(或缓解措施)
紧急措施:关闭JmxRemoteLifecycleListener功能,或者是对jmx JmxRemoteLifecycleListener远程端口进行网络访问控制。同时,增加严格的认证方式。
推荐方案:官方已经发布了版本更新,建议您升级到最新版本。
- Apache Tomcat 9.0.0.M13或更新版本(Apache Tomcat 9.0.0.M12也修复了此漏洞,但并未发布)
- Apache Tomcat 8.5.8或更新版本(Apache Tomcat 8.5.7也修复了此漏洞,但并未发布)
- Apache Tomcat 8.0.39或更新版本
- Apache Tomcat 7.0.73或更新版本
- Apache Tomcat 6.0.48或更新版本
情报来源
[1]. http://seclists.org/oss-sec/2016/q4/502
[2]. http://engineering.pivotal.io/post/java-deserialization-jmx/
[3]. http://svn.apache.org/viewvc?view=revision&revision=1767644http://tomcat.apache.org/security-9.html
[4]. http://tomcat.apache.org/security-8.html
[5]. http://tomcat.apache.org/security-7.html
[6]. http://tomcat.apache.org/security-6.html