Stable Release in branch 9.0
9.0.121
Released 12 Aug 2026
(26 days ago)
SoftwareApache Tomcat
Version9.0
Status
Supported
Supported
Java versions
Java 8+
Initial release9.0.0
22 Sep 2017
(8 years ago)
Latest release9.0.121
12 Aug 2026
(26 days ago)
End of lifeTBD
(Supported)
Release noteshttps://tomcat.apache.org/tomcat-9.0-doc/RELEASE-NOTES.txt
Source codehttps://github.com/apache/tomcat/tree/9.0.121
Documentationhttps://tomcat.apache.org/tomcat-9.0-doc/index.html
Apache Tomcat 9.0 ReleasesView full list

What Is New in Apache Tomcat 9.0

Category Highlights
New Features OCSP support for JSSE-based TLS connectors; new ciphersuite attribute on SSLHostConfig for TLSv1.3 cipher suites; strictSni attribute on Connector for SNI/hostname binding; noCompressionEncodings HTTP setting; drainTimeout for HTTP/2 GOAWAY frames; ssoReauthenticationMode per-Authenticator SSO override; Filter support for context root mappings; allowLinking on PreResources, JarResources and PostResources
Improvements Strong ETag digest upgraded from SHA-1 to SHA-256; Transfer-Encoding used for compression instead of Content-Encoding when TE header is present; HTTP/2 header validation relaxed to return 400/stream reset rather than connection reset; TLS cipher order now respected correctly; Manager app includes web application state in HTML/JSON status output; TLS objects dereferenced immediately on socket close; APR Connector now logs a deprecation notice recommending NIO Connector; CVE-2024-56337 JVM configuration check automated at startup
Bug Fixes CVE-2025-24813 -- critical RCE/information disclosure via partial PUT and write-enabled Default Servlet; CVE-2024-56337 -- RCE via case-insensitive file system and write-enabled Default Servlet; CVE-2025-31651 -- critical Authorization Bypass via Rewrite rule; CVE-2025-31650 -- DoS via invalid HTTP priority header; NIO+TLS non-blocking flush could silently truncate responses; HTTP/2 HEADERS frame parsing could close connection without GOAWAY; CsrfPreventionFilter could add duplicate tokens to URLs; JNDI Realm SSL socket factory misconfiguration; jdbc-pool returning closed connections to the pool; SSO session ID changes not propagated to SSO Valve
Breaking Changes TLSv1.3 cipher suites in the ciphers attribute of SSLHostConfig are now always ignored (use cipherSuites instead); Deprecated SSLv3/EXPORT/KRB5/FZA cipher aliases removed from SSLHostConfig; strictSni defaults to true, rejecting requests where SNI and HTTP Host header resolve to different SSL configurations
Deprecations RemoteAddrFilter and RemoteAddrValve deprecated in favour of RemoteCIDRFilter and RemoteCIDRValve; APR Connector usage now triggers an informational deprecation warning at startup

What critical security vulnerabilities were fixed in Apache Tomcat 9.0?

The 9.0 branch has received patches for several high-impact CVEs that every production team should treat as mandatory upgrades. The most operationally dangerous are CVE-2025-24813 (critical RCE/information disclosure) and CVE-2024-56337 (high RCE), both of which require the Default Servlet to have writes enabled -- a non-default configuration, but one that some file-serving setups deliberately use.

CVE-2025-24813 exploited the partial PUT implementation: temporary files were named using the user-supplied path with separators replaced by dots, which allowed a carefully crafted PUT request to overlap with sensitive files in a parent upload directory. If writes were enabled and the attacker could also upload a serialized Java object via partial PUT, remote code execution was possible through deserialization. This was actively exploited in the wild within 30 hours of public disclosure.

  • CVE-2025-24813 -- Critical RCE/information disclosure. Fixed in 9.0.99. Requires write-enabled Default Servlet.
  • CVE-2024-56337 -- High RCE. Case-insensitive file system + write-enabled Default Servlet allows uploaded file to be treated as a JSP. Fixed in 9.0.99. Tomcat now automates the JVM configuration check at startup and blocks affected apps from starting if the JVM cannot be correctly hardened.
  • CVE-2025-31651 -- Critical Authorization Bypass via malformed Rewrite rule. Fixed in 9.0.104.
  • CVE-2025-31650 -- High DoS via invalid HTTP/2 priority header. Fixed in 9.0.104.
  • CVE-2025-46701 -- High Authorization Bypass in the CGI Servlet. Fixed by refactoring to use the WebResources API.

