Java漏洞在白盒审计中的技巧——反序列化篇(Fastjson)

💡 原文中文,约5800字,阅读约需14分钟。
📝

内容提要

Fastjson反序列化漏洞源于AutoType机制,攻击者可通过恶意JSON加载危险类,导致任意代码执行。此漏洞存在于1.2.24及之前版本,后续版本已加强安全防护。修复措施包括升级到安全版本、关闭AutoType和使用安全模式。审计时需关注危险方法调用及AutoType配置。

🎯

关键要点

  • Fastjson反序列化漏洞源于AutoType机制,攻击者可通过恶意JSON加载危险类,导致任意代码执行。

  • 漏洞存在于1.2.24及之前版本,后续版本已加强安全防护。

  • 修复措施包括升级到安全版本、关闭AutoType和使用安全模式。

  • 审计时需关注危险方法调用及AutoType配置。

  • 攻击者通过@type指定恶意类,利用JSON.parseObject()触发漏洞。

  • 构造恶意JSON时需包含恶意类的字节码和相关属性。

  • 审计Fastjson代码时需关注危险方法调用和AutoType相关配置。

  • 基础修复措施包括升级到安全版本、关闭AutoType和使用安全模式。

  • 安全编码规范要求反序列化时指定具体类型,避免反序列化接口或抽象类。

  • 实际攻击中需构造利用链,常见的有JdbcRowSetImpl和TemplatesImpl。

  • Fastjson反序列化漏洞的核心在于AutoType机制和危险类的链式调用。

  • 在审计时需关注JSON.parseObject()未指定具体类型的情况和黑名单覆盖范围。

🔎

延伸解读

AutoType机制的风险

Fastjson的AutoType机制允许通过@type指定类名,这为攻击者提供了可乘之机。攻击者可以构造恶意JSON,利用该机制加载危险类,导致任意代码执行。因此,在使用Fastjson时,开发者应特别注意AutoType的配置,避免使用不受信任的数据进行反序列化。

审计与修复措施

在进行代码审计时,重点关注JSON.parseObject()的调用,确保未使用Object.class作为目标类型。此外,建议关闭AutoType支持,并使用安全模式来增强防护。及时升级到安全版本(1.2.83及以上)是防止此类漏洞的有效措施。

构造恶意JSON的方式

攻击者构造恶意JSON时,需包含恶意类的字节码和相关属性。了解攻击链的构造方式,如使用TemplatesImpl和JdbcRowSetImpl等类,可以帮助开发者识别潜在的安全风险,并采取相应的防护措施。

延伸问答

Fastjson反序列化漏洞的主要原因是什么?

Fastjson反序列化漏洞主要源于AutoType机制,攻击者可以通过恶意JSON加载危险类,从而导致任意代码执行。

如何修复Fastjson反序列化漏洞?

修复措施包括升级到安全版本(1.2.83及以上)、关闭AutoType支持和使用安全模式。

在审计Fastjson代码时需要关注哪些关键点?

审计时需关注危险方法调用、AutoType配置及未指定具体类型的JSON.parseObject()调用。

Fastjson反序列化漏洞的攻击步骤是什么?

攻击步骤包括构造恶意JSON、编译恶意类、发送恶意HTTP请求并触发JSON.parseObject()解析。

Fastjson的AutoType机制是如何工作的?

AutoType机制通过@type标识类名,反序列化时尝试实例化指定的类,可能导致加载恶意类。

Fastjson反序列化漏洞的影响有哪些?

该漏洞可能导致任意代码执行,攻击者可以利用它进行远程代码执行等恶意操作。

🏷️

标签

➡️

继续阅读