第 7 章 已知问题
以下小节描述了版本 7.11 中已知的问题。
7.1. CVE 安全漏洞
作为中间件集成平台,Fuse 可能与大量第三方组件集成。Fuse 的一些第三方依赖关系可能并非始终存在安全漏洞。本节记录了与影响 Fuse 7.11 的第三方依赖项相关的常见漏洞和暴露(CVE)的内容。
- CVE-2020-13936 CVE-2020-13936 velocity: 当攻击者可以修改模板时任意代码执行
可以修改 Velocity 模板的攻击者可以执行任意 Java 代码,或者运行具有与运行 Servlet 容器的帐户相同的权限的任意系统命令。这适用于允许不受信任的用户上传/修改 velocity 模板的应用程序,运行 Apache Velocity Engine 版本最多为 2.2。
Fuse 7.9(及更高版本)已修改它的依赖项,以确保它只使用对这个安全漏洞进行保护的 Velocity 版本(即 2.3)。如果您的应用程序代码对 Apache Velocity 组件有任何明确的依赖关系,我们建议升级这些依赖项以使用修复的版本。
- ENTESB-8113 CVE-2018-10237 guava: Unbounded memory allocation in AtomicDoubleArray 和 CompoundOrdering 类允许远程攻击者拒绝服务 [fuse-7.0.0]
Google Guava 版本 11.0 到 24.1,它们容易受到
AtomicDoubleArray
类中的无限内存分配的影响(当使用 Java 序列化序列化)和CompoundOrdering
类(使用 GWT 序列化处理时)。攻击者可以利用使用 Guava 和 deserialize 不信任的数据的应用程序,从而导致拒绝 service attack- the the more details 部分,请参阅 CVE-2018-10237。要避免此安全漏洞,我们建议您:
-
从不反对
AtomicDoubleArray
实例或来自未知源的CompoundOrdering
实例进行反序列化。 - 避免使用 Guava 版本 24 及更早版本(在某些情况下,无法避免旧版本)。
为了更便于避免早期(专用)版本 Guava,Fuse 7.7(及更高版本)已将 Maven Bill of Materials(BOM)文件配置为默认选择 Guava 27。这意味着,如果您将 Fuse BOM 合并到 Maven 项目中(通过将 BOM 的依赖项添加到 POM 文件的
dependency
部分),然后在不指定显式版本 的情况下 对 Guava 工件指定依赖项,则 Guava 版本将默认为 BOM 中指定的版本,这是 Fuse 7.7 BOM 版本的版本。但是,至少有一种常见用例涉及 Apache Karaf(OSGi)容器,因此无法避免使用存在安全漏洞的 Guava 版本:如果您的 OSGi 应用程序使用 Guava 和 Swagger 一起,则您仍然使用 Guava 20,因为这是 Swagger 所需要的版本。在这里,我们解释了为什么是这种情况以及如何配置 POM 文件以恢复之前(可用)Gusava 20 库。首先,您需要了解 双 OSGi 链 的概念。
双 OSGi 链
OSGi 运行时中的捆绑包使用软件包约束(软件包名称 + 可选版本/range)和导出来连接。每个捆绑包都可以有多个导入,通常这些导入会将给定捆绑包与多个捆绑包相连接。例如:
BundleA +-- BundleB | +-- BundleCa +-- BundleCb
其中
BundleA
依赖于BundleB
和BundleCb
,而BundleB
则依赖BundleCa
。BundleC
aBundleCb
应该是相同的捆绑包,如果导出了相同的软件包,但由于版本(范围)限制,BundleB
使用(有线到)不同的修订版本/版本与BundleA
不同。重新编写上图以反映应用程序里的 Guava 和 Swagger 依赖关系时会发生什么:
org.jboss.qe.cxf.rs.swagger-deployment +-- Guava 27 +-- Swagger 1.5 +-- reflections 0.9.11 +-- Guava 20
如果您尝试部署此捆绑包配置,您会看到错误,即
org.osgi.framework.BundleException: Uses constraint violation
。恢复到 Guava 20
如果您的项目同时使用 Guava 和 Swagger 库(直接或间接地),您应该将
maven-bundle-plugin
配置为使用显式版本范围(或没有范围)用于 Guava 捆绑包导入,如下所示:<Import-Package> com.google.common.base;version="[20.0,21.0)", com.google.common.collect;version="[20.0,21.0)", com.google.common.io;version="[20.0,21.0)" </Import-Package>
此配置会强制您的 OSGi 应用程序恢复到(vulnerable)Guava 20 库。因此,在这种情况下,避免反序列化
AtomicDoubleArray
实例非常重要。-
从不反对
- CVE-2017-12629 Solr/Lucene -security bypass to access sensitive data - CVE-2017-12629
Apache Solr 是一个流行的开源搜索平台,它使用 Apache Lucene 搜索引擎。如果您的应用程序将 Apache Solr 与 Apache Lucene 结合使用(例如,在使用 Camel Solr 组件时),这会受到此安全漏洞的影响。有关此漏洞的详情,请参阅链接的安全公告以及相关的缓解方案步骤。
注意Fuse 运行时 不会直接 使用 Apache Solr 或 Apache Lucene。只有在集成应用程序上下文中同时使用 Apache Solr 和 Apache Lucene(例如,在使用 Camel Solr 组件时),才会出现安全风险。
- CVE-2021-30129 mina-sshd-core: Apache Mina SSHD Server 中的内存泄漏服务
Apache Mina SSHD 的 sshd-core 中的一个漏洞允许攻击者溢出服务器导致 OutOfMemory 错误。此问题会影响 Apache Mina SSHD 版本 2.0.0 及更新版本的 SFTP 和端口转发功能。它已在 Apache Mina SSHD 2.7.0 中解决
Apache Mina SSHD 中的这个安全漏洞已被 SSHD-1004 解决,它弃用了具有此漏洞的某些加密算法。在 JBoss EAP 上的 Fuse 7.10 和 Fuse 7.10 中,仍然支持这些已弃用的算法(出于向后兼容的原因)。但是,如果您使用这些已弃用的算法之一,强烈建议您重构应用程序代码以使用不同的算法。
在 Fuse 7.10 中,默认加密算法已更改,如下所示。
Fuse 7.9 Fuse 7.10 在 Fuse 7.10 中已弃用? aes128-ctr
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
arcfour128
arcfour128
是
aes128-cbc
aes128-cbc
aes192-cbc
aes256-cbc
3des-cbc
3des-cbc
是
blowfish-cbc
blowfish-cbc
是
在 Fuse 7.10 中,默认密钥交换算法已更改,如下所示。
Fuse 7.9 Fuse 7.10 在 7.10 中已弃用? diffie-hellman-group-exchange-sha256
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp521
ecdh-sha2-nistp521
ecdh-sha2-nistp384
ecdh-sha2-nistp384
ecdh-sha2-nistp256
ecdh-sha2-nistp256
diffie-hellman-group18-sha512
diffie-hellman-group17-sha512
diffie-hellman-group16-sha512
diffie-hellman-group15-sha512
diffie-hellman-group14-sha256
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha1
是
diffie-hellman-group1-sha1
diffie-hellman-group1-sha1
是