رأس القلم

CVE-2025-66614 Apache Tomcat Client Certificate Authentication Bypass Explained

CVE-2025-66614 is an Apache Tomcat authentication vulnerability that can allow a remote client to reach a virtual host protected by client-certificate authentication without presenting the certificate that administrators expected Tomcat to require.

The flaw is particularly interesting because it is not caused by broken X.509 cryptography, a forged certificate, a compromised certificate authority, or a failure to validate a certificate chain. Instead, the security boundary breaks because two different layers of the same HTTPS connection can disagree about which virtual host the client is actually accessing.

During the TLS handshake, the client can identify a hostname through the Server Name Indication, or SNI, extension. After TLS has been established, the HTTP request identifies a host again through the المضيف header in HTTP/1.1 or normally through :authority in HTTP/2.

Affected Apache Tomcat releases did not adequately ensure that those identities represented the same virtual host before relying on the TLS-layer virtual-host configuration for client certificate enforcement.

Apache describes CVE-2025-66614 as a client certificate verification bypass caused by virtual host mapping. The vulnerability affects Tomcat 11.0.0-M1 through 11.0.14, Tomcat 10.1.0-M1 through 10.1.49, and Tomcat 9.0.0-M1 through 9.0.112. Apache also confirmed that the now-EOL Tomcat 8.5.0 through 8.5.100 releases are affected. (Apache Tomcat)

The vulnerability was reported to the Apache Tomcat security team on October 15, 2025 and publicly disclosed on February 17, 2026. This explains why it carries a 2025 CVE identifier despite becoming public in 2026. (Apache Tomcat)

More importantly, CVE-2025-66614 should no longer be viewed as an isolated February 2026 vulnerability. Apache later discovered that the original fix was incomplete, producing CVE-2026-32990. In August 2026, a second incomplete-fix condition involving HTTP/2 was disclosed as CVE-2026-65637. Administrators therefore need to understand the entire vulnerability chain rather than simply checking whether they installed the first CVE-2025-66614 patch.

CVE-2025-66614 at a Glance

البندالتفاصيل
مكافحة التطرف العنيفCVE-2025-66614
المنتجApache Tomcat
الضعفClient certificate verification bypass
السبب الجذريInconsistent validation of TLS SNI hostname and HTTP host identity
Primary weaknessCWE-20 Improper Input Validation
Apache severityمعتدل
NVD CVSS v3.19.1 Critical
ناقل الهجومNetwork
Authentication requiredNone for the vulnerable TLS path
User interactionلا يوجد
Main prerequisiteMultiple virtual hosts with different client-certificate policies
Additional prerequisiteClient certificate authentication enforced only at the Connector/TLS layer
Original fixed versions11.0.15, 10.1.50, 9.0.113
First incomplete-fix CVECVE-2026-32990
Second incomplete-fix CVECVE-2026-65637
Current safe baseline for this vulnerability chain11.0.25+, 10.1.58+, 9.0.121+

Apache itself classified CVE-2025-66614 as معتدل, while NVD currently displays a CVSS v3.1 score of 9.1 Critical with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. CISA’s enrichment uses a different assessment, scoring it 7.6 High. These differences are a useful reminder that CVSS does not fully capture configuration prerequisites: the flaw can have serious impact when the required Tomcat architecture exists, but many deployments will not satisfy those prerequisites. (NVD)

Why Client Certificate Authentication Matters

Most HTTPS deployments authenticate only one side of the connection.

The web server presents a certificate to the client, allowing the client to verify the server’s identity. The client itself usually authenticates later using a password, session cookie, API token, OAuth flow, or another application-layer mechanism.

Mutual TLS, commonly called mTLS, adds authentication in the opposite direction. The server requests a certificate from the client during TLS negotiation and validates that certificate against an approved trust chain.

Tomcat’s current documentation describes certificateVerification="required" as the setting that instructs the SSL stack to require a valid client certificate chain before accepting the connection. The default لا شيء configuration does not require one at the TLS layer. (Apache Nightlies)

A simplified protected configuration could conceptually look like this:

<SSLHostConfig
    hostName="secure.example.com"
    certificateVerification="required">

    <Certificate
        certificateKeystoreFile="secure-server.p12"
        certificateKeystorePassword="changeit"
        type="RSA" />
</SSLHostConfig>

A different virtual host on the same HTTPS Connector might intentionally allow ordinary public clients:

<SSLHostConfig
    hostName="public.example.com"
    certificateVerification="none">

    <Certificate
        certificateKeystoreFile="public-server.p12"
        certificateKeystorePassword="changeit"
        type="RSA" />