Watch out for the CVE-2024-56337 startup behaviour change: if your deployment has a write-enabled Default Servlet and runs on a case-insensitive file system (Windows, macOS HFS+), Tomcat will now attempt to set the JVM system property sun.io.useCanonCaches to false automatically. If it cannot do so, the impacted web application will be prevented from starting. Plan for this before upgrading production Windows hosts.

How has TLS/SSL configuration changed in Apache Tomcat 9.0?

TLS configuration in the 9.0 branch has gone through the most significant structural evolution since the introduction of SSLHostConfig -- particularly around OCSP, cipher management, and the FFM (Foreign Function and Memory) OpenSSL integration that is being hardened to match the legacy Tomcat Native behaviour.

The most impactful change for upgraders is the separation of TLS 1.2 and TLS 1.3 cipher configuration. Previously, some deployments mixed TLS 1.3 cipher suites into the ciphers attribute. That is now a hard error: TLS 1.3 suites in ciphers are silently ignored and a warning is logged. Use the new dedicated cipherSuites attribute instead. To ease migration, Tomcat 9.0 will automatically move TLS 1.3 entries from ciphers to cipherSuites during parsing (this migration aid will be removed in Tomcat 12).

<!-- Before (incorrect, TLS 1.3 suites mixed in) -->
<SSLHostConfig ciphers="TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256" />

<!-- After (correct, separated) -->
<SSLHostConfig
    ciphers="ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384"
    cipherSuites="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384" />

Other notable TLS changes across the 9.0 branch:

  • OCSP support added for JSSE-based TLS connectors, with configurable soft failure mode (disabled by default). Both JSSE and OpenSSL OCSP checks are now aligned in behaviour.
  • A new strictSni attribute (default: true) rejects requests where the SNI hostname and HTTP Host header resolve to different SSLHostConfig instances. In practice, this is the correct and secure default, but it will reject requests from clients that send mismatched SNI/Host values -- review your reverse proxy and load balancer configurations.
  • Deprecated cipher aliases SSLv3, EXPORT, EXPORT40, EXPORT56, KRB5, kFZA, aFZA, eFZA and FZA are no longer accepted in the ciphers attribute. Remove them from your SSL configurations.
  • Memory leaks in the FFM OpenSSL code fixed: x509 objects, CA certificates, and certificate chains are now properly freed on error paths.
  • TLS objects are dereferenced immediately on socket close, reducing memory pressure under high connection churn.

What HTTP/2 and connector improvements were made in Apache Tomcat 9.0?

HTTP/2 handling in 9.0 has received a steady stream of correctness and robustness fixes that matter most in high-throughput or proxy-fronted deployments.

A long-standing NIO+TLS bug was fixed where a response might not be fully written until the connection was closed, silently truncating content in non-blocking flush scenarios. This would manifest as intermittent partial responses under load, which is notoriously difficult to diagnose without packet captures. If you have seen unexplained response truncation with NIO+TLS, this fix (9.0.117) is the likely root cause.

  • HTTP/2 HEADERS frame parsing bug fixed: an invalid frame no longer causes the connection to close without a GOAWAY frame, which was causing client-visible abrupt disconnects.
  • HTTP/2 header validation relaxed: instead of a connection reset for invalid headers, Tomcat now returns a stream reset or a 400 response, which is both more correct and less disruptive to multiplexed connections.
  • HTTP/2 request header read buffer is now properly reset (including size restoration) after a stream reset, preventing buffer bloat over long-lived connections.
  • New drainTimeout attribute on the HTTP/2 UpgradeProtocol element lets you configure the interval between the two final GOAWAY frames during graceful shutdown, useful in load-balanced environments where you need downstream proxies to drain connections before the second GOAWAY.
  • The noCompressionEncodings HTTP connector setting allows explicit exclusion of specific content encodings from compression, useful when upstream caches or clients cannot handle certain compressed encodings.
  • Chunk extension validation added for chunked transfer encoding, closing a protocol-level attack surface.
  • Trailer field filtering extended to HTTP trailers: control characters (excluding TAB) and high code points are replaced with a space, consistent with how regular header fields are handled.

In practice, teams running Tomcat behind an AWS ALB, nginx, or Apache httpd reverse proxy will benefit most from the HTTP/2 stream reset improvements -- these prevent a single misbehaving HTTP/2 client from taking down an entire multiplexed connection.

What authentication and session management fixes should Tomcat 9.0 operators know about?

Several authentication and session handling bugs were resolved across the 9.0 branch that can surface as hard-to-reproduce issues in SSO-heavy or load-balanced environments.

