FastJSON 黑盒测试与白盒审计:提升安全性的关键

简介与漏洞史

Java 中处理 JSON 数据的流行类库之一是 FastJSON,由阿里巴巴开源并维护。FastJSON 提供了高效的 JSON 格式与 Java 对象之间的转换,因此在 Web 服务和 Android 开发中得到广泛应用。它提供了 toJSONString()parseObject 方法,用于将 Java 对象转换成 JSON 格式,以及将 JSON 数据转换成 Java 对象。

FastJSON 漏洞历史

fastjson-1.2.24

在 FastJSON 1.2.24 版本中,存在一个特性,允许 JSON 数据通过 @type 字段指定应当还原成何种类型的对象,在反序列化时使用较为方便。

fastjson-1.2.48 以下

在 1.2.48 版本以下,FastJSON 存在绕过黑名单检测的安全漏洞。这是因为上一步将 com.sun.rowset.JdbcRowSetImpl 放入了映射中,导致 checkAutoType 在检测时绕过了黑名单。因此,通过字符串中包含 \x 转义字符可造成 DoS(拒绝服务)漏洞。

漏洞复现

本地测试环境

图片[1]-FastJSON 黑盒测试与白盒审计:提升安全性的关键-山海云端论坛
  • 图片本地的版本 Java 版本为 1.8.0_181
  • FastJSON 版本为 1.2.24
  • Tomcat 版本为 7

安全版本

  • JDK: 8u121, 7u131, 6u141
  • RMI: JDK 6u132, 7u122, 或 8u113

FastJSON 两种利用方式

出网

  1. 使用 JNDI 注入:可选择 RMI 或 LDAP,其中 LDAP 限制较小。
  2. 服务器无法出网时,可直接进行本地反序列化攻击。
图片[2]-FastJSON 黑盒测试与白盒审计:提升安全性的关键-山海云端论坛

不能出网

  1. 直接反序列化:利用 _bytecodes 直接进行反序列化。

黑白盒测试方法

黑盒测试

  1. 如果目标站点报错,尝试使用不闭合花括号或多添加双引号来测试。
  2. FastJSON 与 Jackson 的区别:尝试在 JSON 中追加一个随机 key,修改 JSON 结构。FastJSON 不会报错,但 Jackson 会因为强制 key 与 JavaBean 属性对齐而报错。

白盒审计函数

  1. 检查 FastJSON Jar 包版本是否小于 1.2.48。
  2. 审查 JSON.parseObject()JSONObject.parseObject()JSON.parseArray() 等函数。
  3. 检查 config.checkAutoType(typeName) 函数,确保不在黑名单中。

黑名单

<code>bsh, com.mchange, com.sun., java.lang.Thread, java.net.Socket, java.rmi, javax.xml, org.apache.b</code>
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容