</SSLHostConfig>

There is nothing inherently unsafe about hosting public and mTLS-protected services on the same Tomcat instance.

The security problem appears when the TLS layer makes its authentication decision using one hostname while the HTTP routing layer ultimately processes the request as another hostname.

Understanding SNI Before Understanding CVE-2025-66614

SNI is carried inside the TLS ClientHello.

Imagine that a single server IP address hosts:

public.example.com
secure.example.com
api.example.com
admin.example.com

Before SNI became widespread, servers had difficulty selecting different certificates for different HTTPS sites on the same IP because the server needed to choose a certificate before the encrypted HTTP request revealed the intended hostname.

SNI solves this by allowing the client to announce the intended hostname early in the TLS handshake.

Conceptually:

Client
  |
  | TLS ClientHello
  | SNI = secure.example.com
  v
Tomcat TLS Connector
  |
  | chooses TLS configuration
  | for secure.example.com
  v
TLS negotiation

Tomcat models TLS configuration for virtual hosts using SSLHostConfig. Its API explicitly describes SSLHostConfig as representing the TLS configuration for a virtual host. (Apache Tomcat)

This allows one HTTPS Connector to maintain multiple TLS configurations.

على سبيل المثال:

SNI = public.example.com
        ↓
SSLHostConfig(public.example.com)
        ↓
certificateVerification = none

while:

SNI = secure.example.com
        ↓
SSLHostConfig(secure.example.com)
        ↓
certificateVerification = required

So far, this is expected behavior.

HTTP Performs Host Selection Again

After TLS negotiation succeeds, HTTP arrives.

For HTTP/1.1, a request could look like:

GET /dashboard HTTP/1.1
Host: secure.example.com
Connection: close

Apache Tomcat’s virtual-host documentation explains that Tomcat extracts the hostname from the HTTP headers and attempts to locate the corresponding المضيف container. If no matching Host exists, the request is routed to the configured default host. (Apache Tomcat)

That gives us two separate decisions:

TLS layer
SNI
 ↓
SSLHostConfig
 ↓
TLS policy

HTTP layer
Host header
 ↓
Tomcat Host
 ↓
Web application

Normally both hostnames describe the same destination.

The vulnerable assumption was effectively:

SNI hostname == HTTP hostname

without enforcing that assumption strongly enough.

CVE-2025-66614 exists because attackers could deliberately make them different.

How CVE-2025-66614 Works

Consider the following simplified infrastructure:

                   Apache Tomcat
                        |
               HTTPS Connector :443
                        |
            +-----------+-----------+
            |                       |
      public.example.com      secure.example.com
            |                       |
     client cert: NONE       client cert: REQUIRED
            |                       |
      Public Application      Sensitive Application

An ordinary legitimate request to the protected service would use:

SNI: secure.example.com
Host: secure.example.com

Tomcat would select the protected TLS configuration and demand a client certificate.

Without a valid certificate:

ClientHello
SNI = secure.example.com
        |
        v
certificateVerification = required
        |
        v
No client certificate
        |
        v
TLS authentication fails

Now consider a deliberately inconsistent request.

At the TLS layer:

SNI: public.example.com

At the HTTP layer:

Host: secure.example.com

In the vulnerable configuration, Tomcat could first process the TLS connection according to the public virtual host:

SNI = public.example.com
        |
        v
SSLHostConfig(public)
        |
        v
certificateVerification = none
        |
        v
TLS handshake succeeds

But after the encrypted HTTP request arrived:

Host = secure.example.com
        |
        v
Tomcat virtual-host routing
        |
        v
secure.example.com application

The result was a cross-layer identity mismatch.

The client obtained the weaker authentication policy of one virtual host while reaching the HTTP application associated with another.

Apache’s advisory describes essentially this condition: where one virtual host did not require client-certificate authentication and another did, differing SNI and HTTP Host values could allow client certificate authentication to be bypassed. (Mail Archive)

This is the core of CVE-2025-66614.

CVE-2025-66614 SNI and HTTP Host Authentication Bypass Attack Flow

The Vulnerability Is Really a Security-Boundary Confusion Bug

It is tempting to describe CVE-2025-66614 simply as a certificate-validation vulnerability.

That description is incomplete.

The more interesting lesson is that the vulnerability represents identity confusion between protocol layers.

The TLS layer answers:

Which TLS virtual host is this connection associated with?

The HTTP layer answers:

Which application virtual host should process this request?

