频道栏目
首页 > 安全 > 网络安全 > 正文

Jackson框架Java反序列化远程代码执行漏洞技术分析与防护方案

2017-04-21 09:57:06           
收藏   我要投稿

Jackson框架Java反序列化远程代码执行漏洞技术分析与防护方案。北京时间4月15日,Jackson框架被发现存在一个反序列化代码执行漏洞。该漏洞存在于Jackson框架下的enableDefaultTyping方法,通过该漏洞,攻击者可以远程在服务器主机上越权执行任意代码,从而取得该网站服务器的控制权。

Jackson是一个开源的Java序列化与反序列化工具,可以将java对象序列化为xml或json格式的字符串,或者反序列化回对应的对象,由于其使用简单,速度较快,且不依靠除JDK外的其他库,被众多用户所使用。Jackson官方已经发布补丁修复了该开源组件

漏洞分析

漏洞简介

Jackson框架enableDefaultTyping方法存在Java反序列化代码执行漏洞,攻击者利用漏洞可在服务器主机上执行任意代码或系统指令,取得网站服务器的控制权。目前,供应商发布了安全公告及相关补丁信息,修复了此漏洞。

漏洞分析

补丁分析:

\

\

\

在这个补丁中,项目作者根据NotSoSerial( https://github.com/kantega/notsoserial )这个项目做了一些黑名单处理,将几个通用的反序列利用库加入到了黑名单。再看它的test目录的补丁文件,是有一个测试用例,这个测试示例的代码应该是漏洞作者提交给该项目的,从这个示例中就可以看出poc的端倪。

在测试用例中引用了com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl,同时它会包含outputProperties,transletName,transletBytecodes这三个字段。后续没有特别说明的话jdk版本都是jdk1.7.0_05。

Jackson data-bind的反序列化处理流程如下:

\

\

\

在反序列化outputProperties的时候会调用newTransformer,在newTransformer中调用newInstance实例化一个对象。这个对象就可以是攻击者构造的有害代码。

分析完反序列化的流程之后我们来构造下poc:

\

在Test类中调用了Runtime.getRuntime().exec(“calc”)来弹出计算机,编译完之后得到test.class,这就是攻击者的有害代码。

\

在testIssue1599这个类中,首先是读取前面生成的Test.class的内容,然后enableDefaultType,最后调用readValue来达到执行poc的目的。效果如下:

\

官方解决方案 Jackson官方即将发布新版本修复该漏洞,请使用受影响版本组件的用户尽快更新Jackson的jar包升级到不受影响的版本。

请参考链接:

https://github.com/FasterXML/jackson-databind/issues/1599

由于官方还没有正式发布不受影响的新版本,用户可以手动修改7.*,2.8.*以及master分支的代码来防护该漏洞:

\

上一篇:一种几乎无法被检测到的Punycode钓鱼攻击,Chrome、Firefox和Opera等浏览器都中招
下一篇:安全编程开发:小白的代码审计之路
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站