内容

Apache Tomcat 4.x 漏洞

本页面列出了 Apache Tomcat® 4.x 已发布版本中修复的所有安全漏洞。每个漏洞都由 Apache Tomcat 安全团队给予一个安全影响评级——请注意,此评级可能因平台而异。我们还列出了已知受此漏洞影响的 Apache Tomcat 版本,如果漏洞尚未验证,则会用问号标记版本。

注意:不属于 Tomcat 漏洞但被错误地报告给 Tomcat 或 Tomcat 提供了解决方案的漏洞,列在本页面末尾。

请注意,Tomcat 4.0.x 和 4.1.x 已不再受支持。4.0.x 和 4.1.x 分支中的未来漏洞将不会被修复。用户应升级到 8.5.x 或更高版本以获取安全修复。

请将这些漏洞的评论或更正发送给Tomcat 安全团队

目录

Apache Tomcat 4.1.x 中将不会修复

中度:信息泄露 CVE-2005-4836

当与配置了 allowLinking="true" 的上下文一起使用时,已弃用的 HTTP/1.1 连接器不会拒绝包含空字节的请求 URI。未能拒绝空字节使攻击者能够获取这些上下文中的任何 JSP 页面的源代码。建议 Tomcat 4.1.x 用户使用默认的、受支持的 Coyote HTTP/1.1 连接器,该连接器不会出现此问题。目前没有计划为 Tomcat 4.1.x 发布此问题的更新。

影响:4.1.15-4.1.SVN

在 Apache Tomcat 4.1.40 中修复

重要:信息泄露 CVE-2008-5515

当使用从请求中获取的 RequestDispatcher 时,目标路径在查询字符串被删除之前被规范化。包含特殊构造的请求参数的请求可用于访问本应受安全约束保护或位于 WEB-INF 目录下的内容。

此问题已在修订版本 782763783292 中修复。

影响:4.1.0-4.1.39

重要:拒绝服务 CVE-2009-0033

如果 Tomcat 通过 Java AJP 连接器收到带有无效头的请求,它不会返回错误而是关闭 AJP 连接。如果此连接器是 mod_jk 负载均衡工作器的一部分,此成员将进入错误状态并被阻止使用大约一分钟。因此,此行为可用于使用精心构造的请求进行拒绝服务攻击。

此问题已在修订版本 781362 中修复。

影响:4.1.0-4.1.39

低:信息泄露 CVE-2009-0580

由于某些身份验证类中错误检查不足,Tomcat 允许通过提供非法 URL 编码的密码来枚举(暴力测试)用户名。当使用基于 FORM 的身份验证(j_security_check)和 MemoryRealm 时,攻击是可能的。请注意,在早期版本中,DataSourceRealm 和 JDBCRealm 也受到影响。

此问题已在修订版本 781382 中修复。

影响:4.1.0-4.1.39 (Memory Realm), 4.1.0-4.1.31 (JDBC Realm), 4.1.17-4.1.31 (DataSource Realm)

低:跨站脚本 CVE-2009-0781

示例 Web 应用程序中的日历应用程序包含一个 XSS 漏洞,原因是无效的 HTML 导致 XSS 过滤保护失效。

此问题已在修订版本 750927 中修复。

影响:4.1.0-4.1.39

低:信息泄露 CVE-2009-0783

Bug 2993645933 允许 Web 应用程序替换 Tomcat 用于处理 web.xml 和 tld 文件的 XML 解析器。在有限情况下,这些 bug 可能允许恶意 Web 应用程序查看和/或更改部署在 Tomcat 实例上的其他 Web 应用程序的 web.xml 和 tld 文件。

此问题已在修订版本 781708 中修复。

影响:4.1.0-4.1.39

在 Apache Tomcat 4.1.39 中修复

中度:会话劫持 CVE-2008-0128

当通过 https 使用 SingleSignOn Valve 时,Cookie JSESSIONIDSSO 在没有“secure”属性的情况下传输,导致它被传输到任何出于目的或错误通过 http 从同一服务器请求的内容。

此问题已在修订版本 684900 中修复。

影响:4.1.0-4.1.37

低:跨站脚本 CVE-2008-1232

HttpServletResponse.sendError() 调用中的消息参数不仅显示在错误页面上,还用作 HTTP 响应的原因短语。这可能包含 HTTP 头部中非法的字符。经过特殊构造的消息可能会导致任意内容被注入到 HTTP 响应中。对于成功的 XSS 攻击,未经筛选的用户提供的数据必须包含在消息参数中。

此问题已在修订版本 680947 中修复。

