受影响的版本:
- Apache Jackrabbit Webapp (jackrabbit-webapp) 2.21.0 2.21.18 之前
- Apache Jackrabbit Webapp (jackrabbit-webapp) 1.0.0 2.20.11 之前
- Apache Jackrabbit Standalone(jackrabbit-standalone 和 jackrabbit-standalone-components)2.21.0 2.21.18 之前
- Apache Jackrabbit Standalone(jackrabbit-standalone 和 jackrabbit-standalone-components)1.0.0 2.20.11 之前
描述:
所有平台上的 Jackrabbit webapp/standalone 中的 Java 对象反序列化问题允许攻击者通过 RMI 版本(包括)2.20.10(稳定分支)和 2.21.17(不稳定分支)使用组件“commons-beanutils”远程执行代码,该组件包含一个可用于通过 RMI 远程执行代码的类。
建议用户立即更新至2.20.11或2.21.18版本。请注意,早期的稳定分支(1.0.x .. 2.18.x)已经停产,不再接收更新。
一般来说,只要类路径上存在可利用的类,RMI 支持就会暴露漏洞。即使 Jackrabbit 本身不再包含任何已知可利用的代码,向服务器添加其他组件也可能会暴露相同类型的问题。因此,我们建议完全禁用 RMI 访问(请参阅下文),并将讨论在未来的 Jackrabbit 版本中弃用 RMI 支持。
如何检查 RMI 支持是否已启用 RMI 支持可以通过 RMI 特定的 TCP 端口以及 HTTP 绑定进行。默认情况下,两者都在 Jackrabbit webapp/standalone 中启用。
本机RMI协议默认使用1099端口,要检查是否启用,可以使用“netstat”等工具来检查。
Jackrabbit 中的 RMI-over-HTTP 默认情况下使用路径“/rmi”。因此,当在端口 8080 上独立运行时,请检查 localhost:8080/rmi 上的 HTTP GET 请求是否返回 404(未启用)或 200(启用)。请注意,当 web 应用程序作为非根上下文部署在容器中时,HTTP 路径可能会有所不同,在这种情况下,前缀由用户控制。
关闭 RMIFind web.xml(在 JAR/WAR 文件或解压的 Web 应用程序文件夹中),并删除 RemoteBindingServlet 的声明和映射定义:
<servlet>
<servlet-name>RMI</servlet-name>
<servlet-class>org.apache.jackrabbit.servlet.remote.RemoteBindingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RMI</servlet-name>
<url-pattern>/rmi</url-pattern>
</servlet-mapping>
找到 bootstrap.properties 文件(在 $REPOSITORY_HOME 中),设置 rmi.enabled=false并删除
rmi.host
rmi.port
rmi.url-pattern
如果 $REPOSITORY_HOME 中没有名为 bootstrap.properties 的文件,则它位于类路径中的某个位置。在这种情况下,请将副本放置在 $REPOSITORY_HOME 中并按说明进行修改。
原文始发于微信公众号(Ots安全):CVE-2023-37895:Apache Jackrabbit 中的关键远程代码执行
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论