作者:icematcha@云影实验室

0x00前言

近日,Fastjson被传爆出新的“0day”,也引起了大家的高度关注。云影实验室第一时间进行了跟进和分析,通过分析我们发现,此次的漏洞并不算新的漏洞,其实官方早在去年五月就已经推出了相关补丁修复,但可能没有发布相关的安全通告,导致许多用户没有及时升级处理,而在此次护网中就谣传变成了现在的“0day”。PHP大马

此次漏洞利用的核心点是java.lang.class这个java的基础类,在fastjson 1.2.48以前的版本没有做该类做任何限制,加上代码的一些逻辑缺陷,造成黑名单以及autotype的绕过。下面跟着代码看看这个类的具体应用。

0x01分析过程

Fastjson在开始解析json前会优先加载配置,在加载配置时会调用TypeUtils的addBaseClassMappings和loadClass方法将一些经常会用到的基础类和三方库存放到一个ConcurrentMap对象mappings中,类似于缓存机制。

配置加载完成后正式开始解析json数据,在ParserConfig.checkAutoType方法中对’@type’对应的value进行处理。fastjson在1.2.2+版本默认便不再开启autoType选项,且在调用解析函数时我们没有传入预期的反序列化对象的对应类名时,fastjson则通过从mappings中或者deserializers.findClass()方法来获取反序列化对象的对应类。

找到对应类后便返回,不再经过黑名单和autotype的检查流程。而java.lang.class该类恰好存在于deserializers对象的buckets属性中:

接着获取到java.lang.class对应的反序列化处理类MiscCodec:

在MiscCodec类中,java.lang.class拥有加载任意类到mappings中的功能。首先从输入的json串中解析获取val对应的键值:

获取后调用前面提到的TypeUtils. loadClass()方法对该键值进行类加载操作:

在TypeUtils. loadClass()中,我们就可以看到当cache参数为true时,将键值对应的类名放到了mappings中后返回:

Mappings是ConcurrentMap类的,顾名思义就是在当前连接会话生效。所以我们需要在一次连接会话同时传入两个json键值对时,此次连接未断开时,继续解析第二个json键值对。此时我们利用’@type’传入早已在黑名单中的com.sun.rowset.JdbcRowSetImpl类尝试jdni注入利用:奇热影视

可以看到fastjson直接从mappings中获取到了该类,并在做有效判断后,直接返回了:

此时的mappings中确实存在com.sun.rowset.JdbcRowSetImpl类:

而就像前面已经提到的,黑名单以及autotype开关的检查是在上面那处return之后的,所以也就变相的绕过了黑名单以及autotype开关的检查。

绕过了黑名单和autotype,剩下的利用过程就跟以前的利用完全一致了,利用jdni注入来RCE:

所以最终的漏洞利用其实是分为两个步骤,第一步利用java.lang.class加载黑名单类到mappings中,第二步直接从mappings中取出黑名单类完成漏洞利用。

0x02总结

回头来看看,我觉得该漏洞更像是一个逻辑漏洞,而不是依赖一些硬性的漏洞利用点,是代码的运行逻辑缺陷造成的漏洞利用。

在1.2.48版本的补丁中,首先黑名单做了更新,加了两条,其中应该包含了java.lang.class这个类:

MiscCodec中也将传入的cache参数置为了false:

ParserConfig.checkAutoType()也调整了检查策略和逻辑。

0x03修复建议

Fastjson在1.2.47及以下的版本受影响,请及时升级到1.2.48及以上版本。

0x04参考链接

https://github.com/alibaba/fastjson

