您的需求已经提交,我们将在48小时内联系您
全国服务热线:400-1000-221
确定
免费享受企业级云安全服务
获取手机验证码
{{message}}
免费试用

CVE-2020-7799:FreeMarker模板FusionAuth RCE复现

作者:
发布时间:2020-10-19
0x01 简介
 
FusionAuth是一个免费的身份管理平台,安装简单,易于集成。FusionAuth提供登录、注册、MFA、SSO、电子邮件模板、本地化、密码控制、强哈希、网络挂钩、基于角色的访问控制等功能

 

0x02 漏洞概述
 
一个有修改 email 或者 theme 模板权限的用户可以通过使用 Apache FreeMarker engine 里的 freemarker.template.utility.Execute 来执行任意命令。

 

因为使用了Apache FreeMarker engine(freemarker-2.3.28.jar), 所以可以使用 freemarker 的语法, 类似 ${XXX? Built-ins} 而 new 这个 Built-ins 会 创建一个特定 TemplateModel 的 变量。

 

要求?左边是TemplateModel,也就是 freemarker.template.utility.Execute, 而右边就是 initialize 这个 object 时的参数。

 
0x03 影响版本
 
FusionAuth <= 1.11.0
 
0x04 环境搭建
 

下载 FusionAuth 1.10.0(本次使用 FusionAuth 1.10.0 进行测试)

https://storage.googleapis.com/inversoft_products_j098230498/products/fusionauth/1.10.0/fusionauth-app-1.10.0.zip

 

  1. 将文件解压之后随便放一个位置

  2. 启动 MySQL /etc/init.d/mysql start

  3. 启动 ElasticSearch systemctl start elasticsearch.service

  4. 启动 FusionAuth bin/startup.sh

  5. 打开网址http://127.0.0.1:9011/配置 FusionAuth

 

    1. 先配置数据库


       

    2. 配置 Elastic Search


       

    3. 创建好用户之后就可以登录了

       

 
0x05 漏洞复现
 
本次使用 email template 进行测试
 
  1. 进入 setting -> email template


     

  2. 随便点一个 template 的 edit

     

     

  3. 开启 Burp Suit 抓包, 配置好 proxy


     

  4. 点击 Preview, 然后去 Burp Suit 看抓包



     

  5. 修改

    emailTemplate.defaultHtmlTemplate

    ${"freemarker.template.utility.Execute"?new()("whoami")}

     

  6. forward 之后看结果


 
0x06 修复方式
 
值得一提的是 freemarker 2.3.19 的 changelog 里显示,如果用户开启了 TemplateClassResolver.SAFER_RESOLVER 的话, 可以防止创建 freemarker.template.utility.Execute. 然而目前这并不是默认配置。
 
FusionAuth Version 1.11.0 的 release Note 里说是修改了 freemarker template engine, 使其不能执行恶意代码. 所以修复方式就是升级到1.11.0 及以后的版本。

 

参考链接:

https://www.anquanke.com/post/id/198036

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7799

标签: