序列化安全

在 Dubbo 中更安全地使用序列化協議

概覽

Dubbo 支援序列化協議的擴展。理論上,用戶可以基於此擴展機制啟用任何序列化協議。這帶來了極大的靈活性,但同時,用戶必須意識到隱藏的安全風險。數據反序列化是攻擊者最容易利用的環節,他們利用它來執行 RCE 攻擊以竊取或破壞伺服器端數據。在切換序列化協議或實現之前,用戶應充分調查目標序列化協議及其框架實現的安全保證,並提前設置相應的安全措施(例如設置黑白名單)。Dubbo 框架本身無法直接保證目標序列化機制的安全性。

Dubbo 2.7 官方版本提供的序列化協議如下

  • Hessian2
  • Fastjson
  • Kryo
  • FST
  • JDK
  • Protostuff
  • Protocol Buffers
  • Avro
  • Gson

從 Dubbo 3.0 開始,默認情況下僅提供以下序列化協議支持

  • Hessian2
  • JDK
  • Protocol Buffers

從 Dubbo 3.2 開始,默認情況下提供以下序列化協議支持

  • Hessian2
  • Fastjson2
  • JDK
  • Protocol Buffers

出於安全原因,從 Dubbo 3.3 開始,默認情況下僅支持以下序列化協議

  • Hessian2
  • Fastjson2
  • Protocol Buffers

對於上述序列化擴展,在發現或收到相關漏洞報告後,Dubbo 官方將跟進並將依賴項升級到最新的安全版本,但最終的漏洞修復取決於序列化框架實現。

對於使用 dubbo hessian2 版本的用戶,Dubbo 官方將盡可能地確保 hessian2 序列化機制的安全性並修復報告的安全漏洞。

此外,從 Dubbo 3.2 版本開始,Hessian2 和 Fastjson2 默認採用白名單機制。如果您發現某些數據處理已被移除,可以參考 [文檔](/zh-cn/overview/mannual/java-sdk/advanced-features- and-usage/security/class-check/) 進行配置。

全面強化

為了盡可能提高應用程式序列化安全性,Dubbo 3.0 已升級並強化了序列化協定的安全性。建議使用 Triple 協定的非 Wrapper 模式。此協定預設安全,但需要開發人員撰寫 IDL 檔案。

Triple 協定 Wrapper 模式允許與其他序列化數據相容,提供良好的相容性。然而,其他協定可能存在反序列化安全漏洞。對於 Hessian2 協定,具有高安全性要求的使用者應遵循範例程式碼的說明開啟白名單模式。框架預設會開啟黑名單模式以攔截惡意呼叫。

如果必須使用其他序列化協定,則需確保一定程度的安全性。應啟用 Token 驗證機制,以防止未經身份驗證和不可信的請求來源威脅 Provider 的安全。開啟 Token 驗證機制時,應同時開啟註冊中心的驗證功能。

強化參考


最後修改日期:2023 年 12 月 15 日:更新安全文件 (#2878) (cd1be029d5a)