ADOBE ColdFusion Java RMI 反序列化 RCE 漏洞详情(CVE-2018-4939)

ADOBE ColdFusion Java RMI 反序列化 RCE 漏洞详情(CVE-2018-4939)
最新回答
傷丶如花美眷

2022-01-03 02:10:37

CVE-2018-4939漏洞详情

CVE-2018-4939是一个影响Adobe ColdFusion的Java RMI反序列化远程代码执行(RCE)漏洞。该漏洞允许攻击者通过向ColdFusion的Flex集成RMI服务发送恶意序列化对象来执行任意代码。

漏洞背景

  • RMI和Java序列化:Java远程方法调用(RMI)协议几乎100%使用Java序列化。当从RMI注册表服务请求一个对象并在该对象上调用方法时,通过网络传输的数据采用Java序列化格式。
  • ColdFusion的Flex集成RMI服务:该服务公开了coldfusion.flex.rmi.DataServicesCFProxy类的一个对象,该类可以在ColdFusion安装目录的“libs/cfusion.jar”文件中找到。

漏洞细节

  • 受影响的方法:DataServicesCFProxy接口中的方法(如count、fill、sync等)可以接受任何Java对象作为参数。由于这些方法不需要身份验证,攻击者可以通过网络访问该服务并提供任意Java对象,试图利用Java反序列化攻击。
  • 利用方式:攻击者可以使用ysoserial等工具生成恶意序列化对象,并通过RMI服务发送这些对象以触发反序列化漏洞。然而,标准的ysoserial payload可能无法直接利用,因为服务器端的类可能与payload不兼容。
  • 针对ROME库的利用:在ColdFusion中,ROME库(位于“libs/rome-cf.jar”)被用于反序列化攻击。攻击者需要重新构建ysoserial,使其针对ColdFusion捆绑的ROME库版本,以生成兼容的payload。

漏洞利用示例

以下是一个简单的RMI客户端程序示例,用于检索ColdFusion的DataServicesCFProxy对象并调用count方法:

package nb.barmie.demo;import coldfusion.flex.rmi.DataServicesCFProxy;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;public class CFRMIDemo { public static void main(String[] args) throws Exception { Registry reg = LocateRegistry.getRegistry(args[0], Integer.parseInt(args[1])); DataServicesCFProxy obj = (DataServicesCFProxy)reg.lookup("cfassembler/default"); obj.count(null, null, null); }}

在count方法的第二个参数(java.lang.Object数组)中,攻击者可以提供任意对象,这些对象将在服务器上反序列化。

BaRMIe工具

BaRMIe是一个RMI枚举和攻击工具,它实现了针对ColdFusion RMI服务的漏洞利用。该工具通过代理框架在RMI连接中实现中间人攻击,允许攻击者完全控制协议并操作Java虚拟机本来会阻止的操作。

漏洞修复

Adobe已经发布了安全更新(APSB18-14)来修复此漏洞。建议用户尽快更新到最新版本以避免潜在的安全风险。

总结

CVE-2018-4939是一个严重的Java RMI反序列化漏洞,影响Adobe ColdFusion的Flex集成服务。攻击者可以通过发送恶意序列化对象来利用此漏洞执行任意代码。由于该漏洞不需要身份验证,因此具有较高的风险。建议用户及时更新Adobe ColdFusion以修复此漏洞。