Fastjson 漏洞分析相关推荐

  1. Fastjson 1.2.68版本反序列化漏洞分析篇

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | ale_wong@云影实验室 来源 | htt ...

  2. Fastjson 1.2.22-24 反序列化漏洞分析

    目录 0x00 废话 0x01 简单介绍 FastJson的简单使用 0x02 原理分析 分析POC 调试分析 0x03 复现过程 0x04 参考文章 0x00 废话 balabala 开始 0x01 ...

  3. android fastjson漏洞_亲手带你 Debug Fastjson 的安全漏洞

    简介 Java处理JSON数据有三个比较流行的类库,gson(google维护).jackson.以及今天的主角fastjson,fastjson是阿里巴巴一个开源的json相关的java libra ...

  4. log4j漏洞分析及总结

    2021年12月8号爆出的log4j2的远程代码执行漏洞[cve-2021-44228],堪称史诗级核弹漏洞,虽然过了这么久,大部分现网中的相关漏洞已经修复,但任然可以捡漏-,网上也有不少大佬和研究机 ...

  5. java 漏洞复现_CVE-2019-12384漏洞分析及复现

    原标题:CVE-2019-12384漏洞分析及复现 *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 引言 近期关于Jackson的 ...

  6. 易想团购 注入 user.php,易想团购系统通杀SQL注入漏洞分析及利用漏洞预警 -电脑资料...

    刚打开红黑看到J8基友写的一个{易想团购系统 最新版 通杀}的文章,看他贴的代码里面有个get_client_ip()函数,哈哈,我猜没过滤,果断下了一套程序, 找到get_client_ip()函数 ...

  7. 公开仓库中Docker镜像的漏洞分析结果发布

    Federacy的一名研究人员发布了一项报告,该报告分析了公开仓库中Docker镜像的漏洞.24%的镜像发现了明显的漏洞,其中基于Ubuntu的镜像漏洞最多,而基于Debian的镜像漏洞最少. \\ ...

  8. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  9. 漏洞分析技术专家聚会——博文视点OpenParty第二期

    漏洞分析技术专家聚会--博文视点OpenParty第二期 与传说中的牛人面对面,与畅销书作者共话家常,与技术专家共商新概念--     这不是天方夜谭!     2009年7月11日,好伦哥翠微店,博 ...

最新文章

  1. 职称考试还要考计算机 英语,强烈建议取消所谓的英语职称和计算机考试
  2. 【转】VMware虚拟机中CentOS设置固定IP
  3. 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈人生了)
  4. 05 | REST消息通信:如何使用 OpenFeign 简化服务间通信
  5. 32页,10米长的《BI建设地图》强在哪?我整理分享出来
  6. linux-使用xshell连接linux教程
  7. 利用SuppressMessage来阻止FxCop进行代码分析时报出的警告
  8. 阿里云服务器+ubantu+nodejs 服务器基本配置流程
  9. div关闭怎么写 html,大神你好,请问怎么在以下代码的div中添加一个关闭按钮?...
  10. keras 双向LSTM 简单示例
  11. 《Python密码学编程》——2.6 本书的文本换行
  12. 苹果鼠标驱动_一款鼠标让工作更高效——咪鼠S2智能语音鼠标测评
  13. 一个英文字母,一个中文各占多少字节?
  14. Spacy的依存分析
  15. 聚蓝bluetech便携式移动滤水壶 家用净水壶,值得拥有
  16. 数据分析[1.1]--拆解方法总结
  17. VCC,VDD,VEE,VSS,VPP 表示的意义
  18. 如何通adb命令删除安卓设备上指定的文件和apk
  19. Qt扫盲-QList使用总结
  20. 一些WM消息与其相应WPARAM,LPARAM的定义

热门文章

  1. 阿里大股东Altaba准备清算解散 所持阿里股份也计划全部出售
  2. vmware workstation 9安装教程(图文)
  3. 基于STM32的红绿灯设计
  4. linux Makefile PHONY作用
  5. 关于CAN通信的相关介绍
  6. 全网最全的Java岗IO流面试题(含答案)
  7. [译] 如何在浏览器中编写一款蓝牙应用
  8. 764、最大加号标志
  9. VBox虚拟机安装centos7,网络设置,宝塔安装
  10. ceRNA 调控机制