首页 > 安全 > 网络安全 >

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

2017-04-21

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

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分支的代码来防护该漏洞:

\

相关文章
最新文章
热点推荐