If authorization policy depends on the answer to the first question, while application routing depends on the answer to the second, the two answers must remain bound together.

CVE-2025-66614 broke that binding.

The authentication itself might work exactly as implemented.

The certificate checker does not necessarily accept an invalid certificate.

The attacker does not necessarily forge anything.

Instead, the attacker persuades Tomcat to execute the certificate policy associated with:

Host A

and subsequently route the request to:

Host B

That distinction matters when organizations model similar vulnerabilities elsewhere.

Any architecture where identity or security policy is derived independently from multiple attacker-controlled protocol fields can potentially suffer this class of confusion:

TLS SNI          vs HTTP Host
HTTP Host        vs reverse-proxy routing
Origin           vs forwarded host
JWT audience     vs backend route
Tenant header    vs authenticated tenant identity
URL path         vs normalized path

The specific bug is Tomcat-specific, but the architectural lesson is broader.

Exact Conditions Required for Exploitation

CVE-2025-66614 does not mean every Tomcat server running an affected release is automatically vulnerable.

Apache identifies several important prerequisites.

Multiple virtual hosts must exist

The server needs more than one relevant virtual host.

If the entire Connector uses one uniform TLS policy, there is no weaker virtual host from which the attacker can borrow authentication behavior.

The virtual hosts need different client-certificate requirements

At least one virtual host must allow a TLS connection without a client certificate.

Another virtual host must rely on client certificate authentication.

على سبيل المثال:

public.example.com   → certificateVerification=none
secure.example.com   → certificateVerification=required

If every virtual host requires a certificate, SNI manipulation does not create the same authentication downgrade.

The protected application must rely on Connector-level certificate enforcement

This prerequisite is particularly important.

Apache explicitly states that the vulnerability applies when client certificate authentication is enforced only at the Connector. It does not apply in the same way when client certificate authentication is enforced by the web application. (Apache Tomcat)

This creates an important distinction between:

TLS-layer certificate requirement

and:

application-layer CLIENT-CERT authentication

When application-level authorization independently verifies that the request has an authenticated client identity, successful TLS negotiation alone is insufficient.

That is defense in depth.

A Vulnerable Architecture

A simplified vulnerable design could look like:

Internet
   |
   v
Tomcat HTTPS Connector
   |
   +-----------------------------+
   |                             |
SSLHostConfig A              SSLHostConfig B
public.example.com           admin.example.com
certificateVerification      certificateVerification
= none                       = required
   |                             |
   +-------------+---------------+
                 |
           HTTP Host routing
                 |
        +--------+--------+
        |                 |
   Public Host        Admin Host

The vulnerability appears because the authentication decision is made before HTTP routing and against potentially different host identity information.

The attacker-controlled path becomes:

SNI = public.example.com
            |
            v
TLS uses non-mTLS policy
            |
            v
Handshake succeeds
            |
            v
Host = admin.example.com
            |
            v
Request mapped to protected host

A Safer Architecture

A defense-in-depth design looks more like this:

Internet
   |
   v
TLS / mTLS policy
   |
   v
SNI-Host consistency validation
   |
   v
Tomcat HTTP virtual host
   |
   v
Application CLIENT-CERT authentication
   |
   v
Application authorization

The protected application does not simply assume:

TLS connection succeeded
therefore
client is authorized

Instead, it explicitly checks the authenticated principal or client certificate identity before serving protected resources.

Authorized Lab Validation

Security teams can validate exposure without developing a destructive exploit.

Consider an isolated test environment containing:

public.lab.example
secure.lab.example

where only secure.lab.example requires client certificates.

A normal negative test should connect using the protected hostname and confirm that certificate-less access fails:

openssl s_client \
  -connect tomcat.lab.example:443 \
  -servername secure.lab.example

A CVE-2025-66614-oriented consistency test uses the non-protected SNI identity while requesting the protected HTTP virtual host:

openssl s_client \
  -connect tomcat.lab.example:443 \
  -servername public.lab.example

After the TLS connection is established in the test environment, an HTTP request can exercise the second hostname:

GET / HTTP/1.1
Host: secure.lab.example
Connection: close

On a correctly patched server, strict host/SNI consistency logic should prevent the authentication boundary from being crossed.

This form of validation should only be performed against systems you own or have explicit authorization to test.

The important test property is not simply whether the server returns 200 موافق. The security team should determine whether the supposedly mTLS-protected application is reached without the required client identity.

Why a Reverse Proxy Does Not Automatically Eliminate the Risk

Many production Tomcat systems sit behind infrastructure such as:

