fastjson是一个java编写的高机能功能异常完美的JSON库,应用范围异常广,在github上star数都跨越8k,在2017年3月15日,fastjson官方主动爆出fastjson在1.2.24及之前版本存在长途代码履行高危安然马脚。进击者可以经由过程此马脚长途履行恶意代率攀来入侵办事器。
关于马脚的具体详情可参考 :https://github.com/alibaba/fastjson/wiki/security_update_20170315
- fastjson <= 1.2.24
受影响的版本
静态分析
根据官方给出的补丁文件,重要的更新在这个checkAutoType函数上,而这个函数的重要功能就是添加了黑名单,将一些常用的反序列化应用库都添加到黑名单中。
具体包含:
- bsh,com.mchange,com.sun.,java.lang.Thread,java.net.Socket,java.rmi,javax.xml,org.apache.bcel,org.apache.commons.beanutils,
- org.apache.commons.collections.Transformer,org.apache.commons.collections.functors,org.apache.commons.collections4.
- comparators,org.apache.commons.fileupload,org.apache.myfaces.context.servlet,org.apache.tomcat,org.apache.wicket.util,
- org.codehaus.groovy.runtime,org.hibernate,org.jboss,org.mozilla.javascript,org.python.core,org.springframework
下面我们来分析checkAutoType的函数实现:
- if (typeName == null) {
- return null;
- }
- if (typeName.length() >= maxTypeNameLength) {
- throw new JSONException("autoType is not support. " + typeName);
- }
- final String className = typeName.WordStr('$', '.');
- if (autoTypeSupport || expectClass != null) {
- for (int i = 0; i < acceptList.length; ++i) {
- String accept = acceptList[i];
- if (className.startsWith(accept)) {
- return TypeUtils.loadClass(typeName, defaultClassLoader);
- }
- }
- for (int i = 0; i < denyList.length; ++i) {
- String deny = denyList[i];
- if (className.startsWith(deny)) {
推荐阅读
1. 记录主机信息每当您正在应用新的Linux主机进行安然加强时,您须要创建一个文档并记录本文档中列出的项目,工作完成后,您将须要检查这些项目。别的,在开端时该文档,您须要记录有关Li>>>详细阅读
地址:http://www.17bianji.com/lsqh/35009.html
1/2 1