This page lists all security vulnerabilities fixed in released versions of Apache Tomcat® 9.x. Each vulnerability is given a security impact rating by the Apache Tomcat security team — please note that this rating may vary from platform to platform. We also list the versions of Apache Tomcat the flaw is known to affect, and where a flaw has not been verified list the version with a question mark.
Note: Vulnerabilities that are not Tomcat vulnerabilities but have either been incorrectly reported against Tomcat or where Tomcat provides a workaround are listed at the end of this page.
Please note that binary patches are never provided. If you need to
apply a source code patch, use the building instructions for the
Apache Tomcat version that you are using. For Tomcat 9.0 those are
building.html
and
BUILDING.txt
.
Both files can be found in the webapps/docs
subdirectory
of a binary distribution. You may also want to review the
Security Considerations
page in the documentation.
If you need help on building or configuring Tomcat or other help on following the instructions to mitigate the known vulnerabilities listed here, please send your questions to the public Tomcat Users mailing list
If you have encountered an unlisted security vulnerability or other unexpected behaviour that has security impact, or if the descriptions here are incomplete, please report them privately to the Tomcat Security Team. Thank you.
Important: Denial of Service
It was possible for a WebSocket client to keep a WebSocket connection open leading to increased resource consumption.
This was fixed with commit
This issue was identified by the Tomcat Security Team on 17 January 2024. The issue was made public on 13 March 2024.
Affects: 9.0.0-M1 to 9.0.85
Important: Denial of Service
When processing an HTTP/2 request, if the request exceeded any of the configured limits for headers, the associated HTTP/2 stream was not reset until after all of the headers had been processed.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 24 January 2024. The issue was made public on 13 March 2024.
Affects: 9.0.0-M1 to 9.0.85
Important: Request smuggling
Tomcat did not correctly parse HTTP trailer headers. A specially crafted trailer header that exceeded the header size limit could cause Tomcat to treat a single request as multiple requests leading to the possibility of request smuggling when behind a reverse proxy.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 20 October 2023. The issue was made public on 28 November 2023.
Affects: 9.0.0-M1 to 9.0.82
Important: Request smuggling
Tomcat did not correctly parse HTTP trailer headers. A specially crafted, invalid trailer header could cause Tomcat to treat a single request as multiple requests leading to the possibility of request smuggling when behind a reverse proxy.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 12 September 2023. The issue was made public on 10 October 2023.
Affects: 9.0.0-M1 to 9.0.80
Important: Denial of Service
Tomcat's HTTP/2 implementation was vulnerable to the rapid reset
attack. The denial of service typically manifested as an
OutOfMemoryError
.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 14 September 2023. The issue was made public on 10 October 2023.
Affects: 9.0.0-M1 to 9.0.80
Important: Information Disclosure
When recycling various internal objects, including the request and the response, prior to re-use by the next request/response, an error could cause Tomcat to skip some parts of the recycling process leading to information leaking from the current request/response to the next.
This was fixed with commit
This issue was identified by the Tomcat Security Team on 13 September 2023. The issue was made public on 10 October 2023.
Affects: 9.0.0-M1 to 9.0.80
Low: Denial of Service
Tomcat's internal fork of a Commons FileUpload included an unreleased, in progress refactoring that exposed a potential denial of service on Windows if a web application opened a stream for an uploaded file but failed to close the stream. The file would never be deleted from disk creating the possibility of an eventual denial of service due to the disk being full.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 1 September 2023. The issue was made public on 10 October 2023.
Affects: 9.0.70 to 9.0.80
Moderate: Open redirect
If the ROOT (default) web application is configured to use FORM authentication then it is possible that a specially crafted URL could be used to trigger a redirect to an URL of the attackers choice.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 17 August 2023. The issue was made public on 22 August 2023.
Affects: 9.0.0-M1 to 9.0.79
Important: Information disclosure
The fix for bug SEND_HEADERS
message would
be sent which in turn meant that at least one AJP based proxy
(mod_proxy_ajp) would use the response headers from the previous request
for the current request leading to an information leak.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 24 May 2023. The issue was made public on 21 June 2023.
Affects: 9.0.74
Moderate: Apache Tomcat denial of service
The fix for maxParameterCount
could be reached using query string parameters and a request was
submitted that supplied exactly maxParameterCount
parameters
in the query string, the limit for uploaded request parts could be
bypassed with the potential for a denial of service to occur.
This was fixed with commit
This issue was reported to the Tomcat Security Team on 13 March 2023. The issue was made public on 22 May 2023.
Affects: 9.0.71 to 9.0.73
Important: Apache Tomcat information disclosure
When using the RemoteIpFilter
with requests received from a
reverse proxy via HTTP that include the X-Forwarded-Proto
header set to https
, session cookies created by Tomcat did not
include the secure attribute. This could result in the user agent
transmitting the session cookie over an insecure channel.
This was fixed with commit
Affects: 9.0.0-M1 to 9.0.71
Important: Apache Tomcat denial of service
Apache Tomcat uses a packaged renamed copy of Apache Commons FileUpload
to provide the file upload functionality defined in the Jakarta Servlet
specification. Apache Tomcat was, therefore, also vulnerable to the
Apache Commons FileUpload vulnerability
This was fixed with commit
This issue was reported to the Apache Tomcat Security team on 11 December 2022. The issue was made public on 20 February 2023.
Affects: 9.0.0-M1 to 9.0.70
Low: Apache Tomcat JsonErrorReportValve injection
The JsonErrorReportValve
did not escape the
type
, message
or description
values. In some circumstances these are constructed from user provided
data and it was therefore possible for users to supply values that
invalidated or manipulated the JSON output.
This was fixed with commit
This issue was identified by the Apache Tomcat Security team on 2 September 2022. The issue was made public on 3 January 2023.
Affects: 9.0.40 to 9.0.68
Low: Apache Tomcat request smuggling
If Tomcat was configured to ignore invalid HTTP headers via setting
rejectIllegalHeader
to false
(not the default),
Tomcat did not reject a request containing an invalid
Content-Length
header making a request smuggling attack
possible if Tomcat was located behind a reverse proxy that also failed to
reject the request with the invalid header.
This was fixed with commit
This issue was reported to the Apache Tomcat Security team on 29 September 2022. The issue was made public on 31 October 2022.
Affects: 9.0.0-M1 to 9.0.67
Low: Apache Tomcat XSS in examples web application
The Form authentication example in the examples web application displayed user provided data without filtering, exposing a XSS vulnerability.
This was fixed with commit
This issue was reported to the Apache Tomcat Security team on 22 June 2022. The issue was made public on 23 June 2022.
Affects: 9.0.30 to 9.0.64
Low: Apache Tomcat EncryptInterceptor DoS
The documentation for the EncryptInterceptor incorrectly stated it enabled Tomcat clustering to run over an untrusted network. This was not correct. While the EncryptInterceptor does provide confidentiality and integrity protection, it does not protect against all risks associated with running over any untrusted network, particularly DoS risks.
This was fixed with commit
This issue was reported to the Apache Tomcat Security team by 4ra1n on 17 April 2022. The issue was made public on 10 May 2022.
Affects: 9.0.13 to 9.0.62
Note: The issue below was fixed in Apache Tomcat 9.0.61 but the release vote for the 9.0.61 release candidate did not pass. Therefore, although users must download 9.0.62 to obtain a version that includes a fix for these issues, version 9.0.61 is not included in the list of affected versions.
High: Information Disclosure
The simplified implementation of blocking reads and writes introduced in Tomcat 10 and back-ported to Tomcat 9.0.47 onwards exposed a long standing (but extremely hard to trigger) concurrency bug that could cause client connections to share an Http11Processor instance resulting in responses, or part responses, to be received by the wrong client.
This was fixed with commit
This issue was reported to the Apache Tomcat Security team by Adam Thomas, Richard Hernandez and Ryan Schmitt on 11 November 2021. The issue was made public on 28 September 2022.
Affects: 9.0.0-M1 to 9.0.60
Note: The issue below was fixed in Apache Tomcat 9.0.57 but the release vote for the 9.0.57 release candidate did not pass. Therefore, although users must download 9.0.58 to obtain a version that includes a fix for these issues, version 9.0.57 is not included in the list of affected versions.
Low: Local Privilege Escalation
The fix for bug
This was fixed with commit
This issue was reported to the Apache Tomcat Security team by Trung Pham of Viettel Cyber Security on 10 December 2021. The issue was made public on 26 January 2022.
Affects: 9.0.35 to 9.0.56
Important: Denial of Service
The fix for bug
This was fixed with commit
The memory leak was reported publicly via the users mailing list on 23 September 2021. The security implications were identified by the Tomcat Security team the same day. The issue was made public on 14 October 2021.
Affects: 9.0.40 to 9.0.53
Note: The issue below was fixed in Apache Tomcat 9.0.47 but the release vote for the 9.0.47 release candidate did not pass. Therefore, although users must download 9.0.48 to obtain a version that includes a fix for this issue, version 9.0.47 is not included in the list of affected versions.
Important: Request Smuggling
Apache Tomcat did not correctly parse the HTTP transfer-encoding request header in some circumstances leading to the possibility of request smuggling when used with a reverse proxy. Specifically: Tomcat incorrectly ignored the transfer-encoding header if the client declared it would only accept an HTTP/1.0 response; Tomcat honoured the identify encoding; and Tomcat did not ensure that, if present, the chunked encoding was the final encoding.
This was fixed with commits
This issue was reported to the Apache Tomcat Security team by Bahruz Jabiyev, Steven Sprecher and Kaan Onarlioglu of NEU seclab on 7 May 2021. The issue was made public on 12 July 2021.
Affects: 9.0.0.M1 to 9.0.46
Low: Authentication weakness
Queries made by the JNDI Realm did not always correctly escape parameters. Parameter values could be sourced from user provided data (eg user names) as well as configuration data provided by an administrator. In limited circumstances it was possible for users to authenticate using variations of their user name and/or to bypass some of the protection provided by the LockOut Realm.
This was fixed with commits
This issue was reported publicly as
Affects: 9.0.0.M1 to 9.0.45
Important: Denial of Service
An error introduced as part of a change to improve error handling during non-blocking I/O meant that the error flag associated with the Request object was not reset between requests. This meant that once a non-blocking I/O error occurred, all future requests handled by that request object would fail. Users were able to trigger non-blocking I/O errors, e.g. by dropping a connection, thereby creating the possibility of triggering a DoS.
This was fixed with commit
This issue was reported publicly as
Affects: 9.0.44
Important: Denial of Service
When Tomcat was configured to use NIO+OpenSSL or NIO2+OpenSSL for TLS, a specially crafted packet could be used to trigger an infinite loop resulting in a denial of service.
This was fixed with commit
This issue was first reported to the Apache Tomcat Security Team by Thomas Wozenilek on 26 February 2021 but could not be confirmed. A speculative fix was applied on 3 March 2021. On 14 September 2021 David Frankson of Infinite Campus independently reported the issue and included a test case. This allowed both the issue and the speculative fix to be verified. The issue was made public on 15 September 2021.
Affects: 9.0.0-M1 to 9.0.43
Important: Information Disclosure
Incomplete POST requests triggered an error response that could contain data from a previous request from another user.
This was fixed with commit
This issue was reported to the Apache Tomcat Security Team by xer0dayz from Sn1perSecurity LLC on 20 December 2023. The issue was made public on 19 January 2024.
Affects: 9.0.0-M11 to 9.0.43
Note: The issues below were fixed in Apache Tomcat 9.0.42 but the release vote for the 9.0.42 release candidate did not pass. Therefore, although users must download 9.0.43 to obtain a version that includes a fix for these issues, version 9.0.42 is not included in the list of affected versions.
Low: Fix for
The fix for
This was fixed with commit
This issue was reported to the Apache Tomcat Security team by Trung Pham of Viettel Cyber Security on 12 January 2021. The issue was made public on 1 March 2021.
Affects: 9.0.0.M1 to 9.0.41
Important: Request mix-up with h2c
When responding to new h2c connection requests, Apache Tomcat could duplicate request headers and a limited amount of request body from one request to another meaning user A and user B could both see the results of user A's request.
This was fixed with commit
This issue was identified by the Apache Tomcat Security team on 11 January 2021. The issue was made public on 1 March 2021.
Affects: 9.0.0.M1 to 9.0.41
Important: Information disclosure
When serving resources from a network location using the NTFS file system
it was possible to bypass security constraints and/or view the source
code for JSPs in some configurations. The root cause was the unexpected
behaviour of the JRE API File.getCanonicalPath()
which in
turn was caused by the inconsistent behaviour of the Windows API
(FindFirstFileW
) in some circumstances.
This was fixed with commit
This issue was reported the Apache Tomcat Security team by Ilja Brander on 26 October 2020. The issue was made public on 14 January 2021.
Affects: 9.0.0.M1 to 9.0.39
Moderate: HTTP/2 request header mix-up
While investigating issue
This was fixed with commit
This issue was identified by the Apache Tomcat Security team on 10 November 2020. The issue was made public on 3 December 2020.
Affects: 9.0.0-M1 to 9.0.39
Moderate: HTTP/2 request mix-up
If an HTTP/2 client exceeded the agreed maximum number of concurrent streams for a connection (in violation of the HTTP/2 protocol), it was possible that a subsequent request made on that connection could contain HTTP headers - including HTTP/2 pseudo headers - from a previous request rather than the intended headers. This could lead to users seeing responses for unexpected resources.
This was fixed with commit
This issue was identified by the Apache Tomcat Security team on 23 July 2020. The issue was made public on 12 October 2020.
Affects: 9.0.0.M1 to 9.0.37
Important: WebSocket DoS
The payload length in a WebSocket frame was not correctly validated. Invalid payload lengths could trigger an infinite loop. Multiple requests with invalid payload lengths could lead to a denial of service.
This was fixed with commit
This issue was reported publicly via the Apache Bugzilla instance on 28 June 2020 and included references to high CPU but no specific reference to denial of service. The associated DoS risks were identified by the Apache Tomcat Security Team the same day. The issue was made public on 14 July 2020.
Affects: 9.0.0.M1 to 9.0.36
Moderate: HTTP/2 DoS
An h2c direct connection did not release the HTTP/1.1 processor after the upgrade to HTTP/2. If a sufficient number of such requests were made, an OutOfMemoryException could occur leading to a denial of service.
This was fixed with commit
This issue was reported publicly via the Apache Tomcat Users mailing list on 22 June 2020 without reference to the potential for DoS. After further discussion to identify the steps necessary to reproduce the issue, the root cause of the issue and the associated DoS risks were identified by the Apache Tomcat Security Team on 26 June 2020. The issue was made public on 14 July 2020.
Affects: 9.0.0.M5 to 9.0.36
Important: HTTP/2 DoS
A specially crafted sequence of HTTP/2 requests could trigger high CPU usage for several seconds. If a sufficient number of such requests were made on concurrent HTTP/2 connections, the server could become unresponsive.
This was fixed with commit
This issue was reported publicly via the Apache Tomcat Users mailing list on 21 May 2020 without reference to the potential for DoS. The DoS risks were identified by the Apache Tomcat Security Team the same day. The issue was made public on 25 June 2020.
Affects: 9.0.0.M1 to 9.0.35
Important: Remote Code Execution via session persistence
If:
PersistenceManager
with a FileStore
; andPersistenceManager
is configured with
sessionAttributeValueClassNameFilter="null"
(the default
unless a SecurityManager
is used) or a sufficiently lax
filter to allow the attacker provided object to be deserialized;
andFileStore
to the file the attacker has control
over;then, using a specifically crafted request, the attacker will be able to trigger remote code execution via deserialization of the file under their control.
Note: All of conditions above must be true for the attack to succeed.
As an alternative to upgrading to 9.0.35 or later, users may configure
the PersistenceManager
with an appropriate value for
sessionAttributeValueClassNameFilter
to ensure that only
application provided attributes are serialized and deserialized.
This was fixed with commit
This issue was reported to the Apache Tomcat Security Team by by jarvis threedr3am of pdd security research on 12 April 2020. The issue was made public on 20 May 2020.
Affects: 9.0.0.M1 to 9.0.34
Important: AJP Request Injection and potential Remote Code Execution
When using the Apache JServ Protocol (AJP), care must be taken when trusting incoming connections to Apache Tomcat. Tomcat treats AJP connections as having higher trust than, for example, a similar HTTP connection. If such connections are available to an attacker, they can be exploited in ways that may be surprising. Prior to Tomcat 9.0.31, Tomcat shipped with an AJP Connector enabled by default that listened on all configured IP addresses. It was expected (and recommended in the security guide) that this Connector would be disabled if not required.
Prior to this vulnerability report, the known risks of an attacker being able to access the AJP port directly were:
This vulnerability report identified a mechanism that allowed the following:
Further, if the web application allowed file upload and stored those files within the web application (or the attacker was able to control the content of the web application by some other means) then this, along with the ability to process a file as a JSP, made remote code execution possible.
It is important to note that mitigation is only required if an AJP port is accessible to untrusted users. Users wishing to take a defence-in-depth approach and block the vector that permits returning arbitrary files and execution as JSP may upgrade to Apache Tomcat 9.0.31 or later. Users should note that a number of changes were made to the default AJP Connector configuration in 9.0.31 to harden the default configuration. It is likely that users upgrading to 9.0.31 or later will need to make small changes to their configurations as a result.
This was fixed with commits
This issue was reported to the Apache Tomcat Security Team on 3 January 2020. The issue was made public on 24 February 2020.
Affects: 9.0.0.M1 to 9.0.30
Low: HTTP Request Smuggling
The HTTP header parsing code used an approach to end-of-line (EOL) parsing that allowed some invalid HTTP headers to be parsed as valid. This led to a possibility of HTTP Request Smuggling if Tomcat was located behind a reverse proxy that incorrectly handled the invalid Transfer-Encoding header in a particular manner. Such a reverse proxy is considered unlikely.
This was fixed with commit
This issue was reported to the Apache Tomcat Security Team by @ZeddYu on 25 December 2019. The issue was made public on 24 February 2020.
Affects: 9.0.0.M1 to 9.0.30
Low: HTTP Request Smuggling
The refactoring in 9.0.28 introduced a regression. The result of the regression was that invalid Transfer-Encoding headers were incorrectly processed leading to a possibility of HTTP Request Smuggling if Tomcat was located behind a reverse proxy that incorrectly handled the invalid Transfer-Encoding header in a particular manner. Such a reverse proxy is considered unlikely.
This was fixed with commit
This issue was reported to the Apache Tomcat Security Team by @ZeddYu on 12 December 2019. The issue was made public on 24 February 2020.
Affects: 9.0.28 to 9.0.30
Low: Session fixation
When using FORM authentication there was a narrow window where an attacker could perform a session fixation attack. The window was considered too narrow for an exploit to be practical but, erring on the side of caution, this issue has been treated as a security vulnerability.
This was fixed with commit
This issue was reported to the Apache Tomcat Security Team by William Marlow (IBM) on 19 November 2019. The issue was made public on 18 December 2019.
Affects: 9.0.0.M1 to 9.0.29
Moderate: Local Privilege Escalation
When Tomcat is configured with the JMX Remote Lifecycle Listener, a local attacker without access to the Tomcat process or configuration files is able to manipulate the RMI registry to perform a man-in-the-middle attack to capture user names and passwords used to access the JMX interface. The attacker can then use these credentials to access the JMX interface and gain complete control over the Tomcat instance.
The JMX Remote Lifecycle Listener will be deprecated in future Tomcat releases, will be removed for Tomcat 10 and may be removed from all Tomcat releases some time after 31 December 2020.
Users should also be aware of
This was fixed with commit
This issue was reported to the Apache Tomcat Security Team by An Trinh of Viettel Cyber Security on 10 October 2019. The issue was made public on 18 December 2019.
Affects: 9.0.0.M1 to 9.0.28
Important: Request mix-up
If a web application sends a WebSocket message concurrently with the WebSocket connection closing, it is possible that the application will continue to use the socket after it has been closed. The error handling triggered in this case could cause the a pooled object to be placed in the pool twice. This could result in subsequent connections using the same object concurrently which could result in data being returned to the wrong use and/or other errors.
This was fixed with commits
This issue was identified by the Apache Tomcat Security Team on 21 December 2021. The issue was made public on 12 May 2022.
Affects: 9.0.0.M1 to 9.0.20
Important: Denial of Service
The fix for
This was fixed with commits
This issue was reported to the Apache Tomcat Security Team by John Simpson of Trend Micro Security Research working with Trend Micro's Zero Day Initiative on 26 April 2019. The issue was made public on 20 June 2019.
Affects: 9.0.0.M1 to 9.0.19
Note: The issues below were fixed in Apache Tomcat 9.0.18 but the release vote for the 9.0.18 release candidate did not pass. Therefore, although users must download 9.0.19 to obtain a version that includes a fix for these issues, version 9.0.18 is not included in the list of affected versions.
Important: Remote Code Execution on Windows
When running on Windows with enableCmdLineArguments enabled, the CGI Servlet is vulnerable to Remote Code Execution due to a bug in the way the JRE passes command line arguments to Windows. The CGI Servlet is disabled by default. The CGI option enableCmdLineArguments is disabled by default in Tomcat 9.0.x. For a detailed explanation of the JRE behaviour, see Markus Wulftange's blog and this archived MSDN blog.
This was fixed with commit
This issue was identified by Nightwatch Cybersecurity Research and reported to the Apache Tomcat security team via the bug bounty program sponsored by the EU FOSSA-2 project on 3rd March 2019. The issue was made public on 10 April 2019.
Affects: 9.0.0.M1 to 9.0.17
Low: XSS in SSI printenv
The SSI printenv command echoes user provided data without escaping and is, therefore, vulnerable to XSS. SSI is disabled by default. The printenv command is intended for debugging and is unlikely to be present in a production website.
This was fixed with commit
This issue was identified by Nightwatch Cybersecurity Research and reported to the Apache Tomcat security team via the bug bounty program sponsored by the EU FOSSA-2 project on 7th March 2019. The issue was made public on 17 May 2019.
Affects: 9.0.0.M1 to 9.0.17
Note: The issue below was fixed in Apache Tomcat 9.0.15 but the release vote for the 9.0.15 release candidate did not pass. Therefore, although users must download 9.0.16 to obtain a version that includes a fix for these issues, version 9.0.15 is not included in the list of affected versions.
Important: Denial of Service
The HTTP/2 implementation accepted streams with excessive numbers of
SETTINGS
frames and also permitted clients to keep streams
open without reading/writing request/response data. By keeping streams
open for requests that utilised the Servlet API's blocking I/O, clients
were able to cause server-side threads to block eventually leading to
thread exhaustion and a DoS.
This was fixed in revisions
This issue was reported to the Apache Tomcat Security Team by Michal Karm Babacek from Red Hat, Inc on 4 January 2019 with additional issues identified by the Tomcat Security Team. The issue was made public on 25 March 2019.
Affects: 9.0.0.M1 to 9.0.14
Moderate: Open Redirect
When the default servlet returned a redirect to a directory (e.g.
redirecting to /foo/
when the user requested
/foo
) a specially crafted URL could be used to cause the
redirect to be generated to any URI of the attackers choice.
This was fixed in revision
This issue was reported to the Apache Tomcat Security Team by Sergey Bobrov on 28 August 2018 and made public on 3 October 2018.
Affects: 9.0.0.M1 to 9.0.11
Low: host name verification missing in WebSocket client
The host name verification when using TLS with the WebSocket client was missing. It is now enabled by default.
This was fixed in revision
This issue was reported publicly on 11 June 2018 and formally announced as a vulnerability on 22 July 2018.
Affects: 9.0.0.M1 to 9.0.9
Important: Information Disclosure
If an async request was completed by the application at the same time as the container triggered the async timeout, a race condition existed that could result in a user seeing a response intended for a different user. An additional issue was present in the NIO and NIO2 connectors that did not correctly track the closure of the connection when an async request was completed by the application and timed out by the container at the same time. This could also result in a user seeing a response intended for another user.
This was fixed in revisions
This issue was reported to the Apache Tomcat Security Team by Dmitry Treskunov on 16 June 2018 and made public on 22 July 2018.
Affects: 9.0.0.M9 to 9.0.9
Low: CORS filter has insecure defaults
The defaults settings for the CORS filter are insecure and enable
supportsCredentials
for all origins. It is expected that
users of the CORS filter will have configured it appropriately for their
environment rather than using it in the default configuration. Therefore,
it is expected that most users will not be impacted by this issue.
This was fixed in revision
This issue was reported publicly on 1 May 2018 and formally announced as a vulnerability on 16 May 2018.
Important: A bug in the UTF-8 decoder can lead to DoS
An improper handing of overflow in the UTF-8 decoder with supplementary characters can lead to an infinite loop in the decoder causing a Denial of Service.
This was fixed in revision
This issue was reported publicly on 6 April 2018 and formally announced as a vulnerability on 22 July 2018.
Affects: 9.0.0.M1 to 9.0.7
Important: Security constraint annotations applied too
late
Security constraints defined by annotations of Servlets were only applied once a Servlet had been loaded. Because security constraints defined in this way apply to the URL pattern and any URLs below that point, it was possible - depending on the order Servlets were loaded - for some security constraints not to be applied. This could have exposed resources to users who were not authorised to access them.
This was fixed in revisions
This issue was identified by the Apache Tomcat Security on 1 February 2018 and made public on 23 February 2018.
Affects: 9.0.0.M1 to 9.0.4
Important: Security constraints mapped to context root are
ignored
The URL pattern of "" (the empty string) which exactly maps to the context root was not correctly handled when used as part of a security constraint definition. This caused the constraint to be ignored. It was, therefore, possible for unauthorised users to gain access to web application resources that should have been protected. Only security constraints with a URL pattern of the empty string were affected.
This was fixed in revision
This issue was reported publicly as
Affects: 9.0.0.M1 to 9.0.4
Low: Incorrectly documented CGI search algorithm
As part of the fix for bug
This was fixed in revision
This issue was reported to the Apache Tomcat Security Team by Jan Michael Greiner on 17 September 2017 and made public on 31 January 2018.
Affects: 9.0.0.M22 to 9.0.1
Important: Remote Code Execution
When running with HTTP PUTs enabled (e.g. via setting the
readonly
initialisation parameter of the Default servlet to
false) it was possible to upload a JSP file to the server via a specially
crafted request. This JSP could then be requested and any code it
contained would be executed by the server.
This was fixed in revisions
This issue was first reported publicly followed by multiple reports to the Apache Tomcat Security Team on 20 September 2017.
Affects: 9.0.0.M1 to 9.0.0
Important: Security Constraint Bypass
The HTTP/2 implementation bypassed a number of security checks that prevented directory traversal attacks. It was therefore possible to bypass security constraints using an specially crafted URL.
This was fixed in revision
The issue was originally reported as a failure to process URL path
parameters in bug
Affects: 9.0.0.M1 to 9.0.0.M21
Moderate: Cache Poisoning
The CORS Filter did not add an HTTP Vary header indicating that the response varies depending on Origin. This permitted client and server side cache poisoning in some circumstances.
This was fixed in revision
The issue was reported as bug
Affects: 9.0.0.M1 to 9.0.0.M21
Important: Security Constraint Bypass
The error page mechanism of the Java Servlet Specification requires that, when an error occurs and an error page is configured for the error that occurred, the original request and response are forwarded to the error page. This means that the request is presented to the error page with the original HTTP method.
If the error page is a static file, expected behaviour is to serve content of the file as if processing a GET request, regardless of the actual HTTP method. Tomcat's Default Servlet did not do this. Depending on the original request this could lead to unexpected and undesirable results for static error pages including, if the DefaultServlet is configured to permit writes, the replacement or removal of the custom error page.
Notes for other user provided error pages:
This was fixed in revisions
This issue was reported responsibly to the Apache Tomcat Security Team by Aniket Nandkishor Kulkarni from Tata Consultancy Services Ltd, Mumbai, India as a vulnerability that allowed the restrictions on OPTIONS and TRACE requests to be bypassed on 21 April 2017. The full implications of this issue were identified by the Tomcat Security Team on 24 April 2017. This issue was made public on 6 June 2017.
Affects: 9.0.0.M1 to 9.0.0.M20
Important: Information Disclosure
The refactoring of the HTTP connectors for 8.5.x onwards, introduced a regression in the send file processing. If the send file processing completed quickly, it was possible for the Processor to be added to the processor cache twice. This could result in the same Processor being used for multiple requests which in turn could lead to unexpected errors and/or response mix-up.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 24 March 2017 and made public on 10 April 2017.
Affects: 9.0.0.M1 to 9.0.0.M18
Important: Denial of Service
The handling of an HTTP/2 GOAWAY frame for a connection did not close streams associated with that connection that were currently waiting for a WINDOW_UPDATE before allowing the application to write more data. These waiting streams each consumed a thread. A malicious client could therefore construct a series of HTTP/2 requests that would consume all available processing threads.
This was fixed in revision
This issue was reported to the Apache Tomcat Security Team by Chun Han Hsiao on 11 March 2017 and made public on 10 April 2017.
Affects: 9.0.0.M1 to 9.0.0.M18
Important: Information Disclosure
A bug in the handling of the pipelined requests when send file was used resulted in the pipelined request being lost when send file processing of the previous request completed. This could result in responses appearing to be sent for the wrong request. For example, a user agent that sent requests A, B and C could see the correct response for request A, the response for request C for request B and no response for request C.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 20 March 2017 and made public on 10 April 2017.
Affects: 9.0.0.M1 to 9.0.0.M18
Low: Information Disclosure
While investigating bug 60718, it was noticed that some calls to application listeners did not use the appropriate facade object. When running an untrusted application under a SecurityManager, it was therefore possible for that untrusted application to retain a reference to the request or response object and thereby access and/or modify information associated with another web application.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 20 March 2017 and made public on 10 April 2017.
Affects: 9.0.0.M1 to 9.0.0.M17
Note: The issue below was fixed in Apache Tomcat 9.0.0.M16 but the release vote for the 9.0.0.M16 release candidate did not pass. Therefore, although users must download 9.0.0.M17 to obtain a version that includes the fix for this issue, version 9.0.0.M16 is not included in the list of affected versions.
Moderate: Information Disclosure
The refactoring to make wider use of ByteBuffer introduced a regression that could cause information to leak between requests on the same connection. When running behind a reverse proxy, this could result in information leakage between users. All HTTP connector variants are affected but HTTP/2 and AJP are not affected.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 14 December 2016 and made public on 13 March 2017.
Affects: 9.0.0.M11 to 9.0.0.M15
Note: The issue below was fixed in Apache Tomcat 9.0.0.M14 but the release vote for the 9.0.0.M14 release candidate did not pass. Therefore, although users must download 9.0.0.M15 to obtain a version that includes the fix for this issue, version 9.0.0.M14 is not included in the list of affected versions.
Important: Information Disclosure
A bug in the error handling of the send file code for the NIO HTTP connector resulted in the current Processor object being added to the Processor cache multiple times. This in turn meant that the same Processor could be used for concurrent requests. Sharing a Processor can result in information leakage between requests including, but not limited to, session ID and the response body.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 8 December 2016 and made public on 12 December 2016.
Affects: 9.0.0.M1 to 9.0.0.M13
Note: The issues below were fixed in Apache Tomcat 9.0.0.M12 but the release vote for the 9.0.0.M12 release candidate did not pass. Therefore, although users must download 9.0.0.M13 to obtain a version that includes fixes for these issues, version 9.0.0.M12 is not included in the list of affected versions.
Important: Remote Code Execution
The JmxRemoteLifecycleListener
was not updated to take
account of Oracle's fix for
This was fixed in revision
This issue was reported to the Apache Tomcat Security Team on 19 October 2016 and made public on 22 November 2016.
Affects: 9.0.0.M1 to 9.0.0.M11
Important: Denial of Service
The HTTP/2 header parser entered an infinite loop if a header was received that was larger than the available buffer. This made a denial of service attack possible.
This was fixed in revision
This issue was reported as
Affects: 9.0.0.M1 to 9.0.0.M11
Important: Information Disclosure
The code that parsed the HTTP request line permitted invalid characters. This could be exploited, in conjunction with a proxy that also permitted the invalid characters but with a different interpretation, to inject data into the HTTP response. By manipulating the HTTP response the attacker could poison a web-cache, perform an XSS attack and/or obtain sensitive information from requests other then their own.
This was fixed in revision
This issue was reported to the Apache Tomcat Security Team on 11 October 2016 and made public on 22 November 2016.
Affects: 9.0.0.M1 to 9.0.0.M11
Low: Unrestricted Access to Global Resources
The ResourceLinkFactory did not limit web application access to global JNDI resources to those resources explicitly linked to the web application. Therefore, it was possible for a web application to access any global JNDI resource whether an explicit ResourceLink had been configured or not.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 18 January 2016 and made public on 27 October 2016.
Affects: 9.0.0.M1 to 9.0.0.M9
Low: Security Manager Bypass
A malicious web application was able to bypass a configured SecurityManager via manipulation of the configuration parameters for the JSP Servlet.
This was fixed in revisions
This issue was identified by the Apache Tomcat Security Team on 27 December 2015 and made public on 27 October 2016.
Affects: 9.0.0.M1 to 9.0.0.M9
Low: System Property Disclosure
When a SecurityManager is configured, a web application's ability to read system properties should be controlled by the SecurityManager. Tomcat's system property replacement feature for configuration files could be used by a malicious web application to bypass the SecurityManager and read system properties that should not be visible.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 27 December 2015 and made public on 27 October 2016.
Affects: 9.0.0.M1 to 9.0.0.M9
Low: Security Manager Bypass
A malicious web application was able to bypass a configured SecurityManager via a Tomcat utility method that was accessible to web applications.
This was fixed in revisions
This issue was discovered by Alvaro Munoz and Alexander Mirosh of the HP Enterprise Security Team and reported to the Apache Tomcat Security Team on 5 July 2016. It was made public on 27 October 2016.
Affects: 9.0.0.M1 to 9.0.0.M9
Low: Timing Attack
The Realm implementations did not process the supplied password if the supplied user name did not exist. This made a timing attack possible to determine valid user names. Note that the default configuration includes the LockOutRealm which makes exploitation of this vulnerability harder.
This was fixed in revision
This issue was identified by the Apache Tomcat Security Team on 1 January 2016 and made public on 27 October 2016.
Affects: 9.0.0.M1 to 9.0.0.M9
Note: The issue below was fixed in Apache Tomcat 9.0.0.M7 but the release vote for the 9.0.0.M7 release candidate did not pass. Therefore, although users must download 9.0.0.M8 to obtain a version that includes fixes for these issues, version 9.0.0.M7 is not included in the list of affected versions.
Moderate: Denial of Service
Apache Tomcat uses a package renamed copy of Apache Commons FileUpload to implement the file upload requirements of the Servlet specification. A denial of service vulnerability was identified in Commons FileUpload that occurred when the length of the multipart boundary was just below the size of the buffer (4096 bytes) used to read the uploaded file. This caused the file upload process to take several orders of magnitude longer than if the boundary was the typical tens of bytes long.
This was fixed in revision
This issue was identified by the TERASOLUNA Framework Development Team and reported to the Apache Commons team via JPCERT on 9 May 2016. It was made public on 21 June 2016.
Affects: 9.0.0.M1 to 9.0.0.M6
Moderate: Security Manager bypass
This issue only affects users running untrusted web applications under a security manager.
ResourceLinkFactory.setGlobalContext()
is a public method
and was accessible to web applications even when running under a security
manager. This allowed a malicious web application to inject a malicious
global context that could in turn be used to disrupt other web
applications and/or read and write data owned by other web
applications.
This was fixed in revision
This issue was identified by the Tomcat security team on 18 January 2016 and made public on 22 February 2016.
Affects: 9.0.0.M1 to 9.0.0.M2
Note: The issues below were fixed in Apache Tomcat 9.0.0.M2 but the release vote for the 9.0.0.M2 release candidate did not pass. Therefore, although users must download 9.0.0.M3 to obtain a version that includes fixes for these issues, version 9.0.0.M2 is not included in the list of affected versions.
Low: Directory disclosure
When accessing a directory protected by a security constraint with a URL that did not end in a slash, Tomcat would redirect to the URL with the trailing slash thereby confirming the presence of the directory before processing the security constraint. It was therefore possible for a user to determine if a directory existed or not, even if the user was not permitted to view the directory. The issue also occurred at the root of a web application in which case the presence of the web application was confirmed, even if a user did not have access.
The solution was to implement the redirect in the DefaultServlet so that
any security constraints and/or security enforcing Filters were processed
before the redirect. The Tomcat team recognised that moving the redirect
could cause regressions so two new Context configuration options
(mapperContextRootRedirectEnabled
and
mapperDirectoryRedirectEnabled
) were introduced. The initial
default was false
for both since this was more secure.
However, due to regressions such as
Bug
58765 the default for mapperContextRootRedirectEnabled
was later changed to true since it was viewed that the regression was
more serious than the security risk of associated with being able to
determine if a web application was deployed at a given path.
This was fixed in revisions
This issue was identified by Mark Koek of QCSec on 12 October 2015 and made public on 22 February 2016.
Affects: 9.0.0.M1
Low: Session Fixation
When recycling the Request
object to use for a new request,
the requestedSessionSSL
field was not recycled. This meant that
a session ID provided in the next request to be processed using the recycled
Request
object could be used when it should not have been. This
gave the client the ability to control the session ID. In theory, this could
have been used as part of a session fixation attack but it would have been
hard to achieve as the attacker would not have been able to force the victim
to use the 'correct' Request
object. It was also necessary for
at least one web application to be configured to use the SSL session ID as
the HTTP session ID. This is not a common configuration.
This was fixed in revisions
This issue was identified by the Tomcat security team on 22 June 2014 and made public on 22 February 2016.
Affects: 9.0.0.M1
Moderate: CSRF token leak
The index page of the Manager and Host Manager applications included a valid CSRF token when issuing a redirect as a result of an unauthenticated request to the root of the web application. If an attacker had access to the Manager or Host Manager applications (typically these applications are only accessible to internal users, not exposed to the Internet), this token could then be used by the attacker to construct a CSRF attack.
This was fixed in revisions
This issue was identified by the Tomcat security team on 8 December 2015 and made public on 22 February 2016.
Affects: 9.0.0.M1
Low: Security Manager bypass
This issue only affects users running untrusted web applications under a security manager.
The internal StatusManagerServlet could be loaded by a malicious web application when a security manager was configured. This servlet could then provide the malicious web application with a list of all deployed applications and a list of the HTTP request lines for all requests currently being processed. This could have exposed sensitive information from other web applications, such as session IDs, to the web application.
This was fixed in revision
This issue was identified by the Tomcat security team on 27 December 2015 and made public on 22 February 2016.
Affects: 9.0.0.M1
Moderate: Security Manager bypass
This issue only affects users running untrusted web applications under a security manager.
Tomcat provides several session persistence mechanisms. The
StandardManager
persists session over a restart. The
PersistentManager
is able to persist sessions to files, a
database or a custom Store
. The cluster implementation
persists sessions to one or more additional nodes in the cluster. All of
these mechanisms could be exploited to bypass a security manager. Session
persistence is performed by Tomcat code with the permissions assigned to
Tomcat internal code. By placing a carefully crafted object into a
session, a malicious web application could trigger the execution of
arbitrary code.
This was fixed in revisions
This issue was identified by the Tomcat security team on 12 November 2015 and made public on 22 February 2016.
Affects: 9.0.0.M1
Critical: Remote Code Execution via log4j
Apache Tomcat 9.0.x has no dependency on any version of log4j.
Web applications deployed on Apache Tomcat may have a dependency on log4j. You should seek support from the application vendor in this instance.
It is possible to configure Apache Tomcat 9.0.x to use log4j 2.x for Tomcat's internal logging. This requires explicit configuration and the addition of the log4j 2.x library. Anyone who has switched Tomcat's internal logging to log4j 2.x is likely to need to address this vulnerability.
In most cases, disabling the problematic feature will be the simplest solution. Exactly how to do that depends on the exact version of log4j 2.x being used. Details are provided on the log4j 2.x security page.