Client
  |
  v
CDN / WAF
  |
  v
Load Balancer
  |
  v
Reverse Proxy
  |
  v
Tomcat

This may change exploitability, but it should not be treated as an automatic mitigation.

Several questions matter:

Does TLS terminate before Tomcat?

Does the proxy rewrite the Host header?

Does it preserve the original SNI?

Does it establish a new TLS connection to Tomcat?

Does Tomcat itself enforce client certificates?

Is mTLS enforced at the proxy instead?

Can clients connect directly to Tomcat and bypass the proxy?

Apache’s broader Tomcat security guidance explicitly recommends defense in depth when Tomcat operates behind a reverse proxy rather than assuming that the proxy provides the only necessary security control. (Apache Tomcat)

If the reverse proxy terminates external TLS and performs client-certificate authentication itself, the exact vulnerable path may disappear from the external attack surface.

But if Tomcat independently serves multiple HTTPS virtual hosts with mixed certificate policies, the configuration still deserves review.

Severity: Moderate, High, or Critical?

This vulnerability has generated noticeably different severity assessments.

Apache’s own security advisory labels CVE-2025-66614 معتدل. (Apache Tomcat)

NVD currently shows a 9.1 Critical CVSS v3.1 score. (NVD)

GitHub’s reviewed advisory uses CVSS v4 and currently displays 6.3 Moderate. (جيثب)

None of these numbers should replace environment-specific analysis.

The potential consequences can be serious because successful exploitation may cross an authentication boundary protecting sensitive applications.

However, several deployment conditions must exist simultaneously.

A useful operational assessment is therefore:

البيئةPractical priority
One HTTPS virtual host, no client cert authenticationLow relevance
Multiple hosts, same TLS authentication policyLower exposure
Multiple hosts with mixed mTLS requirementsHigh investigation priority
mTLS-protected administrative/API application relying only on ConnectorHigh priority
Internet-reachable mixed-host deploymentImmediate review
Application independently performs CLIENT-CERT authenticationReduced exposure to original CVE
Tomcat already on current corrected releasesOriginal vulnerability mitigated

The Original Patch Was Not the End of the Story

This is currently the most important part of CVE-2025-66614 remediation.

The original Apache advisory instructed users to upgrade to:

Tomcat 11.0.15+
Tomcat 10.1.50+
Tomcat 9.0.113+

Those versions introduced the first fix. (NVD)

But that fix later proved incomplete.

CVE-2026-32990: Case Differences Bypassed the First Fix

Apache disclosed CVE-2026-32990 on April 9, 2026.

The problem was subtle: the validation of the SNI hostname and HTTP hostname failed to correctly account for differences in character case.

As a result, strict SNI checking could still be bypassed under affected versions. Apache identified these affected ranges:

Tomcat 11.0.15 through 11.0.19
Tomcat 10.1.50 through 10.1.52
Tomcat 9.0.113 through 9.0.115

The corresponding fixed versions were:

Tomcat 11.0.20
Tomcat 10.1.53
Tomcat 9.0.116

(جيثب)

Conceptually, the first patch tried to enforce:

SNI == Host

but hostname comparison itself needs to respect DNS hostname semantics.

على سبيل المثال:

Secure.Example.com
secure.example.com
SECURE.EXAMPLE.COM

should not unexpectedly create different security outcomes merely because of case handling.

This demonstrates an important secure-coding principle: introducing a security comparison after a vulnerability disclosure is not enough. The comparison must operate on a properly normalized representation.

From CVE-2025-66614 to CVE-2026-65637: The Apache Tomcat Incomplete Fix Chain

CVE-2026-65637: The Second Incomplete Fix

Even CVE-2026-32990 was not the end of the story.

على August 25, 2026, Apache disclosed CVE-2026-65637, titled:

HTTP/2 no-authority bypass of strict SNI validation

Apache described it as an incomplete fix for CVE-2026-32990. (Openwall)

The affected versions were:

Tomcat 11.0.20 through 11.0.24
Tomcat 10.1.53 through 10.1.57
Tomcat 9.0.115 through 9.0.120

Apache recommends versions:

Tomcat 11.0.25
Tomcat 10.1.58
Tomcat 9.0.121

or later. (NVD)

The HTTP/2 angle matters because HTTP/2 does not use HTTP/1.1 headers in exactly the same manner. Host identity is normally communicated through the :authority pseudo-header.

If strict SNI validation expects a request authority to compare with the negotiated SNI identity, requests lacking that authority become an edge case.

The August fix closes that gap.