影响:4.1.0-4.1.37

重要:信息泄露 CVE-2008-2370

当使用 RequestDispatcher 时,目标路径在查询字符串被删除之前被规范化。包含特殊构造的请求参数的请求可用于访问本应受安全约束保护或位于 WEB-INF 目录下的内容。

此问题已在修订版本 680950 中修复。

影响:4.1.0-4.1.37

在 Apache Tomcat 4.1.37 中修复

重要:信息泄露 CVE-2005-3164

如果客户端指定 Content-Length 但在发送任何请求体之前断开连接,已弃用的 AJP 连接器会使用上一个请求的请求体处理请求。建议用户使用默认的、受支持的 Coyote AJP 连接器,该连接器不会出现此问题。

影响:4.0.1-4.0.6, 4.1.0-4.1.36

中度:跨站脚本 CVE-2007-1355

Tomcat 文档 webapp 中示例应用程序包含的 JSP 和 Servlet 在将用户提供的数据包含到输出中之前未进行转义。这导致了 XSS 攻击。这些页面已简化,不再在输出中使用任何用户提供的数据。

影响:4.0.1-4.0.6, 4.1.0-4.1.36

低:跨站脚本 CVE-2007-2449

示例 Web 应用程序中的 JSP 在将用户提供的数据包含到输出中之前未进行转义。这导致了 XSS 攻击。这些 JSP 现在在使用数据之前对其进行过滤。此问题可通过取消部署示例 Web 应用程序来缓解。请注意,建议不要在生产系统上安装示例 Web 应用程序。

影响:4.0.0-4.0.6, 4.1.0-4.1.36

低:跨站脚本 CVE-2007-2450

Manager Web 应用程序在将用户提供的数据包含到输出中之前未进行转义。这导致了 XSS 攻击。此应用程序现在在使用数据之前对其进行过滤。此问题可通过在管理任务完成后退出(关闭浏览器)应用程序来缓解。

影响:4.0.1-4.0.6, 4.1.0-4.1.36

低:会话劫持 CVE-2007-3382

