最后更新于2023年12月15日(星期五)18:30:08 GMT
2023年7月11日,Rapid7和Adobe 披露 cve - 2023 - 29298, 一个影响ColdFusion的访问控制绕过漏洞, Rapid7在2023年4月向Adobe报告的数据. 该漏洞允许攻击者绕过限制外部访问ColdFusion Administrator的产品功能. Rapid7和Adobe认为cve - 2023 - 29298在发布我们的 协调披露 (Rapid7在我们的披露中明确指出,我们没有测试Adobe发布的补丁).
在审查了ColdFusion 2021 Update 8中发现的cve - 2023 - 29298补丁后.0.08.330144), Rapid7发现,7月11日发布的补丁并不能成功修复原始问题,并且可以被攻击者绕过. Adobe 指定的cve - 2023 - 38205 并于2023年7月19日发布了完整的修复程序.
Rapid7已经在多个客户环境中观察到cve - 2023 - 29298漏洞的利用. 我们的团队 发表博客 并于7月17日对客户进行了观察和指导. 我们已经验证了 7月19日发布新补丁 完全修复这个问题.
受影响的产品
以下产品容易受到攻击 cve - 2023 - 38205:
- Adobe ColdFusion 2023 Update 2及更早版本
- Adobe ColdFusion 2021 Update 8及更早版本
- Adobe ColdFusion 2018 Update 18及更早版本
信贷
这个问题是由Stephen less发现的, Rapid7的首席安全研究员, 并按照规定予以披露 Rapid7的漏洞披露策略.
供应商声明
Adobe向Rapid7提供了以下声明:
Adobe建议将ColdFusion安装更新到最新版本. 请参阅 APSB23-47 了解更多信息. Adobe意识到cve - 2023 - 38205已经在针对Adobe ColdFusion的有限攻击中被利用."
分析
7月11日针对cve - 2023 - 29298的补丁修改了攻击方法 IPFilter跑龙套.checkAdminAccess
使用新的助手方法 跑龙套.canonicalizeURI
在执行访问控制之前将URL转换为规范形式,如下所示.
private static final String[] RESTRICTED_INTERNAL_PATHS = new String[] {"/restplay", “/ cfide / restplay”, “cfide /管理员”, “/ cfide / adminapi”, “cfide /主”, “/ cfide / componentutils”, “cfide /向导”, “/ cfide / servermanager”, “cfide /锁定”};
checkAdminAccess(HttpServletRequest)
字符串uri = 跑龙套.getServletPath(要求的);
uri = 跑龙套.canonicalizeURI (uri.toLowerCase()); // <----
for (String limittedpath: RESTRICTED_INTERNAL_PATHS) {
如果(uri.startsWith (restrictedPath)) {
字符串ip = req.getRemoteAddr ();
if (!isAllowedIP (ip))
抛出新的AdminAccessdeniedException.getSecurityService ().getAllowedAdminIPList()、ip);
打破;
}
}
}
方法跑龙套.canonicalizeURI尝试删除字符序列,比如重复的正斜杠, 双点表示法和冗余的点路径段在url路径, 如下所示.
公共静态字符串canonicalizeURI(字符串uri) {
If (uri == null || uri.长度()== 0
返回uri;
Uri = Uri.取代 ('\\', '/');
uri = trimduplicateslash (uri);
uri = collapseDotDots(uri); // <----
uri = trimTrailingDotsSpacesNull(uri);
如果(uri.charAt(0) ==.')
Uri = Uri.substring (1);
Uri = substitute(Uri, "/ ")./", "/");
如果(uri.endsWith (" /."))
Uri = Uri.substring (0, uri.长度()- 2);
如果(uri.长度()== 0
Uri = "/";
返回uri;
}
值得注意的是跑龙套方法.collapseDotDots, 哪个将删除所有包含双点的路径段以及前面的路径段. 例如,如果URL路径包含字符串“/hello/”../world/”则方法跑龙套.通过删除字符序列“/hello/”,collapseDotDots将正确地将此字符串转换为“/world/”..,通过调用StringBuffer.删除如下所示.
public static String collapseDotDots(String str) {
如果(str.indexOf (" /..") == -1)
返回str;
StringBuffer sb = new StringBuffer(str);
int我;
While ((i) = STR.indexOf (" /..")) != -1) {
int分段start = str.lastIndexOf('/', i - 1);
sb.delete(segmentStart, i + 3); // <----
某人.toString ();
}
如果(str.长度()== 0
STR = "/";
返回str;
}
该方法 跑龙套.canonicalizeURI
尝试删除字符序列,如重复的正斜杠, 双点表示法和冗余的点路径段在url路径, 如下所示.
公共静态字符串canonicalizeURI(字符串uri) {
If (uri == null || uri.长度()== 0
返回uri;
Uri = Uri.取代 ('\\', '/');
uri = trimduplicateslash (uri);
uri = collapseDotDots(uri); // <----
uri = trimTrailingDotsSpacesNull(uri);
如果(uri.charAt(0) ==.')
Uri = Uri.substring (1);
Uri = substitute(Uri, "/ ")./", "/");
如果(uri.endsWith (" /."))
Uri = Uri.substring (0, uri.长度()- 2);
如果(uri.长度()== 0
Uri = "/";
返回uri;
}
值得注意的是方法跑龙套.collapseDotDots”, 哪个将删除所有包含双点的路径段以及前面的路径段. 例如,如果URL路径有字符串' " /hello/../world/ " '然后方法' 跑龙套.通过删除字符序列“/hello/”,collapseDotDots '将正确地将此字符串转换为' " /world/ " '..' '通过调用' StringBuffer.删除',如下所示.
public static String collapseDotDots(String str) {
如果(str.indexOf (" /..") == -1)
返回str;
StringBuffer sb = new StringBuffer(str);
int我;
While ((i) = STR.indexOf (" /..")) != -1) {
int分段start = str.lastIndexOf('/', i - 1);
sb.delete(segmentStart, i + 3); // <----
某人.toString ();
}
如果(str.长度()== 0
STR = "/";
返回str;
}
而以上是正确的, 它暴露了ColdFusion在解析到端点的路径时如何处理ColdFusion模块(CFM)和ColdFusion组件(CFC)端点的问题. 如果攻击者访问的URL路径为 “/ hax /..CFIDE /术士/共同/跑龙套.氯氟化碳”
可以绕过访问控制,仍然可以到达预期的端点, 即使它不是一个有效的URL路径 (注意,在双点之后和CFIDE之前没有预期的正斜杠).
处理此路径后,方法 跑龙套.collapseDotDots
将转型之路引向 “cfide /向导/共同/跑龙套.氯氟化碳”
通过删除双点路径段和前面的段“/ hax /..”. 的路径 “cfide /向导/共同/跑龙套.氯氟化碳”
将不会与RESTRICTED_INTERNAL_PATHS中的任何受限路径匹配 IPFilter跑龙套.checkAdminAccess
因为它不再以正斜杠开头. 这绕过了访问控制. 但是,底层Servlet仍将处理该路径 “/ hax /..CFIDE /术士/共同/跑龙套.氯氟化碳”
,允许调用预期的CFC端点. CFM端点也是如此.
剥削
以下是在Adobe ColdFusion 2021 Update 8(2021 .)上进行的测试.0.08.330144)在Windows Server 2022上运行,并配置了生产和安全配置文件.
我们可以通过使用cURL命令来演示补丁绕过. 对象上执行远程方法调用时 / CFIDE向导/共同/跑龙套.氯氟化碳
端点, 可以使用以下cURL命令-注意使用双点表示法,如下所示:
注:与符号(&)已经用插入符号(^)转义,因为这个例子是从Windows运行的, 在Linux上,必须用正斜杠(\)转义与符号。.
c:\> curl -ivk --path-as-is http://172.25.25.0:8500 hax /..CFIDE /术士/共同/跑龙套.氯氟化碳?方法= wizardHash ^&inPassword = foo
我们可以看到cve - 2023 - 29298的访问控制和补丁都被绕过了,请求成功完成.
修复
Adobe于2023年7月19日发布了此漏洞的修复程序. 下面的版本修复了这个问题 Adobe的咨询:
- Adobe ColdFusion 2023更新
- Adobe ColdFusion 2021更新
- Adobe ColdFusion 2018更新19
自从Rapid7观察到在野外的开发, 我们强烈建议ColdFusion客户尽快更新到最新版本, 无需等待典型的补丁周期发生.
时间轴
- 4月11日至7月10日, 2023年:Rapid7向Adobe披露cve - 2023 - 29298, Rapid7和Adobe协调披露
- 2023年7月11日:Rapid7和Adobe 披露 cve - 2023 - 29298 公开
- 7月13日至15日, 2023年:Rapid7检测到Adobe ColdFusion在野外的利用, 确定攻击者正在利用以远程代码执行结束的漏洞利用链
- 2023年7月17日:Rapid7警告客户 ColdFusion剥削 在野外. Rapid7发现cve - 2023 - 29298的补丁可以绕过,并通知Adobe. Adobe通知Rapid7他们修复补丁绕过的意图.
- 2023年7月19日:这个 信息披露.