XOM 中具有 jackson-databind 的多型解除序列化
此漏洞與建置外部程式庫相關。 在 2017 年,jackson-databind JAR 檔中報告了多型解除序列化漏洞 (CVE-2017-7525)。 從其衍生了近乎 30 個 CVE,因為針對每一種新攻擊類別或小工具類別,都會報告一個 CVE。Automation Decision Services 使用最新版本的 jackson-databind,其中所有已知的小工具類別都被封鎖。 雖然已知的 CVE 已經得以解決,但社群在未來仍然可以找到新的小工具類別。 在 Automation Decision Services 中使用您自己的執行檔物件模型 (XOM) 時,您必須注意自己的 XOM Java™ 類別,以不允許在 XOM 中使用通用的多型鍵入。
jackson-databind API 用在 Automation Decision Services 中,以將 JSON 有效負載解除序列化為 Java 物件。 小工具類別是呈現在 Java 類別路徑中的內容,其建構子(getter
或 setter
)會產生可被惡意探索的負面影響。 例如,資料庫驅動程式中的 getConnection()
可以觸發負面影響。
多型解除序列化容許將 JSON 有效負載解除序列化為 GitHub 中 jackson-databind 內的 SubTypeValidator.java 所記錄的其中一個已知小工具類別。 已解除序列化的物件會被指派給物件模型中的通用基礎類別,例如
java.lang.Object
或 java.lang.Serializable
。 在解除序列化階段期間,小工具類別程式碼可讓應用程式遭到攻擊。 在以下兩種情況之一,會啟用此動作:- 在 Java 模型中使用
@JsonSubTypes
類型註釋 - 使用
objectMapper.enableDefaultTyping()
方法時。 不過,Automation Decision Services 中的 JSON 解除序列化程式不使用s
,且不容易遭到攻擊。
註: Automation Decision Services 中使用 JSON 有效負載的 API,受到 TLS 及鑑別的保護。 鑑別 API 時,將管制並重新修補這裡所說明的漏洞。
不得在 XOM 中使用通用多型鍵入。 下列範例顯示 Java 物件模型中的多型鍵入:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes( {
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),
@JsonSubTypes.Type(value = Cat.class, name = "Cat"),
@JsonSubTypes.Type(value = Monkey.class, name = "Monkey")
}
)
public class Animal {
…
}
其中,Animal
是一個基礎類別(抽象或非抽象),它具有三個子類別:Dog
、Cat
和 Monkey
。已標註 Java XOM 類別定義,以啟用多型解除序列化。