A race condition in SSO session tracking was fixed: when session IDs change after authentication (standard practice to prevent session fixation), the new ID was not being propagated to the SSO Valve, causing SSO entries to survive past their intended lifecycle and leak across users in some edge cases. This fix is in 9.0.111 and is a must-have for deployments using the SSO Valve.

  • New ssoReauthenticationMode attribute on Authenticators allows per-Authenticator override of the SSO Valve's requireReauthentication setting. This is particularly relevant for SPNEGO -- delegated Kerberos credentials are now properly available to the web application when SSO reauthentication is enabled.
  • CsrfPreventionFilter fixed to avoid adding duplicate CSRF tokens to URLs, which was causing token validation failures on redirects in some application frameworks.
  • HttpSession.isNew() now correctly returns false once the client has joined the session, fixing a spec compliance issue that could cause application code checking this flag to misidentify returning clients as new ones.
  • URL encoding errors in the Rewrite Valve now throw an exception rather than silently substituting a replacement character, making misconfigured rewrite rules fail fast instead of producing subtly wrong URLs.
  • A new digestInRfc3112Order attribute on MessageDigestCredentialHandler was added to control salt+credential digest ordering. The current default (salt then credential) is non-RFC 3112 compliant; this will change in Tomcat 12. Existing deployments do not need to change anything now, but be aware this is a future migration item.

What deprecations and migration warnings should teams prepare for when running Apache Tomcat 9.0?

While Tomcat 9.0 remains under active support until March 2027, the branch is now signalling several configuration patterns that will not carry forward to Tomcat 10 and beyond -- some of which require immediate attention to avoid silent misbehaviour today.

The APR/Native Connector (the old JNI-based connector using APR) now logs an informational warning at startup recommending migration to the NIO Connector. Most teams already moved away from APR years ago, but if you are still running it for sendfile or native SSL performance reasons, the NIO2 connector with OpenSSL via FFM is the supported path going forward.

  • RemoteAddrFilter / RemoteAddrValve deprecated -- Use RemoteCIDRFilter and RemoteCIDRValve instead. The CIDR variants support proper subnet notation and are the long-term replacement.
  • APR Connector -- Still functional but now logs a deprecation notice. Plan migration to the NIO Connector.
  • TLS 1.3 ciphers in ciphers attribute -- Silently ignored with a warning. Migrate to cipherSuites. The auto-migration shim in 9.0 will be removed in Tomcat 12.
  • Single ciphers attribute for mixed TLS versions -- The migration aid (auto-moving TLS 1.3 suites to cipherSuites) is explicitly documented as a 9.0-only behaviour.
  • Removed legacy SSL cipher aliases -- SSLv3, EXPORT*, KRB5, FZA family aliases are no longer accepted in SSLHostConfig ciphers. Audit your SSL configurations before upgrading from older 9.0 patch levels.
  • digestInRfc3112Order -- The default salt+credential order in MessageDigestCredentialHandler will flip in Tomcat 12. Start planning if you use this handler for user credential storage.

This matters if you are planning a future migration to Tomcat 10 or 11: Tomcat 10 requires the switch from javax.* to jakarta.* namespaces in all application code. The Tomcat 9.0 deprecation signals are designed to reduce the delta when that migration comes.

Frequently Asked Questions about Apache Tomcat 9.0

Is Apache Tomcat 9.0 still receiving security patches?
Yes, Tomcat 9.0 is under active support with end-of-life announced as 31 March 2027, and the branch continues to receive security patches, bug fixes, and minor improvements through point releases.

Does CVE-2025-24813 affect a default Tomcat 9.0 installation?
No, the critical RCE vulnerability CVE-2025-24813 requires the Default Servlet to have writes enabled by setting the readonly initialisation parameter to false, which is not the default configuration, so standard installations are not affected without an intentional configuration change.

What do I need to change in my SSL configuration when upgrading to recent Tomcat 9.0 patch levels?
If your SSLHostConfig ciphers attribute contains TLSv1.3 cipher suite names such as TLS_AES_128_GCM_SHA256, you must move those to the new cipherSuites attribute -- for example, add cipherSuites="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384" as a separate attribute -- because TLSv1.3 entries in ciphers are now always ignored and Tomcat logs a warning for each ignored suite.

What does the new strictSni attribute do and should I disable it?
The strictSni attribute on the Connector, which defaults to true, rejects any HTTPS request where the TLS SNI hostname and the HTTP Host header resolve to different SSLHostConfig instances; disabling it is only necessary if you have a legitimate use case where clients send mismatched SNI and Host values, which is unusual in well-configured environments.

