Content
Apache Tomcat 9.x vulnerabilities
    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.
    
   Table of Contents
2022-07-20 Fixed in Apache Tomcat 9.0.65
  
    Low: Apache Tomcat XSS in examples web application
       CVE-2022-34305
    The Form authentication example in the examples web application displayed
       user provided data without filtering, exposing a XSS vulnerability.
       
    This was fixed with commit
       8b60af90.
    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
   2022-05-16 Fixed in Apache Tomcat 9.0.63
  
    Low: Apache Tomcat EncryptInterceptor DoS
       CVE-2022-29885
    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
       eaafd282.
    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
   1 April 2022 Fixed in Apache Tomcat 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
       CVE-2021-43980
    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
       170e0f79.
    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
   20 January 2022 Fixed in Apache Tomcat 9.0.58
    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
       CVE-2022-23181
    The fix for bug CVE-2020-9484 introduced a time of check, time
       of use vulnerability that allowed a local attacker to perform actions
       with the privileges of the user that the Tomcat process is using. This
       issue is only exploitable when Tomcat is configured to persist sessions
       using the FileStore.
       
    This was fixed with commit
       1385c624.
    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
   1 October 2021 Fixed in Apache Tomcat 9.0.54
    Important: Denial of Service
       CVE-2021-42340
    The fix for bug 63362 introduced a memory leak. The object
       introduced to collect metrics for HTTP upgrade connections was not
       released for WebSocket connections once the WebSocket connection was
       closed. This created a memory leak that, over time, could lead to a
       denial of service via an OutOfMemoryError.
    This was fixed with commit
       80f1438e.
    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
   15 June 2021 Fixed in Apache Tomcat 9.0.48
    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
       CVE-2021-33037
    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
       45d70a86,
       05f9e8b0 and
       a2c3dc4c.
    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
   12 May 2021 Fixed in Apache Tomcat 9.0.46
      Low: Authentication weakness
       CVE-2021-30640
    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
       c4df8d44,
       749f3cc1,
       c6b6e101,
       91ecdc61,
       e5006748,
       b5585a9e,
       32993201 and
       3ce84512.
    This issue was reported publicly as 65224.
    Affects: 9.0.0.M1 to 9.0.45
   6 April 2021 Fixed in Apache Tomcat 9.0.45
    Important: Denial of Service
       CVE-2021-30639
    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.
    Applications that do not use non-blocking I/O are not exposed to this
       vulnerability.
    This was fixed with commit
       8ece47c4.
    This issue was reported publicly as 65203.
    Affects: 9.0.44
    
   10 March 2021 Fixed in Apache Tomcat 9.0.44
    Important: Denial of Service
       CVE-2021-41079
    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
       d4b340fa.
    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
    
   2 February 2021 Fixed in Apache Tomcat 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 CVE-2020-9484 was incomplete
       CVE-2021-25329
    The fix for CVE-2020-9484 was incomplete. When using a
    highly unlikely configuration edge case, the Tomcat instance was still
    vulnerable to CVE-2020-9484. Note that both the previously
    published prerequisites for CVE-2020-9484 and the previously
    published non-upgrade mitigations for CVE-2020-9484 also apply to
    this issue.
    This was fixed with commit
       4785433a.
    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
       CVE-2021-25122
    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
       d47c20a7.
    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
   17 November 2020 Fixed in Apache Tomcat 9.0.40
    Important: Information disclosure
       CVE-2021-24122
    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
       935fc558.
    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
       CVE-2020-17527
    While investigating issue 64830 it was discovered that Apache
       Tomcat could re-use an HTTP request header value from the previous stream
       received on an HTTP/2 connection for the request associated with the
       subsequent stream. While this would most likely lead to an error and the
       closure of the HTTP/2 connection, it is possible that information could
       leak between requests.
    
    This was fixed with commit
       d56293f8.
    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
   15 September 2020 Fixed in Apache Tomcat 9.0.38
    Moderate: HTTP/2 request mix-up
       CVE-2020-13943
    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
       55911430.
    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
   5 July 2020 Fixed in Apache Tomcat 9.0.37
    Important: WebSocket DoS
       CVE-2020-13935
    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
       40fa74c7.
    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
       CVE-2020-13934
    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
       172977f0.
    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
   7 June 2020 Fixed in Apache Tomcat 9.0.36
    Important: HTTP/2 DoS
       CVE-2020-11996
    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
       9a023168.
    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
   11 May 2020 Fixed in Apache Tomcat 9.0.35
    Important: Remote Code Execution via session persistence
       CVE-2020-9484
    If:
    
      - an attacker is able to control the contents and name of a file on the
          server; and
 
      - the server is configured to use the 
