<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>安全公告 on Apache Dubbo</title><link>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/</link><description>Recent content in 安全公告 on Apache Dubbo</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/index.xml" rel="self" type="application/rss+xml"/><item><title>序列化安全</title><link>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/serialization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/serialization/</guid><description>&lt;h1 id="概述">概述&lt;/h1>
&lt;p>Dubbo 支持序列化协议的扩展，理论上用户可以基于该扩展机制启用任意的序列化协议，这带来了极大的灵活的，但同时也要意识到其中潜藏的安全性风险。
数据反序列化是最容易被被攻击者利用的一个环节，攻击者利用它执行 RCE 攻击等窃取或破坏服务端数据。
用户在切换序列化协议或实现前， 应充分调研目标序列化协议及其框架实现的安全性保障，并提前设置相应的安全措施（如设置黑/白名单）。
Dubbo 框架自身并不能直接保证目标序列化机制的安全性。&lt;/p>
&lt;p>Dubbo 2.7 官方版本提供的序列化协议有如下几种：&lt;/p>
&lt;ul>
&lt;li>Hessian2&lt;/li>
&lt;li>Fastjson&lt;/li>
&lt;li>Kryo&lt;/li>
&lt;li>FST&lt;/li>
&lt;li>JDK&lt;/li>
&lt;li>Protostuff&lt;/li>
&lt;li>Protocol Buffers&lt;/li>
&lt;li>Avro&lt;/li>
&lt;li>Gson&lt;/li>
&lt;/ul>
&lt;p>从 Dubbo 3.0 开始默认仅提供以下序列化协议支持：&lt;/p>
&lt;ul>
&lt;li>Hessian2&lt;/li>
&lt;li>JDK&lt;/li>
&lt;li>Protocol Buffers&lt;/li>
&lt;/ul>
&lt;p>从 Dubbo 3.2 开始默认提供以下序列化协议支持：&lt;/p>
&lt;ul>
&lt;li>Hessian2&lt;/li>
&lt;li>Fastjson2&lt;/li>
&lt;li>JDK&lt;/li>
&lt;li>Protocol Buffers&lt;/li>
&lt;/ul>
&lt;p>出于安全性考虑，从 Dubbo 3.3 开始将默认仅提供以下序列化协议支持：&lt;/p>
&lt;ul>
&lt;li>Hessian2&lt;/li>
&lt;li>Fastjson2&lt;/li>
&lt;li>Protocol Buffers&lt;/li>
&lt;/ul>
&lt;p>针对以上序列化扩展，在发现或收到相关的漏洞报告之后，Dubbo 官方会跟进并升级依赖到最新的安全版本，但最终的漏洞修复方案取决于序列化的框架实现。&lt;/p>
&lt;blockquote>
&lt;p>针对使用 &lt;a href="https://github.com/apache/dubbo-hessian-lite/releases">dubbo hessian2&lt;/a> 版本的用户，Dubbo 官方会保证hessian2序列化机制的安全性并尽可能的修复上报的安全漏洞&lt;/p>
&lt;/blockquote>
&lt;p>此外，从 Dubbo 3.2 版本开始，对于 Hessian2 和 Fastjson2 默认采用白名单机制，如果您发现部分数据处理移除，可以参考&lt;a href="https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/security/class-check/">文档&lt;/a>进行配置。&lt;/p>
&lt;h1 id="全面加固">全面加固&lt;/h1>
&lt;p>为了尽可能提高应用序列化的安全性，Dubbo3.0在序列化协议安全方面进行了升级加固，推荐使用 Tripe 协议的非 Wrapper 模式。
该协议默认安全，但需要开发人员编写IDL文件。&lt;/p>
&lt;p>Triple 协议 Wrapper 模式下，允许兼容其它序列化数据，提供了良好的兼容性。但其它协议可能存在反序列化安全缺陷，对于 Hessian2 协议，高安全属性用户应当按照 samples 代码指示，开启白名单模式，框架默认会开启黑名单模式，拦截恶意调用。&lt;/p></description></item><item><title>RPC 协议安全</title><link>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/protocol/</guid><description>&lt;p>Dubbo 支持 RPC 协议的扩展，理论上用户可以基于该扩展机制启用任意的 RPC 协议，这带来了极大的灵活的，但同时也要意识到其中潜藏的安全性风险。&lt;/p>
&lt;p>Dubbo 2.7 官方版本提供的序列化协议有如下几种：&lt;/p>
&lt;ul>
&lt;li>Dubbo&lt;/li>
&lt;li>RMI&lt;/li>
&lt;li>Hessian&lt;/li>
&lt;li>Http / Rest&lt;/li>
&lt;li>Webservice&lt;/li>
&lt;li>Thrift&lt;/li>
&lt;li>gRPC&lt;/li>
&lt;li>……&lt;/li>
&lt;/ul>
&lt;p>从 Dubbo 3.0 开始默认仅提供以下序列化协议支持：&lt;/p>
&lt;ul>
&lt;li>Dubbo&lt;/li>
&lt;li>Triple / gRPC&lt;/li>
&lt;li>Http / Rest&lt;/li>
&lt;/ul>
&lt;p>对于 Triple、gRPC、Http、Rest 协议都是基于 HTTP 协议构建的，可以严格区分请求的格式，如 Header 为纯文本，避免在读取 Token 时带来的 RCE 等风险。
对于 Dubbo 协议，由于其基于 TCP 二进制直接设计，除了特定几个字段外均使用序列化协议写入，因此如果开启了有风险的序列化协议，仍然会存在 RCE 等风险。
对于 RMI 协议，由于其基于 Java 序列化机制，存在 RCE 等风险。
对于 Hessian 协议，由于其基于 Hessian 序列化机制，且默认 Hessian 协议（非 Dubbo Shade 的 Hessian-Lite 协议）无法配置黑白名单且无默认黑名单，存在 RCE 等风险。&lt;/p>
&lt;p>（1）如果用户希望使用 Token 鉴权机制，防止未鉴权的不可信请求来源威胁 Provider 的安全性，应使用 Triple 等基于 Http 标准扩展的协议，避免 token 参数读取时的安全风险。&lt;/p></description></item><item><title>注册中心安全</title><link>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/registry/</guid><description>&lt;p>Dubbo 支持注册中心的扩展，理论上用户可以基于该扩展机制启用任意的注册中心，这带来了极大的灵活的，但同时也要意识到其中潜藏的安全性风险。&lt;/p>
&lt;p>Dubbo 2.7 官方版本提供的注册中心有如下几种：&lt;/p>
&lt;ul>
&lt;li>Zookeeper&lt;/li>
&lt;li>Redis&lt;/li>
&lt;li>Nacos&lt;/li>
&lt;li>Etcd&lt;/li>
&lt;li>Consul&lt;/li>
&lt;li>……&lt;/li>
&lt;/ul>
&lt;p>从 Dubbo 3.0 开始默认仅提供以下注册中心支持：&lt;/p>
&lt;ul>
&lt;li>Zookeeper&lt;/li>
&lt;li>Nacos&lt;/li>
&lt;/ul>
&lt;p>对于注册中心，Dubbo 只能完全信任其推送的数据，因此如果注册中心存在安全漏洞，可能会导致 Dubbo 服务被恶意注册或者是被恶意推送数据，从而导致服务被攻击。
因此为了保证注册中心的安全性，Dubbo 官方建议您：&lt;/p>
&lt;ul>
&lt;li>开启注册中心的鉴权机制，如 Zookeeper 的 ACL 机制、Nacos 的用户名密码机制等&lt;/li>
&lt;li>避免将注册中心暴露在公网环境下，尽量将注册中心部署在可信内网环境下&lt;/li>
&lt;/ul></description></item><item><title>Dubbo Admin 安全</title><link>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/admin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/admin/</guid><description>&lt;p>为了便于使用 Dubbo，Dubbo 官方提供了 Dubbo Admin 控制台，以便于管理 Dubbo 应用。&lt;/p>
&lt;h2 id="风险">风险&lt;/h2>
&lt;p>Dubbo Admin 默认拥有整个集群的查询、调用权限，因此对于线上环境，需要更加谨慎地使用。
此外，为了减低任意访问 Dubbo Admin 的风险，Dubbo Admin 还提供了简易的鉴权机制。
为了使 Dubbo Admin 更安全，请参考下面的文档。&lt;/p>
&lt;h2 id="鉴权方案">鉴权方案&lt;/h2>
&lt;p>Dubbo Admin 默认提供基于用户名密码的登陆机制，在请求过程中基于 JWT Token 进行鉴权。
从便于初学者的角度出发，Dubbo Admin 包含了一个默认的用户名密码、JWT Secret Token。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>由于 Dubbo Admin 是公开发行的，因此默认的用户名密码、JWT Secret Token 都是公开的。
在您的生产环境中，请务必更换默认的用户名密码、JWT Secret Token。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;h2 id="如何更换默认的用户名密码jwt-secret-token">如何更换默认的用户名密码、JWT Secret Token&lt;/h2>
&lt;p>对于直接基于 Java 代码打包部署的用户，可以直接修改 &lt;code>dubbo-admin-server/src/main/resources/application.properties&lt;/code> 中以下配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>admin.root.user.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.root.user.password&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.check.signSecret&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">86295dd0c4ef69a1036b0b0c15158d77&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于通过 Docker 部署的用户，可以修改 &lt;code>/dubbo/dubbo-admin/properties&lt;/code> 中以下配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>admin.root.user.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.root.user.password&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.check.signSecret&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">86295dd0c4ef69a1036b0b0c15158d77&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于通过 Kubernetes 部署的用户，可以修改 ConfigMap 中以下配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>admin.root.user.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.root.user.password&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">root&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.check.signSecret&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">86295dd0c4ef69a1036b0b0c15158d77&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于通过 Helm 部署的用户，可以指定以下配置：&lt;/p></description></item><item><title>Log4j 漏洞影响</title><link>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/log4j/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/zh-cn/overview/notices/log4j/</guid><description>&lt;p>最近，主流日志组件 &lt;a href="https://logging.apache.org/log4j/2.x/">log4j2&lt;/a> 爆出&lt;a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228">安全漏洞 CVE-2021-44228&lt;/a>。&lt;/p>
&lt;p>以下是漏洞 CVE-2021-44228 对 Apache Dubbo 框架的影响总结及用户应对指南。&lt;/p>
&lt;h2 id="dubbo-影响范围">Dubbo 影响范围&lt;/h2>
&lt;p>&lt;strong>该漏洞对 Dubbo 框架使用安全并无影响。&lt;/strong>&lt;/p>
&lt;p>Dubbo 本身不强依赖 log4j2 框架，也不会通过依赖传递将 log4j2 带到业务工程中去，因此，正在使用 Dubbo 2.7.x、3.0.x 等版本的用户均无需强制升级 Dubbo 版本。&lt;/p>
&lt;p>以下是 Dubbo 各组件对 log4j2 的依赖分析，涉及 &lt;code>dubbo-common&lt;/code>、&lt;code>dubbo-spring-boot-starter&lt;/code>、&lt;code>dubbo-spring-boot-actuator&lt;/code>：&lt;/p>
&lt;ul>
&lt;li>dubbo-common 包含对 &lt;code>log4j-core&lt;/code> 的可选依赖，请检查项目自身是否启用了 log4j 依赖，如启用则对应升级即可。&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ dubbo-common ---
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] org.apache.dubbo:dubbo-common:jar:2.7.14-SNAPSHOT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.11.1:provided
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.apache.logging.log4j:log4j-core:jar:2.11.1:provided
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>dubbo-spring-boot-starter 通过 spring-boot 组件传递了 log4j-api 依赖，log4j-api 本身并无安全问题，升级 log4j-core 组件时注意与 log4j-api 的兼容性&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ dubbo-spring-boot-starter ---
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] org.apache.dubbo:dubbo-spring-boot-starter:jar:2.7.14-SNAPSHOT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.springframework.boot:spring-boot-starter:jar:2.3.1.RELEASE:compile (optional) 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.springframework.boot:spring-boot-starter-logging:jar:2.3.1.RELEASE:compile (optional) 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.apache.logging.log4j:log4j-to-slf4j:jar:2.13.3:compile (optional) 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.apache.logging.log4j:log4j-api:jar:2.13.3:compile (optional) 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>dubbo-spring-boot-actuator 通过 spring-boot 组件传递了 log4j-api 依赖，log4j-api 本身并无安全问题，升级 log4j-core 组件时应注意与 log4j-api 的兼容性&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>[INFO] org.apache.dubbo:dubbo-spring-boot-actuator:jar:2.7.14-SNAPSHOT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.3.1.RELEASE:compile (optional) 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.springframework.boot:spring-boot-starter:jar:2.3.1.RELEASE:compile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.springframework.boot:spring-boot-starter-logging:jar:2.3.1.RELEASE:compile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.apache.logging.log4j:log4j-to-slf4j:jar:2.13.3:compile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[INFO] \- org.apache.logging.log4j:log4j-api:jar:2.13.3:compile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>