185.5.5. 来自多形反序列化的安全风险
使用 FasterXML jackson-databind
库的应用程序通过对 JSON 内容进行反序列化处理 Java 对象可能会受到 远程代码执行 攻击的影响。但这不是自动的,如果您采取适当的缓解方案步骤,可以避免这个漏洞。
至少,在攻击成为可能前必须满足以下先决条件:
您已在
jackson-databind
中启用了 polymorphic 处理来反序列化 JSON 内容。在 Jackson JSON 中启用多形类型处理有两种替代方法:-
使用
@JsonTypeInfo
和@JsonSubTypes
注释的组合。 -
通过调用
ObjectMapper.enableDefaultTyping ()
方法。这个选项特别危险,因为它可全局启用多形键入。
-
使用
- 您的 Java 类路径中 有一个或多个 gadget 类。小工具类定义为执行敏感(有漏洞利用)操作的任何类,作为执行构造或集合方法(这是在反序列化过程中调用的方法)。
-
您的 Java 类路径中的一个或多个 gadget 类还没有被当前版本的
jackson-databind
列入黑名单。如果您使用 jackson-databind 库的标准发行版本,则 Jackson JSON 库维护的 gadget blacklist 是针对远程代码执行漏洞的最后一行。 -
(仅限红帽发布 jackson-databind 库) 您明确将 gadget 类之一添加到接收器上的反序列化白名单(通过设置
jackson.deserialization.whitelist.packages
系统属性)。因为这种情况不太可能这样做,白名单机制默认提供对所有 gadget 类的有效保护。