一、漏洞名称:
FusionAuth存在Freemarker模板注入导致远程命令执行
二、漏洞编号:
CVE-2020-7477
三、漏洞描述:
在FusionAuth 1.11.0之前版本存在注入漏洞,经过身份验证的用户被允许编辑电子邮件模板或主题, 远程攻击者可利用该漏洞调用在系统上执行任意命令。
四、影响版本:
FusionAuth <= 1.11.0
五、漏洞分析
通过对直接编辑freemarker模板,调用freemarker.template.utility.Execute在服务器上执行任意命令
六、实验环境及准备:
使用docker环境进行一键部署,参考官方文档
docker-compose配置
-
docker-compose.yml
文件:将官方文档中的docker-compose.yml
和docker-compose-override.yml
文件中内容合并,改下fusionauth版本。
-
env文件内容使用官方文档中即可,将两个文件放到同一个目录下
docker-compose up -d
自动部署环境
访问IP:9011
,配置数据库和ElasticSearch连接
这边提交会报错,但是无所谓不影响复现漏洞
至此环境搭建完成
坑:这个版本的fusionauth每次重启就挂了,不知道什么原因,每次都是还原镜像再重新搭建一遍,真半天搭环境,复现两分钟。。。
七、复现步骤:
进入 setting -> email template,随便找一个进行编辑
抓包在emailTemplate.defaultHtmlTemplate参数中添加payload
这还是个自带回显的。。。
八、防御方案:
升级版本至1.11.0 及以后:单纯针对fusionauth的话,当然是升级系统,但是问题的根源在于freemarker的不安全使用
安全配置freemarker:
- Freemarker 提供了三种模板引擎(TemplateClassResolver)的注册方式:
1. UNRESTRICTED_RESOLVER:简单的调用ClassUtil.forName(String)。
2. SAFER_RESOLVER:和第一个类似,但禁止解析ObjectConstructor,Execute和freemarker.template.utility.JythonRuntime。
3. ALLOWS_NOTHIND_RESOLVER:禁止解析任何类
- 默认不启用内置api(?api)
参考链接:https://ackcent.com/in-depth-freemarker-template-injection/