序列化安全
概述
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 升级并加强了序列化协议的安全性。建议使用 Tripe 协议的非 Wrapper 模式。该协议默认安全,但需要开发者编写 IDL 文件。
Triple 协议 Wrapper 模式允许与其他序列化数据兼容,提供良好的兼容性。但是,其他协议可能存在反序列化安全漏洞。对于 Hessian2 协议,具有高安全属性的用户应按照示例代码说明开启白名单模式。框架默认开启黑名单模式,拦截恶意调用。
如果必须使用其他序列化协议,并且期望一定程度的安全性。应启用 Token 认证机制,防止未经授权和不可信的请求来源威胁 Provider 安全。开启 Token 认证机制时,应同时开启注册中心的认证功能。