内容
Apache Tomcat 9.x 漏洞
本页面列出了 Apache Tomcat® 9.x 已发布版本中修复的所有安全漏洞。每个漏洞都由 Apache Tomcat 安全团队给予安全影响评级 — 请注意,此评级可能因平台而异。我们还列出了已知受此缺陷影响的 Apache Tomcat 版本,如果缺陷尚未验证,则用问号表示。
注意:并非 Tomcat 漏洞,但被错误报告为 Tomcat 漏洞或 Tomcat 提供了变通方案的漏洞列在本页面末尾。
请注意,我们从不提供二进制补丁。如果您需要应用源代码补丁,请使用您正在使用的 Apache Tomcat 版本的构建说明。对于 Tomcat 9.0,这些文件是building.html
和BUILDING.txt
。这两个文件都可以在二进制分发的webapps/docs
子目录中找到。您可能还希望查阅文档中的安全注意事项页面。
如果您需要关于构建或配置 Tomcat 的帮助,或者其他关于遵循说明以缓解此处列出的已知漏洞的帮助,请将您的问题发送至公共Tomcat 用户邮件列表
如果您遇到未列出的安全漏洞或具有安全影响的其他意外行为,或者此处描述不完整,请私下向Tomcat 安全团队报告。谢谢。
目录
2025-06-10 在 Apache Tomcat 9.0.106 中修复
中等:PreResources 和 PostResources 的安全约束绕过 CVE-2025-49125
当 PreResources 或 PostResources 挂载在 Web 应用程序根目录之外时,可以通过非预期的路径访问这些资源。该路径可能未受到与预期路径相同的安全约束保护,从而允许绕过这些安全约束。
这已通过提交 9418e3ff 修复。
该问题于 2025 年 6 月 16 日公开。
受影响版本:9.0.0.M1 到 9.0.105
低:通过 Windows 版 Tomcat 安装程序进行侧加载 CVE-2025-49124
在安装过程中,Windows 版 Tomcat 安装程序在使用 icacls.exe 时未指定完整路径。这导致了侧加载漏洞。
这已通过提交 28726cc2 修复。
该问题于 2025 年 6 月 16 日公开。
受影响版本:9.0.23 到 9.0.105
重要:多部分上传中的拒绝服务 (DoS) CVE-2025-48988
Tomcat 对多部分请求中的请求参数和部件使用相同的限制。由于上传的部件也包含必须保留的头部,因此处理多部分请求可能会导致显著更高的内存使用。一个特制的请求,如果使用大量部件,可能会触发过度的内存使用,从而导致拒绝服务 (DoS)。现在部件的最大数量是可配置的(在连接器上设置 maxPartCount),默认值为 10 个部件。
这已通过提交 ee8042ff 修复。
该问题于 2025 年 6 月 16 日公开。
受影响版本:9.0.0.M1 到 9.0.105
重要:Commons FileUpload 中的拒绝服务 (DoS) CVE-2025-48976
Apache Commons FileUpload 对与多部分请求相关的头部大小提供了 10kB 的硬编码限制。一个特制的请求,如果使用大量部件和大型头部,可能会触发过度的内存使用,从而导致拒绝服务 (DoS)。现在此限制是可配置的(在连接器上设置 maxPartHeaderSize),默认值为 512 字节。
这已通过提交 97790a35 修复。
该问题于 2025 年 6 月 16 日公开。
受影响版本:9.0.0.M1 到 9.0.105
2025-05-12 在 Apache Tomcat 9.0.105 中修复
低:CGI 安全约束绕过 CVE-2025-46701
在大小写不敏感的文件系统上运行,并且为映射到 CGI Servlet 的 URL 的 pathInfo
组件配置了安全约束时,可以通过特制的 URL 绕过这些安全约束。
这已通过提交 8df00018 和 8cb95ff0 修复。
该问题于 2025 年 5 月 29 日公开。
受影响版本:9.0.0.M1 到 9.0.104
2025-04-08 在 Apache Tomcat 9.0.104 中修复
注意:以下问题已在 Apache Tomcat 9.0.103 中修复,但 9.0.103 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.104 才能获取包含这些问题修复的版本,但版本 9.0.103 不在受影响版本列表中。
低:重写规则绕过 CVE-2025-31651
对于一部分不太可能的重写规则配置,特制请求可能绕过某些重写规则。如果这些重写规则有效地强制执行了安全约束,则这些约束可能会被绕过。
这已通过提交 ee3ab548 和 175dc75f 修复。
该问题于 2025 年 4 月 28 日公开。
受影响版本:9.0.0.M1 到 9.0.102
重要:通过无效 HTTP priority 头部实现拒绝服务 (DoS) CVE-2025-31650
某些无效 HTTP priority 头部处理错误导致失败请求未完全清理,从而造成内存泄漏。大量此类请求可能触发 OutOfMemoryException,导致拒绝服务。
这已通过提交 40ae788c、 b98e74f5 和 b7674782 修复。
该问题于 2025 年 4 月 28 日公开。
受影响版本:9.0.76 到 9.0.102
2025-02-10 在 Apache Tomcat 9.0.99 中修复
重要:通过启用写入的默认 Servlet 进行远程代码执行和/或信息泄露和/或将恶意内容添加到上传文件 - CVE-2025-24813
部分 PUT 的原始实现使用了一个临时文件,该文件基于用户提供的文件名和路径,并将路径分隔符替换为“.”。
如果满足以下所有条件,恶意用户就能够查看安全敏感文件和/或向这些文件注入内容:
- 默认 Servlet 启用写入(默认禁用)
- 支持部分 PUT(默认启用)
- 安全敏感上传的目标 URL 是公共上传目标 URL 的子目录
- 攻击者知道正在上传的安全敏感文件的名称
- 安全敏感文件也通过部分 PUT 上传
如果满足以下所有条件,恶意用户就能够执行远程代码执行:
- 默认 Servlet 启用写入(默认禁用)
- 支持部分 PUT(默认启用)
- 应用程序正在使用 Tomcat 基于文件的会话持久化,并使用默认存储位置
- 应用程序包含可能在反序列化攻击中利用的库
这已通过提交 eb61aade 修复。
该问题于 2025 年 3 月 10 日公开。
受影响版本:9.0.0.M1 到 9.0.98
2024-12-09 在 Apache Tomcat 9.0.98 中修复
重要:通过启用写入的默认 Servlet 进行远程代码执行。CVE-2024-50379 的缓解措施不完整 - CVE-2024-56337
之前针对 CVE-2024-50379 的缓解措施不完整。除了升级到 9.0.98 或更高版本外,在大小写不敏感的文件系统上运行 Tomcat 且默认 servlet 启用写入的用户可能需要根据所使用的 Java 版本进行额外配置:
- 在 Java 8 或 Java 11 上运行:系统属性
sun.io.useCanonCaches
必须显式设置为 false
(它默认为 true
)
- 在 Java 17 上运行:系统属性
sun.io.useCanonCaches
(如果设置)必须设置为 false
(它默认为 false
)
- 在 Java 21 及更高版本上运行:无需进一步配置(系统属性和有问题的缓存已被移除)
该问题于 2024 年 12 月 20 日公开。
受影响版本:9.0.0.M1 到 9.0.97
低:示例 Web 应用程序中的拒绝服务 (DoS) CVE-2024-54677
示例 Web 应用程序中的许多示例未对上传数据设置限制,这可能触发 OutOfMemoryError 导致拒绝服务。
这已通过提交 1d88dd3f、 721544ea、 84065e26、 3315a902、 c2f7ce21、 75ff7e86、 4d5cc653、 84c4af76 和 9ffd23fc 修复。
该问题于 2024 年 12 月 17 日公开。
受影响版本:9.0.0.M1 到 9.0.97
重要:通过启用写入的默认 Servlet 进行远程代码执行 CVE-2024-50379
如果默认 Servlet 在大小写不敏感的文件系统上启用了写入(readonly
初始化参数设置为非默认值 false
),则在负载下并发读取和上传同一文件可能会绕过 Tomcat 的大小写敏感性检查,并导致上传的文件被视为 JSP,从而导致远程代码执行。
这已通过提交 43b507eb 和 631500b0 修复。
该问题于 2024 年 12 月 17 日公开。
受影响版本:9.0.0.M1 到 9.0.97
2024-11-09 在 Apache Tomcat 9.0.97 中修复
重要:生成 JSP 中的跨站脚本 (XSS) CVE-2024-52318
针对改进 69333 的修复导致池化的 JSP 标签在使用后未能释放,这可能导致某些标签的输出未按预期进行转义。这种未转义的输出可能导致跨站脚本 (XSS)。
这已通过提交 9813c5dd 修复。
该问题于 2024 年 11 月 18 日公开。
受影响版本:9.0.96
2024-10-09 在 Apache Tomcat 9.0.96 中修复
重要:请求和/或响应混淆 CVE-2024-52317
HTTP/2 请求使用的请求和响应回收不当可能导致用户之间的请求和/或响应混淆。
这已通过提交 47307ee2 修复。
此问题由 Tomcat 安全团队于 2024 年 10 月 1 日发现。该问题于 2024 年 11 月 18 日公开。
受影响版本:9.0.92 到 9.0.95
低:身份验证绕过 CVE-2024-52316
如果 Tomcat 配置为使用自定义 Jakarta 认证(前身为 JASPIC)ServerAuthContext 组件,该组件可能在认证过程中抛出异常,而未显式设置 HTTP 状态以指示失败,则认证可能未失败,从而允许用户绕过认证过程。目前没有已知行为如此的 Jakarta 认证组件。
这已通过提交 7532f9dc 修复。
此问题由 Tomcat 安全团队于 2024 年 9 月 19 日发现。该问题于 2024 年 11 月 18 日公开。
受影响版本:9.0.0-M1 到 9.0.95
2024-06-19 在 Apache Tomcat 9.0.90 中修复
重要:拒绝服务 (DoS) CVE-2024-34750
在处理 HTTP/2 流时,Tomcat 未能正确处理某些过量 HTTP 头部的情况。这导致活动 HTTP/2 流的计数错误,进而导致使用了不正确的无限超时,使得本应关闭的连接保持打开状态。
这已通过提交 9fec9a82 修复。
此问题于 2024 年 5 月 4 日报告给 Tomcat 安全团队。该问题于 2024 年 7 月 3 日公开。
受影响版本:9.0.0-M1 到 9.0.89
重要:拒绝服务 (DoS) CVE-2024-38286
在任何平台上的某些配置下,Tomcat 允许攻击者通过滥用 TLS 握手过程导致 OutOfMemoryError。
这已通过提交 76c5cce6 修复。
此问题于 2024 年 6 月 4 日报告给 Tomcat 安全团队。该问题于 2024 年 9 月 23 日公开。
受影响版本:9.0.13 到 9.0.89
2024-02-19 在 Apache Tomcat 9.0.86 中修复
重要:拒绝服务 (DoS) CVE-2024-23672
WebSocket 客户端可能保持 WebSocket 连接打开,导致资源消耗增加。
这已通过提交 52d6650e 修复。
此问题由 Tomcat 安全团队于 2024 年 1 月 17 日发现。该问题于 2024 年 3 月 13 日公开。
受影响版本:9.0.0-M1 到 9.0.85
重要:拒绝服务 (DoS) CVE-2024-24549
在处理 HTTP/2 请求时,如果请求超出了任何配置的头部限制,相关的 HTTP/2 流在所有头部处理完毕之前不会被重置。
这已通过提交 8e03be9f 修复。
此问题于 2024 年 1 月 24 日报告给 Tomcat 安全团队。该问题于 2024 年 3 月 13 日公开。
受影响版本:9.0.0-M1 到 9.0.85
2023-11-15 在 Apache Tomcat 9.0.83 中修复
重要:请求走私 CVE-2023-46589
Tomcat 未正确解析 HTTP 尾部头部。一个特制的、超出头部大小限制的尾部头部可能导致 Tomcat 将单个请求视为多个请求,从而在反向代理后可能导致请求走私。
这已通过提交 7a2d8818 修复。
此问题于 2023 年 10 月 20 日报告给 Tomcat 安全团队。该问题于 2023 年 11 月 28 日公开。
受影响版本:9.0.0-M1 到 9.0.82
2023-10-10 在 Apache Tomcat 9.0.81 中修复
重要:请求走私 CVE-2023-45648
Tomcat 未正确解析 HTTP 尾部头部。一个特制的、无效的尾部头部可能导致 Tomcat 将单个请求视为多个请求,从而在反向代理后可能导致请求走私。
这已通过提交 59583245 修复。
此问题于 2023 年 9 月 12 日报告给 Tomcat 安全团队。该问题于 2023 年 10 月 10 日公开。
受影响版本:9.0.0-M1 到 9.0.80
重要:拒绝服务 (DoS) CVE-2023-44487
Tomcat 的 HTTP/2 实现容易受到快速重置攻击。拒绝服务通常表现为 OutOfMemoryError
。
这已通过提交 6d1a9fd6 修复。
此问题于 2023 年 9 月 14 日报告给 Tomcat 安全团队。该问题于 2023 年 10 月 10 日公开。
受影响版本:9.0.0-M1 到 9.0.80
重要:信息泄露 CVE-2023-42795
在下一个请求/响应重用之前,回收各种内部对象(包括请求和响应)时,一个错误可能导致 Tomcat 跳过回收过程的某些部分,从而导致信息从当前请求/响应泄露到下一个。
这已通过提交 44d05d75 修复。
此问题由 Tomcat 安全团队于 2023 年 9 月 13 日发现。该问题于 2023 年 10 月 10 日公开。
受影响版本:9.0.0-M1 到 9.0.80
低:拒绝服务 (DoS) CVE-2023-42794
Tomcat 内部的 Commons FileUpload 分支包含了一个未发布、正在进行中的重构,如果 Web 应用程序打开了上传文件的流但未能关闭该流,则在 Windows 上可能暴露拒绝服务漏洞。该文件将永远不会从磁盘中删除,从而可能因磁盘满而最终导致拒绝服务。
这已通过提交 43b882b8 修复。
此问题于 2023 年 9 月 1 日报告给 Tomcat 安全团队。该问题于 2023 年 10 月 10 日公开。
受影响版本:9.0.70 到 9.0.80
2023-08-25 在 Apache Tomcat 9.0.80 中修复
中等:开放重定向 CVE-2023-41080
如果 ROOT(默认)Web 应用程序配置为使用 FORM 认证,则特制的 URL 可能会被用来触发重定向到攻击者选择的 URL。
这已通过提交 77c0ce2d 修复。
此问题于 2023 年 8 月 17 日报告给 Tomcat 安全团队。该问题于 2023 年 8 月 22 日公开。
受影响版本:9.0.0-M1 到 9.0.79
2023-05-10 在 Apache Tomcat 9.0.75 中修复
重要:信息泄露 CVE-2023-34981
针对 bug 66512 的修复引入了一个回归问题,该问题已作为 bug 66591 修复。此回归问题意味着,如果响应未设置任何 HTTP 头部,则不会发送 AJP SEND_HEADERS
消息,这反过来又意味着至少一个基于 AJP 的代理 (mod_proxy_ajp) 会将上一个请求的响应头部用于当前请求,从而导致信息泄露。
这已通过提交 2f0ca237 修复。
此问题于 2023 年 5 月 24 日报告给 Tomcat 安全团队。该问题于 2023 年 6 月 21 日公开。
受影响版本:9.0.74
2023-04-18 在 Apache Tomcat 9.0.74 中修复
中等:Apache Tomcat 拒绝服务 (DoS) CVE-2023-28709
针对 CVE-2023-24998 的修复不完整。如果使用了非默认的 HTTP 连接器设置,使得可以通过查询字符串参数达到 maxParameterCount
,并且提交的请求在查询字符串中提供了恰好 maxParameterCount
个参数,则可以绕过上传请求部件的限制,从而可能发生拒绝服务攻击。
这已通过提交 fbd81421 修复。
此问题于 2023 年 3 月 13 日报告给 Tomcat 安全团队。该问题于 2023 年 5 月 22 日公开。
受影响版本:9.0.71 到 9.0.73
2023-02-23 在 Apache Tomcat 9.0.72 中修复
重要:Apache Tomcat 信息泄露 CVE-2023-28708
当使用 RemoteIpFilter
处理从反向代理通过 HTTP 接收的请求(其中包含 X-Forwarded-Proto
头部并设置为 https
)时,Tomcat 创建的会话 Cookie 不包含 secure 属性。这可能导致用户代理通过不安全通道传输会话 Cookie。
这已通过提交 3b512307 修复。
66471 于 2023 年 2 月 8 日公开报告。Tomcat 安全团队于 2023 年 2 月 9 日识别出其安全影响。该问题于 2023 年 3 月 22 日公开。
受影响版本:9.0.0-M1 到 9.0.71
2023-01-13 在 Apache Tomcat 9.0.71 中修复
重要:Apache Tomcat 拒绝服务 (DoS) CVE-2023-24998
Apache Tomcat 使用 Apache Commons FileUpload 的重命名副本,以提供 Jakarta Servlet 规范中定义的文件上传功能。因此,Apache Tomcat 也容易受到 Apache Commons FileUpload 漏洞 CVE-2023-24998 的影响,因为对处理的请求部件数量没有限制。这导致攻击者可能通过恶意上传或一系列上传触发拒绝服务 (DoS)。
这已通过提交 cf77cc54 修复。
此问题于 2022 年 12 月 11 日报告给 Apache Tomcat 安全团队。该问题于 2023 年 2 月 20 日公开。
受影响版本:9.0.0-M1 到 9.0.70
2022-11-14 在 Apache Tomcat 9.0.69 中修复
低:Apache Tomcat JsonErrorReportValve 注入 CVE-2022-45143
JsonErrorReportValve
未对 type
、message
或 description
值进行转义。在某些情况下,这些值是由用户提供的数据构建的,因此用户可能提供导致 JSON 输出无效或被篡改的值。
这已通过提交 b336f4e5 修复。
此问题由 Apache Tomcat 安全团队于 2022 年 9 月 2 日发现。该问题于 2023 年 1 月 3 日公开。
受影响版本:9.0.40 到 9.0.68
2022-10-07 在 Apache Tomcat 9.0.68 中修复
低:Apache Tomcat 请求走私 CVE-2022-42252
如果 Tomcat 配置为通过将 rejectIllegalHeader
设置为 false
(非默认值)来忽略无效 HTTP 头部,则 Tomcat 不会拒绝包含无效 Content-Length
头部 的请求。如果 Tomcat 位于未能拒绝包含无效头部请求的反向代理之后,这可能导致请求走私攻击。
这已通过提交 4c7f4fd0 修复。
此问题于 2022 年 9 月 29 日报告给 Apache Tomcat 安全团队。该问题于 2022 年 10 月 31 日公开。
受影响版本:9.0.0-M1 到 9.0.67
2022-07-20 在 Apache Tomcat 9.0.65 中修复
低:Apache Tomcat 示例 Web 应用程序中的跨站脚本 (XSS) CVE-2022-34305
示例 Web 应用程序中的表单认证示例未经过滤地显示了用户提供的数据,从而暴露了跨站脚本 (XSS) 漏洞。
这已通过提交 8b60af90 修复。
此问题于 2022 年 6 月 22 日报告给 Apache Tomcat 安全团队。该问题于 2022 年 6 月 23 日公开。
受影响版本:9.0.30 到 9.0.64
2022-05-16 在 Apache Tomcat 9.0.63 中修复
低:Apache Tomcat EncryptInterceptor 拒绝服务 (DoS) CVE-2022-29885
EncryptInterceptor 的文档错误地声明它使得 Tomcat 集群能够在不信任的网络上运行。这是不正确的。尽管 EncryptInterceptor 确实提供了保密性和完整性保护,但它并不能防御在任何不信任网络上运行相关的所有风险,特别是拒绝服务 (DoS) 风险。
这已通过提交 eaafd282 修复。
此问题由 4ra1n 于 2022 年 4 月 17 日报告给 Apache Tomcat 安全团队。该问题于 2022 年 5 月 10 日公开。
受影响版本:9.0.13 到 9.0.62
2022 年 4 月 1 日 在 Apache Tomcat 9.0.62 中修复
注意:以下问题已在 Apache Tomcat 9.0.61 中修复,但 9.0.61 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.62 才能获取包含这些问题修复的版本,但版本 9.0.61 不在受影响版本列表中。
高:信息泄露 CVE-2021-43980
在 Tomcat 10 中引入并回溯到 Tomcat 9.0.47 及更高版本的阻塞读写简化实现暴露了一个长期存在(但极难触发)的并发错误,该错误可能导致客户端连接共享 Http11Processor 实例,从而导致响应或部分响应被错误的客户端接收。
这已通过提交 170e0f79 修复。
此问题由 Adam Thomas、Richard Hernandez 和 Ryan Schmitt 于 2021 年 11 月 11 日报告给 Apache Tomcat 安全团队。该问题于 2022 年 9 月 28 日公开。
受影响版本:9.0.0-M1 到 9.0.60
2022 年 1 月 20 日 在 Apache Tomcat 9.0.58 中修复
注意:以下问题已在 Apache Tomcat 9.0.57 中修复,但 9.0.57 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.58 才能获取包含这些问题修复的版本,但版本 9.0.57 不在受影响版本列表中。
低:本地权限提升 CVE-2022-23181
针对 bug CVE-2020-9484 的修复引入了一个“检查时与使用时”的漏洞,该漏洞允许本地攻击者以 Tomcat 进程所使用的用户的权限执行操作。此问题仅在 Tomcat 配置为使用 FileStore 持久化会话时才可被利用。
这已通过提交 1385c624 修复。
此问题由越南 Viettel Cyber Security 的 Trung Pham 于 2021 年 12 月 10 日报告给 Apache Tomcat 安全团队。该问题于 2022 年 1 月 26 日公开。
受影响版本:9.0.35 到 9.0.56
2021 年 10 月 1 日 在 Apache Tomcat 9.0.54 中修复
重要:拒绝服务 (DoS) CVE-2021-42340
针对 bug 63362 的修复引入了一个内存泄漏。用于收集 HTTP 升级连接指标的对象在 WebSocket 连接关闭后未被释放。这导致内存泄漏,随着时间的推移,可能通过 OutOfMemoryError 导致拒绝服务。
这已通过提交 80f1438e 修复。
此内存泄漏问题于 2021 年 9 月 23 日通过用户邮件列表公开报告。Tomcat 安全团队于同日识别出其安全影响。该问题于 2021 年 10 月 14 日公开。
受影响版本:9.0.40 到 9.0.53
2021 年 6 月 15 日 在 Apache Tomcat 9.0.48 中修复
注意:以下问题已在 Apache Tomcat 9.0.47 中修复,但 9.0.47 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.48 才能获取包含此问题修复的版本,但版本 9.0.47 不在受影响版本列表中。
重要:请求走私 CVE-2021-33037
在某些情况下,Apache Tomcat 未能正确解析 HTTP transfer-encoding 请求头部,这可能导致在与反向代理一起使用时发生请求走私。具体来说:如果客户端声明只接受 HTTP/1.0 响应,Tomcat 会错误地忽略 transfer-encoding 头部;Tomcat 会遵守 identify 编码;并且 Tomcat 没有确保如果存在分块编码,它是最终编码。
这已通过提交 45d70a86、 05f9e8b0 和 a2c3dc4c 修复。
此问题由 NEU seclab 的 Bahruz Jabiyev、Steven Sprecher 和 Kaan Onarlioglu 于 2021 年 5 月 7 日报告给 Apache Tomcat 安全团队。该问题于 2021 年 7 月 12 日公开。
受影响版本:9.0.0.M1 到 9.0.46
2021 年 5 月 12 日 在 Apache Tomcat 9.0.46 中修复
低:身份验证弱点 CVE-2021-30640
JNDI Realm 执行的查询并非总是正确转义参数。参数值可能来源于用户提供的数据(例如用户名)以及管理员提供的配置数据。在有限的情况下,用户可能能够使用其用户名的变体进行身份验证,和/或绕过 LockOut Realm 提供的一些保护。
这已通过提交 c4df8d44、 749f3cc1、 c6b6e101、 91ecdc61、 e5006748、 b5585a9e、 32993201 和 3ce84512 修复。
此问题已作为 65224 公开报告。
受影响版本:9.0.0.M1 到 9.0.45
2021 年 4 月 6 日 在 Apache Tomcat 9.0.45 中修复
重要:拒绝服务 (DoS) CVE-2021-30639
在改进非阻塞 I/O 错误处理的更改中引入的一个错误意味着与请求对象关联的错误标志未在请求之间重置。这意味着一旦发生非阻塞 I/O 错误,该请求对象处理的所有未来请求都将失败。用户能够触发非阻塞 I/O 错误,例如通过断开连接,从而可能触发拒绝服务 (DoS)。
不使用非阻塞 I/O 的应用程序不受此漏洞影响。
这已通过提交 8ece47c4 修复。
此问题已作为 65203 公开报告。
受影响版本:9.0.44
2021 年 3 月 10 日 在 Apache Tomcat 9.0.44 中修复
重要:拒绝服务 (DoS) CVE-2021-41079
当 Tomcat 配置为使用 NIO+OpenSSL 或 NIO2+OpenSSL 进行 TLS 时,特制的网络数据包可能被用来触发无限循环,从而导致拒绝服务。
这已通过提交 d4b340fa 修复。
此问题最初由 Thomas Wozenilek 于 2021 年 2 月 26 日报告给 Apache Tomcat 安全团队,但未能确认。一个推测性修复已于 2021 年 3 月 3 日应用。2021 年 9 月 14 日,Infinite Campus 的 David Frankson 独立报告了该问题并提供了测试用例。这使得问题和推测性修复都得到了验证。该问题于 2021 年 9 月 15 日公开。
受影响版本:9.0.0-M1 到 9.0.43
重要:信息泄露 CVE-2024-21733
不完整的 POST 请求触发了错误响应,该响应可能包含来自另一个用户的先前请求的数据。
这已通过提交 86ccc439 修复。
此问题由 Sn1perSecurity LLC 的 xer0dayz 于 2023 年 12 月 20 日报告给 Apache Tomcat 安全团队。该问题于 2024 年 1 月 19 日公开。
受影响版本:9.0.0-M11 到 9.0.43
2021 年 2 月 2 日 在 Apache Tomcat 9.0.43 中修复
注意:以下问题已在 Apache Tomcat 9.0.42 中修复,但 9.0.42 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.43 才能获取包含这些问题修复的版本,但版本 9.0.42 不在受影响版本列表中。
低:针对 CVE-2020-9484 的修复不完整 CVE-2021-25329
针对 CVE-2020-9484 的修复不完整。在使用极不可能的极端配置情况下,Tomcat 实例仍然容易受到 CVE-2020-9484 的攻击。请注意,之前发布的针对 CVE-2020-9484 的先决条件和非升级缓解措施也适用于此问题。
这已通过提交 4785433a 修复。
此问题由越南 Viettel Cyber Security 的 Trung Pham 于 2021 年 1 月 12 日报告给 Apache Tomcat 安全团队。该问题于 2021 年 3 月 1 日公开。
受影响版本:9.0.0.M1 到 9.0.41
重要:h2c 的请求混淆 CVE-2021-25122
在响应新的 h2c 连接请求时,Apache Tomcat 可能将请求头部和少量请求体从一个请求复制到另一个请求,这意味着用户 A 和用户 B 都可以看到用户 A 请求的结果。
这已通过提交 d47c20a7 修复。
此问题由 Apache Tomcat 安全团队于 2021 年 1 月 11 日发现。该问题于 2021 年 3 月 1 日公开。
受影响版本:9.0.0.M1 到 9.0.41
2020 年 11 月 17 日 在 Apache Tomcat 9.0.40 中修复
重要:信息泄露 CVE-2021-24122
当使用 NTFS 文件系统从网络位置提供资源时,在某些配置下可能绕过安全约束和/或查看 JSP 的源代码。根本原因是 JRE API File.getCanonicalPath()
的意外行为,这又是由 Windows API (FindFirstFileW
) 在某些情况下的不一致行为引起的。
这已通过提交 935fc558 修复。
此问题由 Ilja Brander 于 2020 年 10 月 26 日报告给 Apache Tomcat 安全团队。该问题于 2021 年 1 月 14 日公开。
受影响版本:9.0.0.M1 到 9.0.39
中等:HTTP/2 请求头部混淆 CVE-2020-17527
在调查问题 64830 时,发现 Apache Tomcat 可能会重用 HTTP/2 连接上接收到的前一个流的 HTTP 请求头部值,用于后续流关联的请求。尽管这最有可能导致错误和 HTTP/2 连接的关闭,但仍可能导致信息在请求之间泄露。
这已通过提交 d56293f8 修复。
此问题由 Apache Tomcat 安全团队于 2020 年 11 月 10 日发现。该问题于 2020 年 12 月 3 日公开。
受影响版本:9.0.0-M1 到 9.0.39
2020 年 9 月 15 日 在 Apache Tomcat 9.0.38 中修复
中等:HTTP/2 请求混淆 CVE-2020-13943
如果 HTTP/2 客户端超出了连接的约定最大并发流数(违反了 HTTP/2 协议),则在该连接上发出的后续请求可能包含来自先前请求的 HTTP 头部(包括 HTTP/2 伪头部),而不是预期的头部。这可能导致用户看到非预期资源的响应。
这已通过提交 55911430 修复。
此问题由 Apache Tomcat 安全团队于 2020 年 7 月 23 日发现。该问题于 2020 年 10 月 12 日公开。
受影响版本:9.0.0.M1 到 9.0.37
2020 年 7 月 5 日 在 Apache Tomcat 9.0.37 中修复
重要:WebSocket 拒绝服务 (DoS) CVE-2020-13935
WebSocket 帧中的负载长度未正确验证。无效的负载长度可能触发无限循环。多个带有无效负载长度的请求可能导致拒绝服务。
这已通过提交 40fa74c7 修复。
此问题于 2020 年 6 月 28 日通过 Apache Bugzilla 实例公开报告,并提及高 CPU 使用率,但未具体提及拒绝服务。Apache Tomcat 安全团队于同日识别出相关的 DoS 风险。该问题于 2020 年 7 月 14 日公开。
受影响版本:9.0.0.M1 到 9.0.36
中等:HTTP/2 拒绝服务 (DoS) CVE-2020-13934
h2c 直接连接在升级到 HTTP/2 后未释放 HTTP/1.1 处理器。如果发出足够多的此类请求,可能会发生 OutOfMemoryException,从而导致拒绝服务。
这已通过提交 172977f0 修复。
此问题于 2020 年 6 月 22 日通过 Apache Tomcat 用户邮件列表公开报告,但未提及潜在的拒绝服务 (DoS) 风险。经过进一步讨论以确定重现该问题的必要步骤后,Apache Tomcat 安全团队于 2020 年 6 月 26 日识别出该问题的根本原因和相关的 DoS 风险。该问题于 2020 年 7 月 14 日公开。
受影响版本:9.0.0.M5 到 9.0.36
2020 年 6 月 7 日 在 Apache Tomcat 9.0.36 中修复
重要:HTTP/2 拒绝服务 (DoS) CVE-2020-11996
特制的一系列 HTTP/2 请求可能导致 CPU 占用率在数秒内居高不下。如果在并发的 HTTP/2 连接上发出足够多的此类请求,服务器可能会变得无响应。
这已通过提交 9a023168 修复。
此问题于 2020 年 5 月 21 日通过 Apache Tomcat 用户邮件列表公开报告,但未提及潜在的拒绝服务 (DoS) 风险。Apache Tomcat 安全团队于同日识别出 DoS 风险。该问题于 2020 年 6 月 25 日公开。
受影响版本:9.0.0.M1 到 9.0.35
2020 年 5 月 11 日 在 Apache Tomcat 9.0.35 中修复
重要:通过会话持久化进行远程代码执行 CVE-2020-9484
如果
- 攻击者能够控制服务器上文件的内容和名称;并且
- 服务器配置为使用
PersistenceManager
和 FileStore
;并且
PersistenceManager
配置了 sessionAttributeValueClassNameFilter="null"
(除非使用 SecurityManager
,否则为默认值)或足够宽松的过滤器以允许反序列化攻击者提供的对象;并且
- 攻击者知道从
FileStore
使用的存储位置到攻击者控制的文件的相对文件路径;
那么,使用特制的请求,攻击者将能够通过反序列化其控制的文件来触发远程代码执行。
注意:以上所有条件必须同时满足,攻击才能成功。
作为升级到 9.0.35 或更高版本的替代方案,用户可以为 PersistenceManager
配置适当的 sessionAttributeValueClassNameFilter
值,以确保只有应用程序提供的属性被序列化和反序列化。
这已通过提交 3aa8f28d 修复。
此问题由 pdd security research 的 jarvis threedr3am 于 2020 年 4 月 12 日报告给 Apache Tomcat 安全团队。该问题于 2020 年 5 月 20 日公开。
受影响版本:9.0.0.M1 到 9.0.34
2020 年 2 月 11 日 在 Apache Tomcat 9.0.31 中修复
重要:AJP 请求注入和潜在的远程代码执行 CVE-2020-1938
在使用 Apache JServ 协议 (AJP) 时,必须谨慎信任传入 Apache Tomcat 的连接。Tomcat 将 AJP 连接视为比(例如)类似的 HTTP 连接具有更高的信任级别。如果攻击者可以访问此类连接,他们可能会以令人惊讶的方式利用这些连接。在 Tomcat 9.0.31 之前,Tomcat 默认启用 AJP 连接器,该连接器侦听所有已配置的 IP 地址。预期(并在安全指南中建议)如果不需要,应禁用此连接器。
在此漏洞报告之前,攻击者直接访问 AJP 端口的已知风险是:
- 绕过基于客户端 IP 地址的安全检查
- 如果 Tomcat 配置为信任反向代理提供的认证数据,则绕过用户认证
此漏洞报告发现了一种机制,允许:
- 从 Web 应用程序中的任何位置(包括 WEB-INF 和 META-INF 目录或通过 ServletContext.getResourceAsStream() 可达的任何其他位置)返回任意文件
- 将 Web 应用程序中的任何文件作为 JSP 处理
此外,如果 Web 应用程序允许文件上传并将这些文件存储在 Web 应用程序内部(或攻击者能够通过其他方式控制 Web 应用程序的内容),那么结合将文件作为 JSP 处理的能力,就可能实现远程代码执行。
重要的是要注意,只有在 AJP 端口可供不受信任的用户访问时才需要采取缓解措施。希望采取深度防御方法并阻止允许返回任意文件和将文件作为 JSP 执行的途径的用户,可以升级到 Apache Tomcat 9.0.31 或更高版本。用户应注意,9.0.31 版本对默认 AJP 连接器配置进行了多项更改,以强化默认配置。因此,升级到 9.0.31 或更高版本的用户可能需要对其配置进行少量更改。
这已通过提交 0e8a50f0、 9ac90532、 64fa5b99、 7a1406a3 和 49ad3f95 修复。
此问题于 2020 年 1 月 3 日报告给 Apache Tomcat 安全团队。该问题于 2020 年 2 月 24 日公开。
受影响版本:9.0.0.M1 到 9.0.30
低:HTTP 请求走私 CVE-2020-1935
HTTP 头部解析代码使用了一种行尾 (EOL) 解析方法,允许将一些无效的 HTTP 头部解析为有效头部。如果 Tomcat 位于错误处理无效 Transfer-Encoding 头部(以特定方式)的反向代理之后,这可能导致 HTTP 请求走私。此类反向代理被认为是罕见的。
这已通过提交 8bfb0ff7 修复。
此问题由 @ZeddYu 于 2019 年 12 月 25 日报告给 Apache Tomcat 安全团队。该问题于 2020 年 2 月 24 日公开。
受影响版本:9.0.0.M1 到 9.0.30
低:HTTP 请求走私 CVE-2019-17569
9.0.28 中的重构引入了一个回归。回归的结果是无效的 Transfer-Encoding 头部被错误处理,如果 Tomcat 位于错误处理无效 Transfer-Encoding 头部(以特定方式)的反向代理之后,这可能导致 HTTP 请求走私。此类反向代理被认为是罕见的。
这已通过提交 060ecc5e 修复。
此问题由 @ZeddYu 于 2019 年 12 月 12 日报告给 Apache Tomcat 安全团队。该问题于 2020 年 2 月 24 日公开。
受影响版本:9.0.28 到 9.0.30
2019 年 12 月 12 日 在 Apache Tomcat 9.0.30 中修复
低:会话固定 CVE-2019-17563
在使用 FORM 认证时,存在一个狭窄的时间窗口,攻击者可以执行会话固定攻击。该窗口被认为太窄,难以实际利用,但为了谨慎起见,此问题已被视为一个安全漏洞。
这已通过提交 1ecba14e 修复。
此问题由 IBM 的 William Marlow 于 2019 年 11 月 19 日报告给 Apache Tomcat 安全团队。该问题于 2019 年 12 月 18 日公开。
受影响版本:9.0.0.M1 到 9.0.29
2019 年 11 月 21 日 在 Apache Tomcat 9.0.29 中修复
中等:本地权限提升 CVE-2019-12418
当 Tomcat 配置了 JMX 远程生命周期监听器时,没有访问 Tomcat 进程或配置文件权限的本地攻击者能够操纵 RMI 注册表,执行中间人攻击以捕获用于访问 JMX 接口的用户名和密码。攻击者随后可以使用这些凭据访问 JMX 接口并完全控制 Tomcat 实例。
JMX 远程生命周期监听器将在未来的 Tomcat 版本中被弃用,将在 Tomcat 10 中被移除,并可能在 2020 年 12 月 31 日之后的某个时间从所有 Tomcat 版本中移除。
用户还应注意 CVE-2019-2684,这是一个 JRE 漏洞,允许远程利用此问题。
这已通过提交 1fc9f589 修复。
此问题由越南 Viettel Cyber Security 的 An Trinh 于 2019 年 10 月 10 日报告给 Apache Tomcat 安全团队。该问题于 2019 年 12 月 18 日公开。
受影响版本:9.0.0.M1 到 9.0.28
2019 年 6 月 7 日 在 Apache Tomcat 9.0.21 中修复
重要:请求混淆 CVE-2022-25762
如果 Web 应用程序在 WebSocket 连接关闭的同时发送 WebSocket 消息,应用程序可能会在套接字关闭后继续使用它。在这种情况下触发的错误处理可能导致池化对象被两次放入池中。这可能导致后续连接并发使用同一对象,从而可能导致数据返回给错误的用户和/或出现其他错误。
这已通过提交 e2d5a040、 7046644b、 339b40bc 和 65fb1ee5 修复。
此问题由 Apache Tomcat 安全团队于 2021 年 12 月 21 日发现。该问题于 2022 年 5 月 12 日公开。
受影响版本:9.0.0.M1 到 9.0.20
2019 年 5 月 13 日 在 Apache Tomcat 9.0.20 中修复
重要:拒绝服务 (DoS) CVE-2019-10072
针对 CVE-2019-0199 的修复不完整,未能解决 HTTP/2 连接写入窗口耗尽问题。通过不发送连接窗口(流 0)的 WINDOW_UPDATE 消息,客户端能够导致服务器端线程阻塞,最终导致线程耗尽和拒绝服务 (DoS)。
这已通过提交 7f748eb6 和 ada725a5 修复。
此问题由趋势科技安全研究部门的 John Simpson 与趋势科技零日计划合作,于 2019 年 4 月 26 日报告给 Apache Tomcat 安全团队。该问题于 2019 年 6 月 20 日公开。
受影响版本:9.0.0.M1 到 9.0.19
2019 年 4 月 13 日 在 Apache Tomcat 9.0.19 中修复
注意:以下问题已在 Apache Tomcat 9.0.18 中修复,但 9.0.18 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.19 才能获取包含这些问题修复的版本,但版本 9.0.18 不在受影响版本列表中。
重要:Windows 上的远程代码执行 CVE-2019-0232
在 Windows 上运行且 enableCmdLineArguments 启用时,CGI Servlet 容易受到远程代码执行漏洞的影响,原因是 JRE 向 Windows 传递命令行参数的方式存在错误。CGI Servlet 默认禁用。CGI 选项 enableCmdLineArguments 在 Tomcat 9.0.x 中默认禁用。有关 JRE 行为的详细解释,请参阅Markus Wulftange 的博客和此存档的MSDN 博客。
这已通过提交 4b244d82 修复。
此问题由 Nightwatch Cybersecurity Research 发现,并于 2019 年 3 月 3 日通过欧盟 FOSSA-2 项目赞助的漏洞赏金计划报告给 Apache Tomcat 安全团队。该问题于 2019 年 4 月 10 日公开。
受影响版本:9.0.0.M1 到 9.0.17
低:SSI printenv 中的跨站脚本 (XSS) CVE-2019-0221
SSI printenv 命令回显用户提供的数据时未进行转义,因此容易受到跨站脚本 (XSS) 攻击。SSI 默认禁用。printenv 命令旨在用于调试,不太可能出现在生产网站中。
这已通过提交 15fcd166 修复。
此问题由 Nightwatch Cybersecurity Research 发现,并于 2019 年 3 月 7 日通过欧盟 FOSSA-2 项目赞助的漏洞赏金计划报告给 Apache Tomcat 安全团队。该问题于 2019 年 5 月 17 日公开。
受影响版本:9.0.0.M1 到 9.0.17
2019 年 2 月 8 日 在 Apache Tomcat 9.0.16 中修复
注意:以下问题已在 Apache Tomcat 9.0.15 中修复,但 9.0.15 发布候选版本的投票未通过。因此,尽管用户必须下载 9.0.16 才能获取包含这些问题修复的版本,但版本 9.0.15 不在受影响版本列表中。
重要:拒绝服务 (DoS) CVE-2019-0199
HTTP/2 实现接受了包含过多 SETTINGS
帧的流,并且允许客户端在不读取/写入请求/响应数据的情况下保持流打开。通过对利用 Servlet API 阻塞 I/O 的请求保持流打开,客户端能够导致服务器端线程阻塞,最终导致线程耗尽和拒绝服务 (DoS)。
这已在修订版本 1852698、 1852699、 1852700、 1852701、 1852702、 1852703、 1852704、 1852705、 1852706 和 a1cb1ac7 中修复。
此问题由 Red Hat, Inc. 的 Michal Karm Babacek 于 2019 年 1 月 4 日报告给 Apache Tomcat 安全团队,并由 Tomcat 安全团队识别出其他问题。该问题于 2019 年 3 月 25 日公开。
受影响版本:9.0.0.M1 到 9.0.14
2018 年 9 月 10 日 在 Apache Tomcat 9.0.12 中修复
中等:开放重定向 CVE-2018-11784
当默认的 servlet 将重定向返回到目录时(例如,当用户请求 /foo
时重定向到 /foo/
),攻击者可以使用精心构造的 URL 来使重定向生成到其选择的任何 URI。
此问题已在修订版本 1840055 中修复。
此问题由 Sergey Bobrov 于 2018 年 8 月 28 日报告给 Apache Tomcat 安全团队,并于 2018 年 10 月 3 日公开。
影响版本:9.0.0.M1 至 9.0.11
2018 年 6 月 25 日 已在 Apache Tomcat 9.0.10 中修复
低危:WebSocket 客户端缺少主机名验证 CVE-2018-8034
WebSocket 客户端在使用 TLS 时缺少主机名验证。现在默认已启用。
此问题已在修订版本 1833757 中修复。
此问题于 2018 年 6 月 11 日公开报告,并于 2018 年 7 月 22 日正式宣布为漏洞。
影响版本:9.0.0.M1 至 9.0.9
重要:信息泄露 CVE-2018-8037
如果异步请求在应用程序完成的同时,容器也触发了异步超时,则存在竞态条件,可能导致用户看到为其他用户准备的响应。NIO 和 NIO2 连接器中还存在一个额外问题,即当应用程序完成异步请求且容器同时超时时,它们未能正确跟踪连接的关闭。这也可能导致用户看到为另一位用户准备的响应。
此问题已在修订版本 1833825、1833831、1837530 和 1833906 中修复。
此问题由 Dmitry Treskunov 于 2018 年 6 月 16 日报告给 Apache Tomcat 安全团队,并于 2018 年 7 月 22 日公开。
影响版本:9.0.0.M9 至 9.0.9
未发布 已在 Apache Tomcat 9.0.9 中修复
低危:CORS 过滤器存在不安全默认设置 CVE-2018-8014
CORS 过滤器的默认设置不安全,并为所有源启用了 supportsCredentials
。预期 CORS 过滤器的用户会根据其环境进行适当配置,而不是使用默认配置。因此,预计大多数用户不会受到此问题的影响。
此问题已在修订版本 1831726 中修复。
此问题于 2018 年 5 月 1 日公开报告,并于 2018 年 5 月 16 日正式宣布为漏洞。
2018 年 5 月 3 日 已在 Apache Tomcat 9.0.8 中修复
重要:UTF-8 解码器中的一个错误可能导致拒绝服务攻击 CVE-2018-1336
UTF-8 解码器在处理增补字符时,不正确的溢出处理可能导致解码器进入无限循环,从而造成拒绝服务(Denial of Service)攻击。
此问题已在修订版本 1830373 中修复。
此问题于 2018 年 4 月 6 日公开报告,并于 2018 年 7 月 22 日正式宣布为漏洞。
影响版本:9.0.0.M1 至 9.0.7
2018 年 2 月 11 日 已在 Apache Tomcat 9.0.5 中修复
重要:安全约束注解应用过晚 CVE-2018-1305
通过 Servlet 注解定义的安全约束仅在 Servlet 加载后才应用。由于以这种方式定义的安全约束适用于 URL 模式及该点之下的任何 URL,因此根据 Servlet 加载的顺序,可能导致某些安全约束未被应用。这可能将资源暴露给未经授权访问的用户。
此问题已在修订版本 1823310 和 1824323 中修复。
此问题由 Apache Tomcat 安全团队于 2018 年 2 月 1 日发现,并于 2018 年 2 月 23 日公开。
影响版本:9.0.0.M1 至 9.0.4
重要:映射到上下文根的安全约束被忽略 CVE-2018-1304
URL 模式为 ""(空字符串)且精确映射到上下文根的,在用作安全约束定义的一部分时未被正确处理。这导致该约束被忽略。因此,未经授权的用户可能访问本应受保护的 Web 应用程序资源。只有 URL 模式为空字符串的安全约束受到影响。
此问题已在修订版本 1823306 中修复。
此问题于 2018 年 1 月 31 日作为 62067 公开报告,Apache Tomcat 安全团队在同一天识别了其安全隐患。该问题于 2018 年 2 月 23 日公开。
影响版本:9.0.0.M1 至 9.0.4
2017 年 11 月 30 日 已在 Apache Tomcat 9.0.2 中修复
低危:CGI 搜索算法文档错误 CVE-2017-15706
作为针对 bug 61201 修复的一部分,CGI Servlet 用来识别要执行哪个脚本的搜索算法描述得到了更新。此更新不正确。结果,某些脚本可能未能按预期执行,而其他脚本可能意外执行。请注意,CGI servlet 的行为在此方面保持不变。只有行为的文档是错误的,现已纠正。
此问题已在修订版本 1814825 中修复。
此问题由 Jan Michael Greiner 于 2017 年 9 月 17 日报告给 Apache Tomcat 安全团队,并于 2018 年 1 月 31 日公开。
影响版本:9.0.0.M22 至 9.0.1
2017 年 9 月 30 日 已在 Apache Tomcat 9.0.1 中修复
重要:远程代码执行 CVE-2017-12617
当启用了 HTTP PUT(例如,通过将默认 servlet 的 readonly
初始化参数设置为 false)时,可以通过精心构造的请求将 JSP 文件上传到服务器。然后可以请求此 JSP,并且其中包含的任何代码都将由服务器执行。
此问题已在修订版本 1809669、1809674、1809684 和 1809711 中修复。
此问题首先被公开报告,随后于 2017 年 9 月 20 日向 Apache Tomcat 安全团队提交了多份报告。
影响版本:9.0.0.M1 至 9.0.0
2017 年 6 月 26 日 已在 Apache Tomcat 9.0.0.M22 中修复
重要:安全约束绕过 CVE-2017-7675
HTTP/2 实现绕过了多项防止目录遍历攻击的安全检查。因此,可以使用精心构造的 URL 来绕过安全约束。
此问题已在修订版本 1796090 中修复。
此问题最初于 2017 年 5 月 24 日在 bug 61120 中报告为 URL 路径参数处理失败。Tomcat 安全团队在同一天识别了此问题的全部影响。该问题于 2017 年 8 月 10 日公开。
影响版本:9.0.0.M1 至 9.0.0.M21
中危:缓存投毒 CVE-2017-7674
CORS 过滤器未添加 HTTP Vary 头,以指示响应因 Origin 而异。这在某些情况下允许客户端和服务器端缓存投毒。
此问题已在修订版本 1795813 中修复。
此问题于 2017 年 5 月 16 日作为 bug 61101 报告。Tomcat 安全团队在同一天识别了此问题的全部影响。该问题于 2017 年 8 月 10 日公开。
影响版本:9.0.0.M1 至 9.0.0.M21
2017 年 5 月 10 日 已在 Apache Tomcat 9.0.0.M21 中修复
重要:安全约束绕过 CVE-2017-5664
Java Servlet 规范的错误页面机制要求,当发生错误且为该错误配置了错误页面时,原始请求和响应将被转发到错误页面。这意味着请求会以原始 HTTP 方法呈现给错误页面。
如果错误页面是静态文件,预期行为是无论实际 HTTP 方法为何,都像处理 GET 请求一样提供文件内容。Tomcat 的 Default Servlet 没有这样做。根据原始请求,这可能导致静态错误页面出现意外和不良结果,包括在 DefaultServlet 配置为允许写入时,自定义错误页面被替换或删除。
其他用户提供的错误页面的注意事项
- 除非另有明确编码,JSP 会忽略 HTTP 方法。用作错误页面的 JSP 必须确保它们将任何错误分派作为 GET 请求处理,无论实际方法为何。
- 默认情况下,Servlet 生成的响应确实取决于 HTTP 方法。用作错误页面的自定义 Servlet 必须确保它们将任何错误分派作为 GET 请求处理,无论实际方法为何。
此问题已在修订版本 1793468 和 1793487 中修复。
此问题由印度孟买 Tata Consultancy Services Ltd 的 Aniket Nandkishor Kulkarni 于 2017 年 4 月 21 日负责任地报告给 Apache Tomcat 安全团队,称其为一个允许绕过 OPTIONS 和 TRACE 请求限制的漏洞。Tomcat 安全团队于 2017 年 4 月 24 日识别了此问题的全部影响。该问题于 2017 年 6 月 6 日公开。
影响版本:9.0.0.M1 至 9.0.0.M20
2017 年 3 月 30 日 已在 Apache Tomcat 9.0.0.M19 中修复
重要:信息泄露 CVE-2017-5651
HTTP 连接器在 8.5.x 及后续版本中的重构,在文件发送处理中引入了一个回归。如果文件发送处理完成得很快,则 Processor 可能会被两次添加到处理器缓存中。这可能导致相同的 Processor 被用于多个请求,进而可能导致意外错误和/或响应混淆。
此问题已在修订版本 1788544 中修复。
此问题由 Apache Tomcat 安全团队于 2017 年 3 月 24 日发现,并于 2017 年 4 月 10 日公开。
影响版本:9.0.0.M1 至 9.0.0.M18
重要:拒绝服务 CVE-2017-5650
HTTP/2 连接的 GOAWAY 帧处理未能关闭与该连接关联的、当前正在等待 WINDOW_UPDATE 才能允许应用程序写入更多数据的流。这些等待中的流每个都消耗一个线程。因此,恶意客户端可以构造一系列 HTTP/2 请求,从而耗尽所有可用的处理线程。
此问题已在修订版本 1788460 中修复。
此问题由 Chun Han Hsiao 于 2017 年 3 月 11 日报告给 Apache Tomcat 安全团队,并于 2017 年 4 月 10 日公开。
影响版本:9.0.0.M1 至 9.0.0.M18
重要:信息泄露 CVE-2017-5647
在使用文件发送时,流水线请求处理中的一个错误导致在前一个请求的文件发送处理完成后,流水线请求丢失。这可能导致响应似乎是为错误的请求发送的。例如,发送请求 A、B 和 C 的用户代理可能会看到请求 A 的正确响应,但请求 B 却收到请求 C 的响应,而请求 C 则没有响应。
此问题已在修订版本 1788890 中修复。
此问题由 Apache Tomcat 安全团队于 2017 年 3 月 20 日发现,并于 2017 年 4 月 10 日公开。
影响版本:9.0.0.M1 至 9.0.0.M18
2017 年 3 月 13 日 已在 Apache Tomcat 9.0.0.M18 中修复
低危:信息泄露 CVE-2017-5648
在调查 bug 60718 时,发现对应用程序监听器的一些调用没有使用适当的 facade 对象。因此,在 SecurityManager 下运行不受信任的应用程序时,该不受信任的应用程序可能会保留对请求或响应对象的引用,从而访问和/或修改与另一个 Web 应用程序相关的信息。
此问题已在修订版本 1785774 中修复。
此问题由 Apache Tomcat 安全团队于 2017 年 3 月 20 日发现,并于 2017 年 4 月 10 日公开。
影响版本:9.0.0.M1 至 9.0.0.M17
2017 年 1 月 16 日 已在 Apache Tomcat 9.0.0.M17 中修复
注意:以下问题已在 Apache Tomcat 9.0.0.M16 中修复,但 9.0.0.M16 候选版本的发布投票未通过。因此,尽管用户必须下载 9.0.0.M17 才能获得包含此问题修复的版本,但版本 9.0.0.M16 未包含在受影响版本列表中。
中危:信息泄露 CVE-2016-8747
为了更广泛地使用 ByteBuffer 而进行的重构引入了一个回归,可能导致同一连接上的请求之间信息泄露。在反向代理后面运行时,这可能导致用户之间信息泄露。所有 HTTP 连接器变体都受到影响,但 HTTP/2 和 AJP 不受影响。
此问题已在修订版本 1774161 中修复。
此问题由 Apache Tomcat 安全团队于 2016 年 12 月 14 日发现,并于 2017 年 3 月 13 日公开。
影响版本:9.0.0.M11 至 9.0.0.M15
2016 年 12 月 8 日 已在 Apache Tomcat 9.0.0.M15 中修复
注意:以下问题已在 Apache Tomcat 9.0.0.M14 中修复,但 9.0.0.M14 候选版本的发布投票未通过。因此,尽管用户必须下载 9.0.0.M15 才能获得包含此问题修复的版本,但版本 9.0.0.M14 未包含在受影响版本列表中。
重要:信息泄露 CVE-2016-8745
NIO HTTP 连接器的文件发送代码的错误处理中存在一个 bug,导致当前 Processor 对象多次添加到 Processor 缓存中。这反过来意味着相同的 Processor 可以用于并发请求。共享 Processor 可能导致请求之间信息泄露,包括但不限于会话 ID 和响应正文。
此问题已在修订版本 1771853 中修复。
此问题由 Apache Tomcat 安全团队于 2016 年 12 月 8 日发现,并于 2016 年 12 月 12 日公开。
影响版本:9.0.0.M1 至 9.0.0.M13
2016 年 11 月 8 日 已在 Apache Tomcat 9.0.0.M13 中修复
注意:以下问题已在 Apache Tomcat 9.0.0.M12 中修复,但 9.0.0.M12 候选版本的发布投票未通过。因此,尽管用户必须下载 9.0.0.M13 才能获得包含这些问题修复的版本,但版本 9.0.0.M12 未包含在受影响版本列表中。
重要:远程代码执行 CVE-2016-8735
JmxRemoteLifecycleListener
未更新以考虑 Oracle 对 CVE-2016-3427 的修复。因此,使用此监听器的 Tomcat 安装仍然容易受到类似的远程代码执行漏洞的影响。此问题被评为重要级别而非关键级别,原因在于使用此监听器的安装数量较少,并且即使使用该监听器,JMX 端口也极不寻常地能被攻击者访问。
此问题已在修订版本 1767644 中修复。
此问题于 2016 年 10 月 19 日报告给 Apache Tomcat 安全团队,并于 2016 年 11 月 22 日公开。
影响版本:9.0.0.M1 至 9.0.0.M11
重要:拒绝服务 CVE-2016-6817
如果收到的 HTTP/2 标头大于可用缓冲区,HTTP/2 标头解析器会进入无限循环。这使得拒绝服务攻击成为可能。
此问题已在修订版本 1765794 中修复。
此问题于 2016 年 10 月 10 日作为 60232 报告,Apache Tomcat 安全团队在同一天识别了其安全隐患。该问题于 2016 年 11 月 22 日公开。
影响版本:9.0.0.M1 至 9.0.0.M11
重要:信息泄露 CVE-2016-6816
解析 HTTP 请求行的代码允许无效字符。这可以与同样允许无效字符但以不同方式解释的代理结合使用,将数据注入 HTTP 响应。通过操纵 HTTP 响应,攻击者可以毒化 Web 缓存、执行 XSS 攻击和/或从非其自己的请求中获取敏感信息。
此问题已在修订版本 1767641 中修复。
此问题于 2016 年 10 月 11 日报告给 Apache Tomcat 安全团队,并于 2016 年 11 月 22 日公开。
影响版本:9.0.0.M1 至 9.0.0.M11
2016 年 9 月 5 日 已在 Apache Tomcat 9.0.0.M10 中修复
低危:对全局资源的无限制访问 CVE-2016-6797
ResourceLinkFactory 未将 Web 应用程序对全局 JNDI 资源的访问限制在那些明确链接到 Web 应用程序的资源。因此,无论是否配置了显式 ResourceLink,Web 应用程序都可以访问任何全局 JNDI 资源。
此问题已在修订版本 1757271 中修复。
此问题由 Apache Tomcat 安全团队于 2016 年 1 月 18 日发现,并于 2016 年 10 月 27 日公开。
影响版本:9.0.0.M1 至 9.0.0.M9
低危:Security Manager 绕过 CVE-2016-6796
恶意 Web 应用程序能够通过操纵 JSP Servlet 的配置参数来绕过已配置的 SecurityManager。
此问题已在修订版本 1758487 和 1763232 中修复。
此问题由 Apache Tomcat 安全团队于 2015 年 12 月 27 日发现,并于 2016 年 10 月 27 日公开。
影响版本:9.0.0.M1 至 9.0.0.M9
低危:系统属性泄露 CVE-2016-6794
当配置了 SecurityManager 时,Web 应用程序读取系统属性的能力应由 SecurityManager 控制。恶意 Web 应用程序可以利用 Tomcat 配置文件中的系统属性替换功能绕过 SecurityManager,并读取不应可见的系统属性。
此问题已在修订版本 1754445 中修复。
此问题由 Apache Tomcat 安全团队于 2015 年 12 月 27 日发现,并于 2016 年 10 月 27 日公开。
影响版本:9.0.0.M1 至 9.0.0.M9
低危:Security Manager 绕过 CVE-2016-5018
恶意 Web 应用程序能够通过 Web 应用程序可访问的 Tomcat 实用程序方法绕过已配置的 SecurityManager。
此问题已在修订版本 1754714 和 1760300 中修复。
此问题由 HP 企业安全团队的 Alvaro Munoz 和 Alexander Mirosh 发现,并于 2016 年 7 月 5 日报告给 Apache Tomcat 安全团队。该问题于 2016 年 10 月 27 日公开。
影响版本:9.0.0.M1 至 9.0.0.M9
低危:时序攻击 CVE-2016-0762
如果提供的用户名不存在,Realm 实现不会处理提供的密码。这使得通过时序攻击确定有效用户名成为可能。请注意,默认配置包括 LockOutRealm,这使得此漏洞的利用难度更大。
此问题已在修订版本 1758499 中修复。
此问题由 Apache Tomcat 安全团队于 2016 年 1 月 1 日发现,并于 2016 年 10 月 27 日公开。
影响版本:9.0.0.M1 至 9.0.0.M9
2016 年 6 月 13 日 已在 Apache Tomcat 9.0.0.M8 中修复
注意:以下问题已在 Apache Tomcat 9.0.0.M7 中修复,但 9.0.0.M7 候选版本的发布投票未通过。因此,尽管用户必须下载 9.0.0.M8 才能获得包含这些问题修复的版本,但版本 9.0.0.M7 未包含在受影响版本列表中。
中危:拒绝服务 CVE-2016-3092
Apache Tomcat 使用 Apache Commons FileUpload 的重命名副本来实现 Servlet 规范的文件上传要求。在 Commons FileUpload 中发现了一个拒绝服务漏洞,当多部分边界的长度略小于用于读取上传文件的缓冲区大小(4096 字节)时,就会发生此漏洞。这导致文件上传过程所需的时间比边界为典型的几十字节长时延长了几个数量级。
此问题已在修订版本 1743700 中修复。
此问题由 TERASOLUNA 框架开发团队发现,并于 2016 年 5 月 9 日通过 JPCERT 报告给 Apache Commons 团队。该问题于 2016 年 6 月 21 日公开。
影响版本:9.0.0.M1 至 9.0.0.M6
2016 年 1 月 5 日 已在 Apache Tomcat 9.0.0.M3 中修复
中危:Security Manager 绕过 CVE-2016-0763
此问题仅影响在安全管理器下运行不受信任的 Web 应用程序的用户。
ResourceLinkFactory.setGlobalContext()
是一个公共方法,即使在安全管理器下运行,Web 应用程序也可以访问。这使得恶意 Web 应用程序能够注入恶意全局上下文,进而可用于干扰其他 Web 应用程序和/或读取和写入其他 Web 应用程序拥有的数据。
此问题已在修订版本 1725926 中修复。
此问题由 Tomcat 安全团队于 2016 年 1 月 18 日发现,并于 2016 年 2 月 22 日公开。
影响版本:9.0.0.M1 至 9.0.0.M2
注意:以下问题已在 Apache Tomcat 9.0.0.M2 中修复,但 9.0.0.M2 候选版本的发布投票未通过。因此,尽管用户必须下载 9.0.0.M3 才能获得包含这些问题修复的版本,但版本 9.0.0.M2 未包含在受影响版本列表中。
低危:目录泄露 CVE-2015-5345
当使用不以斜杠结尾的 URL 访问受安全约束保护的目录时,Tomcat 会重定向到带尾随斜杠的 URL,从而在处理安全约束之前确认目录的存在。因此,即使用户无权查看该目录,用户也可能确定目录是否存在。此问题也发生在 Web 应用程序的根目录下,在这种情况下,即使用户无权访问,也会确认 Web 应用程序的存在。
解决方案是在 DefaultServlet 中实现重定向,以便在重定向之前处理任何安全约束和/或安全强制过滤器。Tomcat 团队认识到移动重定向可能导致回归,因此引入了两个新的 Context 配置选项(mapperContextRootRedirectEnabled
和 mapperDirectoryRedirectEnabled
)。最初两者的默认值都为 false
,因为这更安全。然而,由于 Bug 58765 等回归问题,mapperContextRootRedirectEnabled
的默认值后来更改为 true,因为据认为此回归比能够确定 Web 应用程序是否部署在给定路径相关的安全风险更严重。
此问题已在修订版本 1715206、1716882 和 1716894 中修复。
此问题由 QCSec 的 Mark Koek 于 2015 年 10 月 12 日发现,并于 2016 年 2 月 22 日公开。
影响版本:9.0.0.M1
低危:会话固定 CVE-2015-5346
当回收 Request
对象以用于新请求时,requestedSessionSSL
字段未被回收。这意味着在下一个使用回收的 Request
对象处理的请求中提供的会话 ID 本不应被使用却可能被使用。这赋予客户端控制会话 ID 的能力。理论上,这可能被用作会话固定攻击的一部分,但这很难实现,因为攻击者无法强制受害者使用“正确”的 Request
对象。此外,还需要至少一个 Web 应用程序配置为使用 SSL 会话 ID 作为 HTTP 会话 ID。这并非常见配置。
此问题已在修订版本 1713184 和 1723414 中修复。
此问题由 Tomcat 安全团队于 2014 年 6 月 22 日发现,并于 2016 年 2 月 22 日公开。
影响版本:9.0.0.M1
中危:CSRF 令牌泄露 CVE-2015-5351
Manager 和 Host Manager 应用程序的索引页面在因对 Web 应用程序根目录的未经身份验证的请求而发出重定向时,包含了有效的 CSRF 令牌。如果攻击者可以访问 Manager 或 Host Manager 应用程序(通常这些应用程序只对内部用户开放,不暴露给互联网),那么该令牌可以被攻击者用来构造 CSRF 攻击。
此问题已在修订版本 1720652 和 1720655 中修复。
此问题由 Tomcat 安全团队于 2015 年 12 月 8 日发现,并于 2016 年 2 月 22 日公开。
影响版本:9.0.0.M1
低危:Security Manager 绕过 CVE-2016-0706
此问题仅影响在安全管理器下运行不受信任的 Web 应用程序的用户。
当配置了安全管理器时,恶意 Web 应用程序可以加载内部的 StatusManagerServlet。然后,该 Servlet 可以向恶意 Web 应用程序提供所有已部署应用程序的列表以及所有当前正在处理的 HTTP 请求行的列表。这可能将其他 Web 应用程序的敏感信息(例如会话 ID)暴露给该 Web 应用程序。
此问题已在修订版本 1722799 中修复。
此问题由 Tomcat 安全团队于 2015 年 12 月 27 日发现,并于 2016 年 2 月 22 日公开。
影响版本:9.0.0.M1
中危:Security Manager 绕过 CVE-2016-0714
此问题仅影响在安全管理器下运行不受信任的 Web 应用程序的用户。
Tomcat 提供了多种会话持久化机制。StandardManager
在重启后会持久化会话。PersistentManager
能够将会话持久化到文件、数据库或自定义的 Store
中。集群实现则将会话持久化到一个或多个额外的集群节点。所有这些机制都可能被利用来绕过安全管理器。会话持久化由具有 Tomcat 内部代码权限的 Tomcat 代码执行。通过将精心构造的对象放入会话中,恶意 Web 应用程序可能触发任意代码的执行。
此问题已在修订版本 1725263 和 1725914 中修复。
此问题由 Tomcat 安全团队于 2015 年 11 月 12 日发现,并于 2016 年 2 月 22 日公开。
影响版本:9.0.0.M1
不是 Tomcat 中的漏洞
严重:通过 log4j 进行的远程代码执行 CVE-2021-44228
Apache Tomcat 9.0.x 不依赖任何版本的 log4j。
部署在 Apache Tomcat 上的 Web 应用程序可能依赖 log4j。在这种情况下,您应该寻求应用程序供应商的支持。
可以将 Apache Tomcat 9.0.x 配置为使用 log4j 2.x 进行 Tomcat 的内部日志记录。这需要明确的配置和添加 log4j 2.x 库。任何已将 Tomcat 内部日志记录切换到 log4j 2.x 的人可能都需要解决此漏洞。
在大多数情况下,禁用有问题的功能将是最简单的解决方案。具体如何操作取决于所使用的 log4j 2.x 的确切版本。详细信息请参阅 log4j 2.x 安全页面。