Why is my Tomcat 9.0 instance blocking a web application from starting after upgrading?
If your deployment has a write-enabled Default Servlet running on a case-insensitive file system such as Windows NTFS, Tomcat now automatically checks whether the JVM property sun.io.useCanonCaches is set to false as a protection against CVE-2024-56337, and it will prevent the affected web application from starting if it cannot confirm the JVM is correctly hardened.

Are RemoteAddrFilter and RemoteAddrValve still safe to use in Tomcat 9.0?
They remain functional but are deprecated in favour of RemoteCIDRFilter and RemoteCIDRValve, which support CIDR notation for subnet-based IP filtering; migrating is straightforward and is recommended before upgrading to Tomcat 10 or later where the old components may be removed.

Releases In Branch 9.0

VersionRelease date
9.0.12112 Aug 2026
(26 days ago)
9.0.12003 Jul 2026
(2 months ago)
9.0.11918 Jun 2026
(2 months ago)
9.0.11801 May 2026
(4 months ago)
9.0.11730 Mar 2026
(5 months ago)
9.0.11616 Mar 2026
(5 months ago)
9.0.11521 Jan 2026
(7 months ago)
9.0.11420 Jan 2026
(7 months ago)
9.0.11302 Dec 2025
(9 months ago)
9.0.11206 Nov 2025
(10 months ago)
9.0.11110 Oct 2025
(10 months ago)
9.0.11001 Oct 2025
(11 months ago)
9.0.10901 Sep 2025
(1 year ago)
9.0.10831 Jul 2025
(1 year ago)
9.0.10702 Jul 2025
(1 year ago)
9.0.10605 Jun 2025
(1 year ago)
9.0.10507 May 2025
(1 year ago)
9.0.10404 Apr 2025
(1 year ago)
9.0.10301 Apr 2025
(1 year ago)
9.0.10203 Mar 2025
(1 year ago)
9.0.10102 Mar 2025
(1 year ago)
9.0.10013 Feb 2025
(1 year ago)
9.0.9904 Feb 2025
(1 year ago)
9.0.9805 Dec 2024
(1 year ago)
9.0.9706 Nov 2024
(1 year ago)
9.0.9603 Oct 2024
(1 year ago)
9.0.9513 Sep 2024
(1 year ago)
9.0.9405 Sep 2024
(2 years ago)
9.0.9302 Aug 2024
(2 years ago)
9.0.9230 Jul 2024
(2 years ago)
9.0.9102 Jul 2024
(2 years ago)
9.0.9014 Jun 2024
(2 years ago)
9.0.8903 May 2024
(2 years ago)
9.0.8809 Apr 2024
(2 years ago)
9.0.8711 Mar 2024
(2 years ago)
9.0.8614 Feb 2024
(2 years ago)
9.0.8505 Jan 2024
(2 years ago)
9.0.8407 Dec 2023
(2 years ago)
9.0.8309 Nov 2023
(2 years ago)
9.0.8211 Oct 2023
(2 years ago)
9.0.8109 Oct 2023
(2 years ago)
9.0.8023 Aug 2023
(3 years ago)
9.0.7908 Aug 2023
(3 years ago)
9.0.7704 Jul 2023
(3 years ago)
9.0.7804 Jul 2023
(3 years ago)
9.0.7605 Jun 2023
(3 years ago)
9.0.7504 May 2023
(3 years ago)
9.0.7413 Apr 2023
(3 years ago)
9.0.7327 Feb 2023
(3 years ago)
9.0.7218 Feb 2023
(3 years ago)
9.0.7109 Jan 2023
(3 years ago)
9.0.7001 Dec 2022
(3 years ago)
9.0.6909 Nov 2022
(3 years ago)
9.0.6803 Oct 2022
(3 years ago)
9.0.6723 Sep 2022
(3 years ago)
9.0.6622 Sep 2022
(3 years ago)
9.0.6514 Jul 2022
(4 years ago)
9.0.6402 Jun 2022
(4 years ago)
9.0.6311 May 2022
(4 years ago)
9.0.6231 Mar 2022
(4 years ago)
9.0.6130 Mar 2022
(4 years ago)
9.0.6009 Mar 2022
(4 years ago)
9.0.5921 Feb 2022
(4 years ago)
9.0.5815 Jan 2022
(4 years ago)
9.0.5712 Jan 2022
(4 years ago)
9.0.5602 Dec 2021
(4 years ago)
9.0.5510 Nov 2021
(4 years ago)
9.0.5428 Sep 2021
(4 years ago)
9.0.5306 Sep 2021
(5 years ago)
9.0.5231 Jul 2021
(5 years ago)
9.0.5130 Jul 2021
(5 years ago)
9.0.5028 Jun 2021
(5 years ago)
9.0.4927 Jun 2021
(5 years ago)
9.0.4810 Jun 2021
(5 years ago)
9.0.4708 Jun 2021
(5 years ago)
9.0.4608 May 2021
(5 years ago)
9.0.4530 Mar 2021
(5 years ago)
9.0.4404 Mar 2021
(5 years ago)
9.0.4328 Jan 2021
(5 years ago)
9.0.4227 Jan 2021
(5 years ago)
9.0.4103 Dec 2020
(5 years ago)
9.0.4012 Nov 2020
(5 years ago)
9.0.3906 Oct 2020
(5 years ago)
9.0.3810 Sep 2020
(5 years ago)
9.0.3730 Jun 2020
(6 years ago)
9.0.3603 Jun 2020
(6 years ago)
9.0.3505 May 2020
(6 years ago)
9.0.3403 Apr 2020
(6 years ago)
9.0.3311 Mar 2020
(6 years ago)
9.0.3206 Mar 2020
(6 years ago)
9.0.3105 Feb 2020
(6 years ago)
9.0.3007 Dec 2019
(6 years ago)
9.0.2916 Nov 2019
(6 years ago)
9.0.2814 Nov 2019
(6 years ago)
9.0.2707 Oct 2019
(6 years ago)
9.0.2516 Sep 2019
(6 years ago)
9.0.2616 Sep 2019
(6 years ago)
9.0.2314 Aug 2019
(7 years ago)
9.0.2414 Aug 2019
(7 years ago)
9.0.2204 Jul 2019
(7 years ago)
9.0.2104 Jun 2019
(7 years ago)
9.0.2003 May 2019
(7 years ago)
9.0.1912 Apr 2019
(7 years ago)
9.0.1810 Apr 2019
(7 years ago)
9.0.1713 Mar 2019
(7 years ago)
9.0.1604 Feb 2019
(7 years ago)
9.0.1503 Feb 2019
(7 years ago)
9.0.1406 Dec 2018
(7 years ago)
9.0.1302 Nov 2018
(7 years ago)
9.0.1204 Sep 2018
(8 years ago)
9.0.1111 Aug 2018
(8 years ago)
9.0.1020 Jun 2018
(8 years ago)
9.0.920 Jun 2018
(8 years ago)
9.0.827 Apr 2018
(8 years ago)
9.0.703 Apr 2018
(8 years ago)
9.0.605 Mar 2018
(8 years ago)
9.0.506 Feb 2018
(8 years ago)
9.0.418 Jan 2018
(8 years ago)
9.0.311 Jan 2018
(8 years ago)
9.0.225 Nov 2017
(8 years ago)
9.0.127 Sep 2017
(8 years ago)
9.0.022 Sep 2017
(8 years ago)
9.0.0-M2713 Sep 2017
(8 years ago)
9.0.0-M2602 Aug 2017
(9 years ago)
9.0.0-M2524 Jul 2017
(9 years ago)
9.0.0-M2418 Jul 2017
(9 years ago)
9.0.0-M2304 Jul 2017
(9 years ago)
9.0.0-M2221 Jun 2017
(9 years ago)
9.0.0-M2104 May 2017
(9 years ago)
9.0.0-M2012 Apr 2017
(9 years ago)
9.0.0-M1927 Mar 2017
(9 years ago)
9.0.0-M1808 Mar 2017
(9 years ago)
9.0.0-M1710 Jan 2017
(9 years ago)
9.0.0-M1605 Jan 2017
(9 years ago)
9.0.0-M1405 Dec 2016
(9 years ago)
9.0.0-M1505 Dec 2016
(9 years ago)
9.0.0-M1303 Nov 2016
(9 years ago)
9.0.0-M1202 Nov 2016
(9 years ago)
9.0.0-M1106 Oct 2016
(9 years ago)
9.0.0-M1031 Aug 2016
(10 years ago)
9.0.0-M904 Jul 2016
(10 years ago)
9.0.0-M707 Jun 2016
(10 years ago)
9.0.0-M807 Jun 2016
(10 years ago)
9.0.0-M611 May 2016
(10 years ago)
9.0.0-M510 May 2016
(10 years ago)
9.0.0-M412 Mar 2016
(10 years ago)
9.0.0-M301 Feb 2016
(10 years ago)
9.0.0-M221 Jan 2016
(10 years ago)
9.0.0-M112 Nov 2015
(10 years ago)