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 類別路徑中的內容,其建構子(gettersetter)會產生可被惡意探索的負面影響。 例如,資料庫驅動程式中的 getConnection() 可以觸發負面影響。

多型解除序列化容許將 JSON 有效負載解除序列化為 GitHub 中 jackson-databind 內的 SubTypeValidator.java 所記錄的其中一個已知小工具類別。 已解除序列化的物件會被指派給物件模型中的通用基礎類別,例如 java.lang.Objectjava.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 是一個基礎類別(抽象或非抽象),它具有三個子類別:DogCatMonkey

已標註 Java XOM 類別定義,以啟用多型解除序列化。