⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 www.toutiao.com/i6733119825897325068 「360CERT」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

报告编号:B6-2019-090501 报告来源:360-CERT 报告作者:360-CERT 更新日期:2019-09-05

0x00 漏洞背景

2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修复当字符串中包含\x转义字符时可能引发OOM的问题的修复。

360CERT 判断该漏洞危害中。影响面较大。攻击者可以通过发送构造好的请求而致使当前线程瘫痪,当发送的恶意请求过多时有可能使业务直接瘫痪。

建议广大用户对自身的业务/产品进行组件自查,确认fastjson版本至少升级到1.2.60。

0x01 漏洞详情

漏洞的关键点在com.alibaba.fastjson.parser.JSONLexerBase#scanString中,当传入json字符串时,fastjson会按位获取json字符串,当识别到字符串为\x为开头时,会默认获取后两位字符,并将后两位字符与\x拼接将其变成完整的十六进制字符来处理:

而当json字符串是以\x结尾时,由于fastjson并未对其进行校验,将导致其继续尝试获取后两位的字符。也就是说会直接获取到\u001A也就是EOF:

当fastjson再次向后进行解析时,会不断重复获取EOF,并将其写到内存中,直到触发oom错误:

最终效果为:

0x02 影响版本

fastjson < 1.2.60版本

0x03 修复建议

  • 1.1.15~1.1.31版本更新到1.1.31.sec07版本
  • 1.1.32~1.1.33版本更新到1.1.33.sec06版本
  • 1.1.34 版本更新到1.1.34.sec06版本
  • 1.1.35~1.1.46版本更新到1.1.46.sec06版本
  • 1.2.3~1.2.7版本更新到1.2.7.sec06版本或1.2.8.sec04版本
  • 1.2.8 版本更新到1.2.8.sec06版本
  • 1.2.9~1.2.29 版本更新到1.2.29.sec06版本

0x04 时间线

  • 2019-09-03 fastjson提交修补commit
  • 2019-09-05 360CERT发布预警

0x05 参考链接

  • https://github.com/alibaba/fastjson/commit/995845170527221ca0293cf290e33a7d6cb52bf7
  • https://github.com/alibaba/fastjson/pull/2692/commits/b44900e5cc2a0212992fd7f8f0b1285ba77bb35d#diff-525484a4286a26dcedd7d6464925426f

唠嗑下:

Fastjson 存在安全漏洞,并不意味着它就差。事实上,强如 Jackson 等等,今年也被爆出有安全漏洞。

我们在使用开源库时,一定要关注库的更新,特别是安全方面的。那么问题就来了,你更新了吗?嘿嘿~

文章目录
  1. 1. 0x00 漏洞背景
  2. 2. 0x01 漏洞详情
  3. 3. 0x02 影响版本
  4. 4. 0x03 修复建议
  5. 5. 0x04 时间线
  6. 6. 0x05 参考链接