The change is also visible in Apache Tomcat’s current release notes. Tomcat 10.1.59 lists a notable change requiring every HTTP/2 request to provide an authority, either through :authority or a Host header. (Apache Tomcat)

That gives us the full evolution:

CVE-2025-66614
SNI and HTTP Host could disagree
        |
        v
Initial fix
        |
        v
CVE-2026-32990
Case handling could bypass comparison
        |
        v
Second fix
        |
        v
CVE-2026-65637
HTTP/2 request without authority
could bypass strict validation
        |
        v
Current corrected baseline

The Current Patch Guidance Has Changed

This is where older CVE articles can now be misleading.

If a security scanner says:

CVE-2025-66614 fixed in 10.1.50

that statement describes the original CVE patch, but it does not represent the best current security baseline for the complete vulnerability family.

As of August 28, 2026, organizations concerned about this SNI/virtual-host authentication boundary should use at least:

الفرعOriginal CVE-2025-66614 fixCVE-2026-32990 fixCurrent CVE-2026-65637 baseline
Tomcat 1111.0.1511.0.2011.0.25+
Tomcat 10.110.1.5010.1.5310.1.58+
Tomcat 99.0.1139.0.1169.0.121+

Apache currently distributes Tomcat 10.1.59 as the latest Tomcat 10 release, meaning users on that release are already beyond the CVE-2026-65637 minimum baseline. Apache also announced Tomcat 9.0.121 on August 18, 2026 and provides Tomcat 11.0.25 packages. (Apache Tomcat)

Where operating-system or enterprise middleware vendors provide their own Tomcat packages, administrators should use the vendor’s patched build rather than assuming the upstream version number maps directly to the downstream package version.

How to Audit Tomcat for CVE-2025-66614

A useful audit should examine both software version and architecture.

Checking only the version tells you whether vulnerable code exists.

Checking the configuration tells you whether the vulnerable security boundary is actually in use.

Determine the Tomcat version

Depending on installation method, administrators can inspect:

$CATALINA_HOME/bin/version.sh

or:

$CATALINA_HOME/bin/catalina.sh version

Package-managed installations may also expose the version through the package manager.

The safest current target is not merely the original CVE-2025-66614 fixed release. Verify that the release also includes the subsequent CVE-2026-32990 and CVE-2026-65637 corrections.

Locate TLS virtual-host configuration

Search server.xml and included configuration for:

grep -RniE \
'SSLHostConfig|certificateVerification|clientAuth|defaultSSLHostConfigName' \
"$CATALINA_BASE/conf"

You are looking for multiple TLS host configurations such as:

<SSLHostConfig
    hostName="public.example.com"
    certificateVerification="none">

and:

<SSLHostConfig
    hostName="internal.example.com"
    certificateVerification="required">

Tomcat’s current HTTP Connector documentation confirms that any number of SSLHostConfig elements may be nested in a Connector and that certificateVerification="required" makes the SSL stack require a valid client certificate chain. (Apache Nightlies)

Inventory Catalina virtual hosts

مراجعة:

<Engine ...>
    <Host name="public.example.com" ... />
    <Host name="secure.example.com" ... />
</Engine>

Tomcat’s Host container documentation confirms that multiple المضيف containers may be associated with an Engine and that Tomcat maps HTTP hostnames to these containers. (Apache Tomcat)

The security question is therefore:

Can SSLHostConfig A authenticate the connection,
while Catalina Host B processes the request?

Identify mixed authentication policies

Create a simple matrix:

المضيفClient certificate requiredSensitive application
www.example.comلا يوجدلا يوجد
api.example.comلا يوجدMaybe
partner.example.comنعمنعم
admin.example.comنعمنعم

Mixed rows are not automatically vulnerable on patched Tomcat.

But on affected releases they identify the configuration pattern that made CVE-2025-66614 meaningful.

Detecting Possible Exploitation

Detecting historical exploitation can be more difficult than detecting an ordinary suspicious URL because the security-relevant inconsistency spans TLS and HTTP.

The most useful telemetry correlates:

TLS SNI hostname
HTTP Host or :authority
client certificate presence
target application
response status

A suspicious event might conceptually appear as:

SNI               public.example.com
HTTP Host         admin.example.com
Client cert       absent
Target            /admin/
Response          200

That is substantially more meaningful than simply observing traffic to /admin/.

Network-level correlation

Where organizations operate TLS inspection, load balancers, service meshes, or packet-capture infrastructure, correlate the ClientHello SNI with the HTTP destination hostname after TLS termination.

