Adobe ColdFusion任意文件读取漏洞CVE-2024-20767分析
过年的时候挖的,目前已经发布修复补丁。
CVE: CVE-2024-20767
Ref: https://helpx.adobe.com/security/products/coldfusion/apsb24-14.html
/CFIDE/adminapi/_servermanager/servermanager.cfc其实是一个多个字节码文件合在一起的文件,所以可以用CAFEBABE将其分割为多个字节码文件。
其中有一个getHeartBeat类继承了UDFMethod,并且getAccess方法返回3,这是能够未授权访问的关键。
web.xml里面定义了.cfc后缀的路由,具体的流程不再分析,主要是在ComponentFilter类里面,大概就是解析这个cfc文件为字节码文件,然后可以指定不同的method来调用不同类的runFunction方法。
在调用之前会检查一遍权限,可以看到如果从字节码中解析出来的access为3的话就不会进行任何拦截,刚好上面的getHeartBeat类的access就为3,这就造成了未授权访问。
可以看到getHeartBeat类中runFunction方法里面的代码,调用了MonitoringService的getHeartBeat方法,事实上就是调用了继承了coldfusion.server.MonitoringService接口的类coldfusion.monitor.module.MonitoringServiceImpl的getHeartBeat方法,但很奇葩的是这个方法居然把coldfusion.monitor.Configuration的UUID给输出出来了。
这个UUID有什么用呢,PMSGenericServlet这个servlet里面用到了。
可以看到如果需要访问这个servlet需要验证头部中的uuid是否和枚举类Configuration中的 UUID一致,通过上面拿到的UUID就可以访问到这个servlet
这个servlet里面危害稍微大一点的就是当module为logging时候的任意文件读取:
或者为heap_dump时候可以下载heapdump
有意思的是这里username参数可控,filename可以被00截断,不过目前没有想到当heapdump的文件位置和文件名完全可控的时候rce的姿势。
留图纪念