adobe coldfusion CVE-2023-29300补丁绕过
前言
大学生闲来无事在家于是打开电脑看了看coldfusion代码
正片
根据之前官方的补丁代码:
private void validateWddxFilter(AttributeList atts) throws InvalidWddxPacketException {
String attributeType = atts.getValue("type");
if (attributeType.endsWith(";")) {
attributeType = attributeType.replace(";", "");
}
if (attributeType.startsWith("L")) {
String attributeTypeCopy = attributeType;
validateBlockedClass(attributeTypeCopy.replaceFirst("L", ""));
}
validateBlockedClass(attributeType);
}
private void validateBlockedClass(String attributeType) throws InvalidWddxPacketException {
if (attributeType != null && !attributeType.toLowerCase().startsWith("coldfusion") && !attributeType.equalsIgnoreCase(StructTypes.ORDERED.getValue()) && !attributeType.equalsIgnoreCase(StructTypes.CASESENSITIVE.getValue()) && !attributeType.equalsIgnoreCase(StructTypes.ORDEREDCASESENSITIVE.getValue()) && WddxFilter.invoke(attributeType)) {
throw new InvalidWddxPacketException();
}
}
可以看到如果反序列化的类名以coldfusion开头的话还是可以正常反序列化,那么我们就去找类名以coldfusion开头的类,且有一个可以造成rce/jdbc/jndi的setter方法。
包名为coldfusion开头的类基本都在/cfusion/lib/cfusion.jar的jar里面
这里根据经验去找了找打jdbc反序列化的点,找到了coldfusion.sql.DatabaseMetaDataUtil#setSqlImpl(SqlImpl)
方法,跟进getCatalogs方法
继续跟进,发现ConnectionSource是一个抽象类,有三个继承的子类
直接进入jdbc子类
使用安装包而不是zip安装的coldfusion自带derby的数据库驱动,那么打derby的反序列化就可以,coldfusion2023 jdk版本是17,目前还没找到办法rce,2021 jdk版本是11 所以直接打cb链templateimpl执行字节码就行
poc就不放了,打derby反序列化参考https://github.com/su18/JDBC-Attack/tree/main/derby-attack 放一个图结束。
没想到在官网直接下载的coldfusion2023版本没有打上补丁,打上补丁之后发现官网已经发布了补丁并且有cve了
https://helpx.adobe.com/security/products/coldfusion/apsb23-52.html
https://helpx.adobe.com/coldfusion/kb/coldfusion-2023-update-6.html