Look for:

SNI != Host

or, for HTTP/2:

SNI != :authority

This does not automatically indicate exploitation. Legitimate proxy architectures can modify host information.

However, mismatches reaching a directly exposed Tomcat Connector deserve investigation.

Look for protected resources accessed without client identities

If applications normally expect a client certificate, identify requests where the expected authenticated identity is missing.

على سبيل المثال:

/admin/*
/partner-api/*
/internal/*
/machine-api/*

should rarely be successfully processed without the associated client authentication context.

Review reverse-proxy logs

Where nginx, Apache HTTP Server, HAProxy, Envoy, cloud load balancers, or API gateways terminate TLS, those systems may provide better SNI-to-host correlation than Tomcat’s ordinary application access logs.

Security teams should compare:

TLS frontend identity
↓
forwarded Host
↓
backend virtual host

Any route that lets a weak-authentication frontend reach a strong-authentication backend deserves review.

Configuration-Based Mitigation

Upgrading should be the primary remediation.

Configuration hardening should be defense in depth rather than a permanent substitute for patching.

Upgrade beyond the complete fix chain

As of August 28, 2026, use:

Tomcat 11.0.25 or later
Tomcat 10.1.58 or later
Tomcat 9.0.121 or later

for protection against the full CVE-2025-66614 → CVE-2026-32990 → CVE-2026-65637 sequence. (NVD)

If possible, use the newest supported release in the chosen Tomcat branch rather than installing exactly the first patched build.

Avoid unnecessary mixed mTLS policies

If multiple virtual hosts share a Connector, consider whether they genuinely need different TLS client-authentication policies.

A simpler design:

Connector A
All hosts require mTLS

Connector B
Public hosts only
No mTLS

reduces the chance of a cross-host authentication confusion problem.

For highly sensitive administrative or machine-to-machine interfaces, a separate IP address, port, proxy listener, or security zone may provide a clearer trust boundary.

Enforce authentication at the application layer

Apache explicitly says CVE-2025-66614 does not apply in the same way when client certificate authentication is enforced by the web application rather than relying solely on the Connector. (مكافحة التطرف العنيف)

Tomcat supports Servlet container authentication using client certificates.

Conceptually, an application may declare:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected API</web-resource-name>
        <url-pattern>/api/*</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>partner</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>CLIENT-CERT</auth-method>
</login-config>

That does not eliminate the need to patch Tomcat.

It creates another security decision closer to the protected resource.

The principle is:

Network authentication
+
TLS authentication
+
Application authentication
+
Authorization

rather than:

TLS handshake succeeded
=
application access granted

Why mTLS Security Should Not Stop at Certificate Validation

CVE-2025-66614 also demonstrates a common misunderstanding about mTLS.

Teams often think the security question is simply:

Is the certificate valid?

But real mTLS authorization requires several questions:

Was a certificate presented?

Was the chain valid?

Was it issued by the expected CA?

Is it expired?

Was it revoked?

What identity does the certificate represent?

Does that identity belong to this tenant?

Is that identity authorized for this application?

Was authentication performed for the same destination being accessed?

CVE-2025-66614 specifically attacks the last question.

The certificate security mechanism can be cryptographically correct while the surrounding routing system still makes the wrong authorization decision.

Why Virtual Hosting Creates Security Complexity

Virtual hosting allows organizations to consolidate infrastructure.

Instead of operating:

4 IP addresses
4 Tomcat instances
4 TLS listeners

they can operate:

1 IP address
1 Tomcat instance
1 Connector
multiple virtual hosts

That is operationally convenient.

But multiplexing increases the number of boundaries that need to agree:

DNS
↓
SNI
↓
TLS certificate
↓
TLS client-auth policy
↓
HTTP Host / :authority
↓
Tomcat Host
↓
Web application
↓
Application authorization

An inconsistency at any transition can become security-sensitive.

CVE-2025-66614 is a particularly clean example because the attacker does not need to defeat mTLS directly.

They only need to cause the wrong virtual-host policy to be associated with the connection.

Why CVE-2026-65637 Makes the Story More Important

The August 2026 follow-up is especially useful for defenders because it demonstrates how difficult protocol-boundary fixes can be.

The initial vulnerability involved:

SNI vs Host

The first follow-up involved:

normalization and case handling

The second follow-up involved:

HTTP/2 authority semantics

Each patch addressed another representation of the same underlying security invariant:

The application destination must remain consistent with the destination identity used when applying the TLS authentication policy.

A robust security invariant should therefore not depend on one header, one case-sensitive string comparison, or one HTTP protocol version.

It should hold across:

HTTP/1.1
HTTP/2
mixed-case hostnames
default virtual hosts
missing authority
aliases
proxy routing
TLS virtual hosts

That is why the latest Tomcat release change requiring every HTTP/2 request to provide an authority is technically important, not merely protocol housekeeping. (Apache Tomcat)

Security Teams Should Retest After Security Patches

The CVE-2025-66614 history also illustrates why patch validation matters.

A common vulnerability-management workflow is:

CVE published
↓
patch released
↓
scanner sees patched version
↓
ticket closed

That workflow would have failed here.

The actual timeline became:

February 2026
CVE-2025-66614 disclosed
↓
Initial patch deployed
↓
April 2026
CVE-2026-32990 reveals incomplete fix
↓
Second patch deployed
↓
August 2026
CVE-2026-65637 reveals another edge case
↓
Third security baseline required

For infrastructure that protects sensitive applications, patching should ideally be followed by behavioral verification.

Test the invariant, not only the version number.

For this vulnerability family, that means testing:

SNI A + Host A
SNI A + Host B
SNI B + Host A
mixed case
HTTP/1.1
HTTP/2
missing or malformed authority conditions
client certificate present
client certificate absent

A patched server should consistently reject combinations that would let the client inherit a weaker authentication policy than the target application requires.

Incident Response Questions

Organizations discovering an affected deployment should answer several questions.

First, determine whether the configuration was actually exploitable.

Ask:

Were multiple SSLHostConfig entries active?

Did they use different certificateVerification values?

Was the sensitive virtual host reachable through the same Connector?

Was client authentication enforced exclusively at the Connector?

Could external clients reach Tomcat directly?

Did a reverse proxy normalize SNI and Host relationships?

Second, determine the exposure period.

Because CVE-2025-66614 was reported to Apache in October 2025 and disclosed in February 2026, organizations should not automatically assume exploitation began only after public disclosure.

At the same time, public vulnerability information does not by itself prove historical exploitation.

Third, review telemetry for successful unauthenticated access to applications expected to require certificates.

Focus on administrative interfaces, B2B APIs, internal control planes, machine APIs, and service endpoints where possession of a client certificate was intended to be the primary security boundary.

Is CVE-2025-66614 Actively Exploited?

Public evidence should be interpreted carefully.

The NVD record contains CISA SSVC enrichment with exploitation marked لا شيء as of the listed assessment, rather than confirmed active exploitation. (NVD)

That does not prove exploitation is impossible or has never occurred.

It means defenders should avoid repeating unsupported claims such as:

CVE-2025-66614 is being massively exploited in the wild.

unless newer evidence establishes that fact.

The more defensible position is that this is a remotely reachable authentication-boundary vulnerability with meaningful impact in specific multi-virtual-host configurations, and because the underlying fix has required multiple corrections, exposed environments should be patched and tested promptly.

EOL Tomcat Versions Require Special Attention

Apache explicitly identifies Tomcat 8.5.0 through 8.5.100 as affected by CVE-2025-66614 even though that branch was already end-of-life when the CVE was created. (NVD)

This matters operationally.

Organizations sometimes interpret:

EOL

as:

not affected by new vulnerabilities

The opposite is often true.

EOL means:

security support has ended

not:

the code can no longer contain vulnerabilities

An EOL branch may remain vulnerable while no new upstream release is produced for that branch.

Organizations still running Tomcat 8.5 should therefore treat the CVE as another reason to migrate to a supported Tomcat release or use a supported vendor-maintained backport where applicable.

Practical Remediation Checklist

The remediation process can be summarized as:

تحققالإجراء الموصى به
Tomcat 11 below 11.0.25الترقية
Tomcat 10.1 below 10.1.58الترقية
Tomcat 9 below 9.0.121الترقية
Tomcat 8.5Migrate from EOL branch
Multiple SSLHostConfig entriesالمراجعة
Mixed certificateVerification policiesReview carefully
Sensitive host relies only on Connector mTLSAdd defense in depth
Direct internet access to backend TomcatRestrict where possible
Reverse proxy performs TLSVerify backend routing assumptions
HTTP/2 enabledEnsure CVE-2026-65637 fix is present
Initial 2026 patch installed onlyUpgrade again
Historical sensitive trafficReview for SNI/Host inconsistencies

The Most Important Technical Lesson

CVE-2025-66614 is ultimately about binding authentication to the correct resource.

Authentication is not secure merely because it happened.

It must happen:

for the correct identity
at the correct layer
for the correct destination
under the correct policy

An authentication check for:

public.example.com

cannot safely authorize access to:

admin.example.com

even when both sites share the same server, IP address, Connector, certificate infrastructure, or Tomcat process.

Security controls that depend on routing metadata therefore need consistency guarantees.

That is the broader lesson behind the SNI and Host mismatch.

Frequently Asked Questions

What is CVE-2025-66614?

CVE-2025-66614 is an Apache Tomcat client certificate authentication bypass involving virtual-host mapping. A client could provide one hostname through TLS SNI and another through the HTTP Host field, potentially causing Tomcat to use a non-mTLS TLS configuration while routing the HTTP request to an mTLS-protected virtual host. (مكافحة التطرف العنيف)

Is CVE-2025-66614 remotely exploitable?

The vulnerable behavior is reachable over the network, but exploitation requires a particular Tomcat configuration involving multiple virtual hosts and differing client-certificate policies.

Does an attacker need a valid client certificate?

The purpose of the vulnerability is precisely to bypass the client-certificate requirement under affected configurations, so a valid client certificate is not inherently required for the vulnerable path.

Are all Apache Tomcat servers vulnerable?

No. The vulnerable versions contain the flaw, but practical exploitation requires the virtual-host and Connector conditions described by Apache.

Which Tomcat versions were originally affected?

Apache identified:

11.0.0-M1 through 11.0.14
10.1.0-M1 through 10.1.49
9.0.0-M1 through 9.0.112
8.5.0 through 8.5.100

as affected. (NVD)

What were the original patched versions?

The original February 2026 advisory recommended:

11.0.15
10.1.50
9.0.113

or later. (Mail Archive)

Are those versions still sufficient?

They should no longer be considered the ideal security baseline for this vulnerability family.

Apache subsequently disclosed CVE-2026-32990 and CVE-2026-65637 because the earlier fixes were incomplete. (NVD)

What versions should be used now?

For the full SNI/Host validation fix chain, use at least:

Tomcat 11.0.25
Tomcat 10.1.58
Tomcat 9.0.121

or later supported releases. (NVD)

What is CVE-2026-32990?

CVE-2026-32990 is an incomplete-fix vulnerability related to CVE-2025-66614. The SNI-to-host validation introduced by the original patch did not correctly account for differences in hostname case. (Apache Tomcat)

What is CVE-2026-65637?

CVE-2026-65637 is another incomplete-fix condition disclosed on August 25, 2026. It involves HTTP/2 requests without authority information bypassing strict SNI validation. (Openwall)

Does application-level CLIENT-CERT authentication help?

Yes. Apache explicitly states that the original CVE-2025-66614 condition applies when client-certificate authentication is enforced only at the Connector and does not apply in the same manner when client certificate authentication is enforced at the web application. (Apache Tomcat)

Final Assessment

CVE-2025-66614 is an unusually instructive Apache Tomcat vulnerability because it demonstrates how a correct security mechanism can still fail when routing and authentication disagree about identity.

The vulnerable system effectively allowed two competing statements:

TLS:
"I am connecting to public.example.com."

HTTP:
"I want secure.example.com."

Tomcat used the first statement to determine whether a client certificate was necessary and could use the second statement to determine which application should receive the request.

That gap was enough to undermine the expected mTLS boundary.

The disclosure history makes the vulnerability even more significant. The February 2026 CVE-2025-66614 fix was followed by the April 2026 CVE-2026-32990 case-normalization issue and then by the August 25, 2026 CVE-2026-65637 HTTP/2 authority issue. (جيثب)

For defenders, the practical conclusion is straightforward: do not stop at the original CVE-2025-66614 patch level.

As of August 28, 2026, organizations relying on Apache Tomcat virtual hosting and client certificates should move to a release containing the complete remediation chain—at least Tomcat 11.0.25, 10.1.58, or 9.0.121, preferably the latest supported release in the chosen branch—then verify behavior using mismatched SNI/Host tests in an authorized environment. (NVD)

Just as importantly, sensitive applications should avoid treating successful TLS negotiation as the sole authorization decision. Connector-level mTLS, strict SNI validation, application-level authentication, explicit authorization, network segmentation, and consistent proxy routing should reinforce one another.

CVE-2025-66614 is therefore more than an Apache Tomcat certificate bug. It is a case study in a broader security rule:

the identity used to authenticate a connection must be the same identity used to authorize the resource reached through that connection.

شارك المنشور:
منشورات ذات صلة
arArabic