Tomcat 错误地将 Cookie 值中的单引号字符(')视为分隔符。在某些情况下,这导致会话 ID 等信息泄露给攻击者。

影响:4.1.0-4.1.36

低:跨站脚本 CVE-2007-3383

当报告错误消息时,SendMailServlet(示例 Web 应用程序的一部分)在将用户提供的数据包含到输出中之前未进行转义。这导致了 XSS 攻击。此 Servlet 现在在使用数据之前对其进行过滤。此问题可通过取消部署示例 Web 应用程序来缓解。请注意,建议不要在生产系统上安装示例 Web 应用程序。

影响:4.0.0-4.0.6, 4.1.0-4.1.36

低:会话劫持 CVE-2007-3385

Tomcat 错误地处理了 Cookie 值中的字符序列 \"。在某些情况下,这导致会话 ID 等信息泄露给攻击者。

影响:4.1.0-4.1.36

低:会话劫持 CVE-2007-5333

CVE-2007-3385 的先前修复不完整。它没有考虑在 Cookie 值中使用引号或 %5C。

影响:4.1.0-4.1.36

重要:信息泄露 CVE-2007-5461

当 Tomcat 的 WebDAV servlet 配置用于上下文并启用了写入时,一些指定带有 SYSTEM 标签的实体的 WebDAV 请求可能导致任意文件内容返回给客户端。

影响:4.0.0-4.0.6, 4.1.0-4.1.36

在 Apache Tomcat 4.1.36 中修复

重要:信息泄露 CVE-2005-2090

具有多个 Content-Length 头的请求应被拒绝为无效。当多个组件(防火墙、缓存、代理和 Tomcat)处理一系列请求时,如果其中一个或多个请求包含多个 Content-Length 头,并且几个组件不拒绝请求并对使用哪个 Content-Length 头做出不同决策,攻击者可能污染 Web 缓存、执行 XSS 攻击并从其他请求(而非其自身)获取敏感信息。Tomcat 现在对具有多个 Content-Length 头的请求返回 400。

影响:4.0.0-4.0.6, 4.1.0-4.1.34

重要:目录遍历 CVE-2007-0450

此问题的修复不充分。httpd 的 JK 连接器模块中也需要修复。有关更多信息,请参阅 CVE-2007-1860

Tomcat 允许 '\'、'%2F' 和 '%5C' 作为路径分隔符。当 Tomcat 在配置为仅代理某些上下文的代理(包括但不限于带有 mod_proxy 和 mod_jk 的 Apache HTTP 服务器)后面使用时,包含 "/\../" 等字符串的 HTTP 请求可能允许攻击者绕过代理的上下文限制,并访问未代理的上下文。

Tomcat 已添加以下 Java 系统属性,以提供对 URL 中路径分隔符处理的额外控制(两个选项默认都为 false)

  • org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH: true|false
  • org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH: true|false

由于无法保证 Tomcat 处理所有 URL 的方式与代理服务器相同,因此 Tomcat 应始终像没有使用限制上下文访问的代理一样进行安全加固。

影响:4.0.0-4.0.6, 4.1.0-4.1.34

低:跨站脚本 CVE-2007-1358

显示客户端发送的 Accept-Language 头部值的网页如果假定 Accept-Language 头部值符合 RFC 2616,则容易受到跨站脚本攻击。在正常情况下,这不可能被利用,但已知旧版本的 Flash 播放器允许精心制作的恶意 Flash 文件发出带有此类自定义头部的请求。现在,Tomcat 在生成 getLocale()getLocales() 的响应时,会忽略不符合 RFC 2616 的 Accept-Language 头部值。直接使用原始头部值的应用程序不应假定头部符合 RFC 2616,而应适当地过滤这些值。

影响:4.0.0-4.0.6, 4.1.0-4.1.34

在 Apache Tomcat 4.1.35 中修复

低:信息泄露 CVE-2008-4308

Bug 40771 可能导致泄露之前请求的 POST 内容。要存在漏洞,必须在发生 ArrayIndexOutOfBoundsException 导致请求处理停止之前,将从输入流读取的内容泄露,例如通过将其写入响应并提交响应。

影响:4.1.32-4.1.34 (4.0.x 未知)

在 Apache Tomcat 4.1.32 中修复

低:信息泄露 CVE-2008-3271

Bug 25835 在极少数情况下(这仅在使用调试器强制两个线程的特定处理序列时重现)允许来自未经许可的 IP 地址的用户访问受扩展 RequestFilterValve 的 Valve 保护的上下文。这包括标准的 RemoteAddrValve 和 RemoteHostValve 实现。

影响:4.1.0-4.1.31

重要:信息泄露 CVE-2007-1858

默认的 SSL 配置允许使用不安全的密码套件,包括匿名密码套件。默认配置不再允许使用不安全的密码套件。

影响:4.1.28-4.1.31

低:跨站脚本 CVE-2006-7196

作为 JSP 示例一部分包含的日历应用程序易受跨站脚本攻击,因为它在将用户提供的数据包含在返回页面中之前未进行转义。

影响:4.0.0-4.0.6, 4.1.0-4.1.31

低:目录列表 CVE-2006-3835

当启用目录列表时,这是预期行为。分号 (;) 是路径参数的分隔符,因此在文件名之前插入一个分号会将请求更改为带有路径参数的目录请求。如果启用了目录列表,则会显示目录列表。为了响应此问题和其他目录列表问题,目录列表已更改为默认禁用。

影响:4.0.0-4.0.6, 4.1.0-4.1.31

低:跨站脚本 CVE-2005-4838

作为 JSP 示例和 Tomcat Manager 一部分包含的各种 JSP 易受跨站脚本攻击,因为它们在将用户提供的数据包含在返回页面中之前未进行转义。

影响:4.0.0-4.0.6, 4.1.0-4.1.31

重要:拒绝服务 CVE-2005-3510

根本原因是生成目录列表内容所需的相对昂贵的调用。如果启用了目录列表,每个目录中的文件数量应保持在最低限度。为了响应此问题,目录列表已更改为默认禁用。此外,已提出一个补丁,通过缓存目录列表来提高性能,特别是对于大型目录。

影响:4.0.0-4.0.6, 4.1.0-4.1.31

在 Apache Tomcat 4.1.29 中修复

中度:跨站脚本 CVE-2002-1567

未经修改的请求 URL 包含在 404 响应头中。此 URL 中的新行对客户端来说是头部分的结束。URL 的其余部分,包括脚本元素,被视为响应正文的一部分,客户端执行脚本。Tomcat 现在将响应头中可能不安全的字符替换为空格。

影响:4.1.0-4.1.28

在 Apache Tomcat 4.1.13, 4.0.6 中修复

重要:信息泄露 CVE-2002-1394

使用 invoker servlet 和默认 servlet 的特殊构造 URL 可以使攻击者获取 JSP 页面的源代码,或者在特殊情况下,获取本应受安全约束保护的静态资源,而无需正确认证。这是 CVE-2002-1148 的变种。

影响:4.0.0-4.0.5, 4.1.0-4.1.12

中度:跨站脚本 CVE-2002-0682

使用 invoker servlet 和各种内部类的特殊构造 URL 导致 Tomcat 抛出异常,其中包含来自格式错误请求的未转义信息。这使得 XSS 攻击成为可能。

影响:4.0.0-4.0.5, 4.1.0-4.1.12

在 Apache Tomcat 4.1.12, 4.0.5 中修复

重要:信息泄露 CVE-2002-1148

使用默认 servlet 的特殊构造 URL 可以使攻击者获取 JSP 页面的源代码。

影响:4.0.0-4.0.4, 4.1.0-4.1.11

在 Apache Tomcat 4.1.3 中修复

重要:拒绝服务 CVE-2002-0935

格式错误的 HTTP 请求可能导致请求处理线程无响应。一系列此类请求将导致所有请求处理线程以及整个 Tomcat 无响应。

影响:4.0.0-4.0.2?, 4.0.3, 4.0.4-4.0.6?, 4.1.0-4.1.2?

在 Apache Tomcat 4.1.0 中修复

重要:拒绝服务 CVE-2003-0866

格式错误的 HTTP 请求可能导致请求处理线程无响应。一系列此类请求将导致所有请求处理线程以及整个 Tomcat 无响应。

影响:4.0.0-4.0.6

低:信息泄露 CVE-2002-2006

作为示例一部分安装的 snoop 和故障排除 servlet 包含的输出标识了 Tomcat 安装路径。

影响:4.0.0-4.0.6

在 Apache Tomcat 4.0.2 中修复

低:信息泄露 CVE-2002-2009, CVE-2001-0917

文件名前面带有 '+/'、'>/'、'<' 或 '%20/' 的 JSP 文件请求,或文件名很长的 JSP 请求,将导致错误页面显示 JSP 文件的完整文件系统路径。

影响:4.0.0-4.0.1

在 Apache Tomcat 4.0.0 中修复

中度:安全管理器绕过 CVE-2002-0493

如果在解析 web.xml 时遇到错误,并且 Tomcat 配置为使用安全管理器,则 Tomcat 可能会在没有安全管理器的情况下启动。

影响:4.0.0 的预发布版本

未验证

低:安装路径泄露 CVE-2005-4703, CVE-2002-2008

此问题仅影响 Windows 操作系统。它无法在安装了 JDK 1.3.1、1.4.2、1.5.0 或 1.6.0 的 Windows XP Home 上重现。需要进一步调查以确定哪些 Windows 操作系统和 JDK 组合会表现出此问题。此问题的漏洞报告指出它已在 4.1.3 及更高版本中修复。

影响:4.0.3?

重要:拒绝服务 CVE-2002-1895

此问题仅影响将 IIS 与 Tomcat 和 AJP1.3 连接器结合使用的配置。它无法在安装了最新补丁的 Windows 2000 SP4 和安装了 JDK 1.3.1 的 Tomcat 4.0.4 上重现。此问题的漏洞报告指出它已在 4.1.10 及更高版本中修复。

影响:4.0.4?

不是 Tomcat 漏洞

重要:目录遍历 CVE-2008-2938

最初报告为 Tomcat 漏洞,此问题的根本原因是 JVM 未正确将 UTF-8 编码的 URL 解码为 UTF-8。当连接器使用 URIEncoding="UTF-8" 时,这会暴露目录遍历漏洞。此目录遍历仅限于 Web 应用程序的 docBase。

如果上下文配置了 allowLinking="true",则目录遍历漏洞将扩展到主机服务器的整个文件系统。

还应注意的是,当处理使用 UTF-8 编码的请求体时,设置 useBodyEncodingForURI="true" 与设置 URIEncoding="UTF-8" 具有相同的效果。

尽管根本原因很快被确定为 JVM 问题,并且它影响了来自多个供应商的多个 JVM,但决定将其报告为 Tomcat 漏洞,直到 JVM 供应商提供更新来解决此问题。有关您的 JVM 此问题状态的更多信息,请联系您的 JVM 供应商。

修订版本 681065 中实施了一个解决方法,可以防止此问题以及 JVM 中可能仍然存在的任何类似字符编码问题。此解决方法包含在 Tomcat 4.1.39 及更高版本中。

拒绝服务漏洞 CVE-2002-0936

所描述的问题要求攻击者能够在 Tomcat 服务器上植入 JSP 页面。如果攻击者可以做到这一点,那么服务器已经受到损害。在这种情况下,攻击者可以轻易添加一个调用 System.exit(1) 的页面,而不是依赖于内部 Sun 类中的 bug。