PersistenceManager
          with a FileStore; and 
      - the 
PersistenceManager 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;
          and 
      - the attacker knows the relative file path from the storage location
          used by 
FileStore 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
       3aa8f28d.
    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
   11 February 2020 Fixed in Apache Tomcat 9.0.31
    Important: AJP Request Injection and potential Remote Code Execution
       CVE-2020-1938
    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:
    
       - bypassing security checks based on client IP address
 
       - bypassing user authentication if Tomcat was configured to trust
           authentication data provided by the reverse proxy
 
       
    This vulnerability report identified a mechanism that allowed the
       following:
    
       - returning arbitrary files from anywhere in the web application
           including under the WEB-INF and META-INF directories or any other
           location reachable via ServletContext.getResourceAsStream()
 
       - processing any file in the web application as a JSP
 
    
    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
       0e8a50f0,
       9ac90532,
       64fa5b99,
       7a1406a3 and
       49ad3f95.
    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
       CVE-2020-1935
    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
       8bfb0ff7.
    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
       CVE-2019-17569
    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
       060ecc5e.
    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
   12 December 2019 Fixed in Apache Tomcat 9.0.30
    Low: Session fixation
       CVE-2019-17563
    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
       1ecba14e.
    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
   21 November 2019 Fixed in Apache Tomcat 9.0.29
    Moderate: Local Privilege Escalation
       CVE-2019-12418
    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 CVE-2019-2684, a JRE
       vulnerability that enables this issue to be exploited remotely.
    This was fixed with commit
       1fc9f589.
    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
   7 June 2019 Fixed in Apache Tomcat 9.0.21
    Important: Request mix-up
       CVE-2022-25762
    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
       e2d5a040,
       7046644b,
       339b40bc and
       65fb1ee5.
    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
   13 May 2019 Fixed in Apache Tomcat 9.0.20
    Important: Denial of Service
       CVE-2019-10072
    The fix for CVE-2019-0199 was incomplete and did not address
       HTTP/2 connection window exhaustion on write. By not sending
       WINDOW_UPDATE messages for the connection window (stream 0) clients were
       able to cause server-side threads to block eventually leading to thread
       exhaustion and a DoS.
    This was fixed with commits
       7f748eb6 and
       ada725a5.
    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
   13 April 2019 Fixed in Apache Tomcat 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
       CVE-2019-0232
    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
       4b244d82.
    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
       CVE-2019-0221
    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
       15fcd166.
    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
   8 February 2019 Fixed in Apache Tomcat 9.0.16
  
    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
       CVE-2019-0199
    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 1852698,
       1852699,
       1852700,
       1852701,
       1852702,
       1852703,
       1852704,
       1852705,
       1852706 and
       a1cb1ac7.
    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
   10 September 2018 Fixed in Apache Tomcat 9.0.12
  
    Moderate: Open Redirect
       CVE-2018-11784
    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 1840055.
    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
   25 June 2018 Fixed in Apache Tomcat 9.0.10
    Low: host name verification missing in WebSocket client
       CVE-2018-8034
    The host name verification when using TLS with the WebSocket client was
       missing. It is now enabled by default.
    This was fixed in revision 1833757.
    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
       CVE-2018-8037
    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 1833825,
       1833831,
       1837530 and
       1833906.
    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
   not released Fixed in Apache Tomcat 9.0.9
  
    Low: CORS filter has insecure defaults
       CVE-2018-8014
    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 1831726.
    This issue was reported publicly on 1 May 2018 and formally announced as
       a vulnerability on 16 May 2018.
   3 May 2018 Fixed in Apache Tomcat 9.0.8
    Important: A bug in the UTF-8 decoder can lead to DoS
       CVE-2018-1336
 
    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 1830373.
    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
   11 February 2018 Fixed in Apache Tomcat 9.0.5
  
    Important: Security constraint annotations applied too
       late CVE-2018-1305
    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 1823310 and
       1824323.
    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 CVE-2018-1304
    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 1823306.
    This issue was reported publicly as 62067 on 31 January 2018
       and the security implications identified by the Apache Tomcat Security
       Team the same day. It was made public on 23 February 2018.
    Affects: 9.0.0.M1 to 9.0.4
   30 November 2017 Fixed in Apache Tomcat 9.0.2
    Low: Incorrectly documented CGI search algorithm
       CVE-2017-15706
    As part of the fix for bug 61201, the description of the
       search algorithm used by the CGI Servlet to identify which script to
       execute was updated. The update was not correct. As a result, some
       scripts may have failed to execute as expected and other scripts may have
       been executed unexpectedly. Note that the behaviour of the CGI servlet
       has remained unchanged in this regard. It is only the documentation of
       the behaviour that was wrong and has been corrected.
    This was fixed in revision 1814825.
    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
   30 September 2017 Fixed in Apache Tomcat 9.0.1
    Important: Remote Code Execution
       CVE-2017-12617
    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 1809669,
       1809674,
       1809684 and
       1809711.
    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
   26 June 2017 Fixed in Apache Tomcat 9.0.0.M22
    Important: Security Constraint Bypass
       CVE-2017-7675
    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 1796090.
    The issue was originally reported as a failure to process URL path
       parameters in bug 61120 on 24 May 2017. The full implications
       of this issue were identified by the Tomcat Security Team the same day.
       This issue was made public on 10 August 2017.
    Affects: 9.0.0.M1 to 9.0.0.M21
    Moderate: Cache Poisoning
       CVE-2017-7674
    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 1795813.
    The issue was reported as bug 61101 on 16 May 2017. The full
       implications of this issue were identified by the Tomcat Security Team
       the same day. This issue was made public on 10 August 2017.
    Affects: 9.0.0.M1 to 9.0.0.M21
   10 May 2017 Fixed in Apache Tomcat 9.0.0.M21
  
    Important: Security Constraint Bypass
       CVE-2017-5664
    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:
    
      - Unless explicitly coded otherwise, JSPs ignore the HTTP method.
          JSPs used as error pages must ensure that they handle any error
          dispatch as a GET request, regardless of the actual method.
 
      - By default, the response generated by a Servlet does depend on the
          HTTP method. Custom Servlets used as error pages must ensure that
          they handle any error dispatch as a GET request, regardless of the
          actual method.
 
    
    This was fixed in revisions 1793468 and
       1793487.
    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
   30 March 2017 Fixed in Apache Tomcat 9.0.0.M19
    Important: Information Disclosure
       CVE-2017-5651
    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 1788544.
    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
       CVE-2017-5650
    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 1788460.
    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
       CVE-2017-5647
    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 1788890.
    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
   13 March 2017 Fixed in Apache Tomcat 9.0.0.M18
  Low: Information Disclosure
       CVE-2017-5648
    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 1785774.
    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
   16 January 2017 Fixed in Apache Tomcat 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
       CVE-2016-8747
    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 1774161.
    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
   8 December 2016 Fixed in Apache Tomcat 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
       CVE-2016-8745
    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 1771853.
    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
   8 November 2016 Fixed in Apache Tomcat 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
       CVE-2016-8735
    The JmxRemoteLifecycleListener was not updated to take
       account of Oracle's fix for CVE-2016-3427. Therefore, Tomcat
       installations using this listener remained vulnerable to a similar remote
       code execution vulnerability. This issue has been rated as important
       rather than critical due to the small number of installations using this
       listener and that it would be highly unusual for the JMX ports to be
       accessible to an attacker even when the listener is used.
    This was fixed in revision 1767644.
    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
       CVE-2016-6817
    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 1765794.
    This issue was reported as 60232 on 10 October 2016 and the
       security implications identified by the Apache Tomcat Security Team on
       the same day. It was made public on 22 November 2016.
    Affects: 9.0.0.M1 to 9.0.0.M11
    Important: Information Disclosure
       CVE-2016-6816
    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 1767641.
    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
   5 September 2016 Fixed in Apache Tomcat 9.0.0.M10
    Low: Unrestricted Access to Global Resources
       CVE-2016-6797
    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 1757271.
    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
       CVE-2016-6796
    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 1758487 and
       1763232.
    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
       CVE-2016-6794
    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 1754445.
    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
       CVE-2016-5018
    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 1754714 and
       1760300.
    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
       CVE-2016-0762
    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 1758499.
    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
   13 June 2016 Fixed in Apache Tomcat 9.0.0.M8
  
    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
       CVE-2016-3092
    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 1743700.
    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
   5 January 2016 Fixed in Apache Tomcat 9.0.0.M3
  
    Moderate: Security Manager bypass
       CVE-2016-0763
    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 1725926.
    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
       CVE-2015-5345
    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 1715206,
       1716882 and
       1716894.
    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
       CVE-2015-5346
    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 1713184 and
       1723414.
    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
       CVE-2015-5351
    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 1720652 and
       1720655.
    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
       CVE-2016-0706
    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 1722799.
    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
       CVE-2016-0714
    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 1725263 and
       1725914.
    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
   Not a vulnerability in Tomcat
    Critical: Remote Code Execution via log4j
       CVE-2021-44228
    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.