CVE-2020-36239 - Jira 多款产品RCE漏洞分析

2021 年 7 月 9 日上午 5:44 Jira 官方发布公告 《Jira 数据中心和 Jira 服务管理数据中心 - Ehcache RMI 缺少身份验证 - CVE-2020-36239(https://jira.atlassian.com/browse/JSDSERVER-8454)》, 该漏洞影响多个产品的多个版本,官方已给出修复方法。详细请关注 Jira 官网,将软件更新至安全版本: https://jira.atlassian.com/

前言

官方已给出修复方法。详细请关注 Jira 官网,将软件更新至安全版本: https://jira.atlassian.com/,文末有给出相应修复参考资料。

文章前部分是站点安装,如果不想看可以直接跳到 漏洞分析 部分。

2021 年 7 月 9 日上午 5:44 Jira 官方发布公告 《Jira 数据中心和 Jira 服务管理数据中心 - Ehcache RMI 缺少身份验证 - CVE-2020-36239》, 该漏洞影响多个产品的多个版本,

参考资料:

下载安装环境

这里以 Jira Data Center 8.15.1 作为例子。下载地址: https://www.atlassian.com/zh/software/jira/update, 下载好后解压出来

配置IDEA运行环境

在桌面(位置无所谓),新建一个 atlassian-jira (名字无所谓)文件夹,在 IDEA 中打开,右键根目录 Add Framework Suppport

设置成 Web Application项目, 让 IDEA 知道这是 Web 应用。

将下载的安装项目下的 atlassian-jira 文件夹内的所有文件复制到,当前项目的 web 目录下

设置 web/WEB-INF/classes/jira-application.propertiesjira.home下载的安装包中的atlassian-jira

点击右上角的 ADD CONFIGUATIONS.. 添加一个 Tomcat Server -> Local.

从 Jira 官网下载下来的安装包,是包含 Tomcat 的。或者说是他就是一个 Tomcat,只不过里面包括了 Jira 的项目源码, 添加一个 Tomcat Server 设置 Home 为安装包的目录即可

点击 Fix 修复,最后点击 OK/APPLY 应用设置就可以跑起来了

配置 Mysql

参考官方文档: https://confluence.atlassian.com/adminjiraserver071/connecting-jira-applications-to-mysql-802592179.html

添加/修改 Mysql 配置文件 如下:

[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=INNODB
character_set_server=utf8mb4
innodb_default_row_format=DYNAMIC
innodb_large_prefix=ON
innodb_file_format=Barracuda
innodb_log_file_size=2G

创建数据库

CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin;

需要 java 连接驱动,下载地址: https://downloads.mysql.com/archives/c-j/,我下载的是 5.1.21。下载好后放到 web/WEB-INF/lib 目录下,重新启动服务器

安装站点

由于官方文档是英文的所以我这里也设置成了英文。

选择 I'll set it up myself 下一步

选择 My Own Database (recommended for production environments) 配置数据库,点击下一步,这里会比较久,因为数据表挺多的。趁着这个时间先去官网创建一个账户,一会要用到。

这里直接默认就行

点击 generate a Jira trial license 生成试用许可证,需要登录 Jira 官网。

直接默认点击生成即可

生成成功后会提示是否跳转回站点,点击 YES,跳转会页面后会自动填充许可证,直接下一步

填写管理员信息后下一步, 下一步中的 Set up email notifications 中选择 Later (默认)直接下一步,后面都是一些可以直接下一步的了。

随机选一个就好。我随机建了一个示例项目。

到这,恭喜站点部署成功

漏洞分析

根据官方的描述该漏洞是因为: 暴露了一个 Ehcache RMI 网络服务,攻击者可以在端口 40001 和潜在的 40011 [0] [1] [2] 上连接到该服务,由于缺少身份验证漏洞,可以通过反序列化在 Jira 中执行他们选择的任意代码。

但我站点搭起来后并没有开启 40001 端口或 40011端口

配置集群

在翻阅了大量官方文档后发现:https://confluence.atlassian.com/adminjiraserver0815/installing-jira-data-center-1050546393.html, 需要将 Jira 配置成集群才会开启 40001 端口

在源安装项目目录中新建 cluster.properties,写入如下配置

# This ID must be unique across the cluster
jira.node.id = node1
# The location of the shared home directory for all Jira nodes
jira.shared.home = /home/jirasoftware-sharedhome

重启服务器后, 40001 和 40011 端口就开启了。

RMI 扫描

本来想用 RmiTaste 扫描的,但是不知道为什么没有任何结果。

突然想起了 Nmap 神器,扫了一下真有结果。

漏洞触发点

信息已经够多了,接下来去 net.sf.ehcache.distribution.RMICachePeer_Stub 找触发点, 官方通报中说是 Ehcache 暴露的 RMI 服务,所以实体类应该也在 Ehcache 包里。

如果不确定可以新开一个项目并将目标项目中的 classes 和所有涉及 jar 包的位置添加到项目 Libraries 中(点击 + 选择 java),该设置面板在 File -> Project Structure 中打开

添加好后用 Class.fornName 加载,因为使用 import 非公开(public 声明的)类是无法导入的。写好之后就可以跟进去了

发现绑定的 net.sf.ehcache.distribution.RMICachePeer_Stub 类中的 getQuiet 方法接收的参数是 Serializeable 对象。看来这是漏洞的触发点

net.sf.ehcache.distribution.RMICachePeer_Stub#getQuiet

漏洞验证

所有绑定的 name, 都是绑定 net.sf.ehcache.distribution.RMICachePeer_Stub, 所以随机选一个就可以了, 使用 URLDNS 验证了漏洞确实存在。

漏洞危害

接下来看看 Jira 是否用了存在利用链的包,Commons-Collection 都用了相对安全的版本,但是 Commons-Beanutils 1.9.4 存在利用链

直接可以使用 ysoserial 中的 CommonsBeanutils1 利用链就可以执行任意命令。

修复建议

官方通报中已给出修复方案: https://jira.atlassian.com/browse/JSDSERVER-8454,下面是官方通报中给出的修复版本

为了解决这些问题,我们发布了 Jira Data Center, Jira Core Data Center, and Jira Software Data Center:

  • 8.5.16 包含针对此问题的修复
  • 8.13.8 包含针对此问题的修复
  • 8.17.0 包含针对此问题的修复

Jira Service Management Data Center 版本:

  • 4.5.16 包含针对此问题的修复
  • 4.13.8 包含针对此问题的修复
  • 4.17.0 包含针对此问题的修复

这些版本可以在以下位置下载:

  • 发表于 2021-09-06 17:55:52
  • 阅读 ( 8338 )
  • 分类:漏洞分析

3 条评论

无糖
请问下,是在你图片展示的地方新增一个cluster.properties就可以了吗,为啥我不行
请先 登录 后评论
JOHNSON
在下载后解压出来的目录(自带tomcat的那个) 下的 atlassian-jira 文件夹下新建 cluster.properties
请先 登录 后评论
无糖
谢谢师傅,我之前是在Linux上搭,一直失败,40001端口始终不开放,昨晚按照你的步骤用windows搭,成功了
请先 登录 后评论
请先 登录 后评论
JOHNSON
JOHNSON

12 篇文章

站长统计