Tomcat's new connector quietly threw away the revocation list and never told anyone
CVE-2026-53434 is a CWE-390 Detection of Error Condition Without Action bug in Apache Tomcat's FFM (Foreign Function & Memory) connector — the modern Panama-based port of the Tomcat Native/OpenSSL TLS stack. When the connector is configured to enforce client-cert validation against a Certificate Revocation List, and the supplied CRL fails to load (malformed, expired, wrong path, unreadable), the FFM code path silently swallows the error instead of failing closed. Net effect: the connector continues to serve mTLS handshakes with no revocation checking at all, so a revoked client certificate can still authenticate. Affected ranges are roughly 9.0.83 → 9.0.118, 10.1.x through 10.1.51-ish, and 11.0.x through 11.0.17, with the FFM connector being mandatory only when operators chose it explicitly.
Apache rated this Low and they're right. The bug doesn't grant code execution, RCE, or unauthenticated access — it degrades the *strength* of an already-optional security feature (client-cert revocation) only on a non-default connector type, and only when CRLs are misconfigured. The realistic victim profile is narrow: organizations doing mTLS with a CRL-based PKI on the FFM connector with a stale or broken CRL file. Vendor severity matches reality.
4 steps from start to impact.
Operator deploys Tomcat with FFM connector + CRL-based mTLS
org.apache.coyote.http11.Http11Nio2Protocol or the FFM variant, with SSLHostConfig referencing a certificateRevocationListFile. This is the precondition — APR/JSSE deployments are unaffected.- FFM connector explicitly selected
- CRL-file path configured on SSLHostConfig
- mTLS / client-cert auth enforced
- FFM is the newer, less-common connector — most prod Tomcat runs JSSE or APR
- CRL-based revocation is unusual; OCSP and short-lived certs dominate modern PKI
server.xml and conf/Catalina/*.xml for certificateRevocationListFile + FFM protocol class.CRL load silently fails
- CRL file is broken, stale, or unreadable
- Many operators run automated CRL fetch jobs (e.g. cron + curl) that catch staleness independently
- Healthy PKI ops rotate before expiry — broken CRLs are a side-effect bug, not a design
Attacker presents revoked client cert
- Attacker possesses private key for a once-valid, now-revoked cert
- Endpoint is reachable from attacker's network position
- Requires prior insider access or theft of a real cert + key
- Most mTLS deployments also bind certs to short TTLs or hardware tokens
- Application-layer auth (SSO, session, RBAC) frequently sits behind the mTLS layer
ssl_client_s_dn accepted that should have been rejected — invisible to NIDS unless CRL state is correlated server-side.Authenticated as revoked principal
- Revoked identity had non-trivial application access
- Defenders typically also disable upstream account on revocation
- Audit pipelines flag use of decommissioned identities
The supporting signals.
| In-the-wild exploitation | None observed. No PoC, no incident reports, no campaigns as of 2026-07-01. |
|---|---|
| Public PoC | None published. Conceptual repro is trivial (malformed CRL file + revoked cert) but no weaponized tooling exists. |
| EPSS | Not yet scored at disclosure; expected <0.1% / sub-5th percentile given Low severity and niche prereqs. |
| CISA KEV | Not listed. Unlikely candidate. |
| CVSS vector | No authoritative vendor vector published. Reasonable estimate: CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:L/I:L/A:N ≈ 3.1 Low. |
| Affected versions | Apache Tomcat 9.0.83 → 9.0.118, 10.1.x ≤ 10.1.51, 11.0.x ≤ 11.0.17 when running the FFM connector with CRL configured. |
| Fixed versions | 9.0.119, 10.1.52, 11.0.18 — FFM code now throws on CRL load error, matching JSSE/APR behaviour. |
| Exposure population | FFM connector adoption is a small minority of Tomcat installs; CRL-based mTLS on top of FFM is a small minority of that. Estimated affected fleet well under 1% of Tomcat deployments. |
| Disclosure | Reported to Tomcat security team 2026-06-08; public 2026-06-29. |
| Reporter | Apache Tomcat Security Team via private list; no external researcher credit published. |
noisgate verdict.
Assessed at LOW because the single decisive factor is the narrow precondition stack: the FFM connector is a non-default deployment choice, CRL-based mTLS is a non-default PKI choice, and a broken CRL file is itself a misconfiguration state. The bug only degrades — does not remove — defence-in-depth in a population that is well under 1% of the Tomcat install base.
Why this verdict
- Niche connector: FFM is the new Panama-based stack — most production Tomcat is JSSE or APR; FFM-only bug = small affected fleet.
- Compounding precondition: requires CRL-file mTLS configuration AND a broken CRL AND attacker possession of a previously-valid, now-revoked cert+key. Three independent unlikelies multiply.
- No primitives gained: no RCE, no auth bypass for never-trusted attackers, no privilege escalation — only weakens revocation against pre-issued, pre-trusted identities.
- Role multiplier: Tomcat in a low/typical role (LOB app server, microservice host) — chain ends in revoked-identity reuse, bounded by that identity's prior permissions. In a high-value role (Tomcat fronting an IdP, ADFS proxy, internal CA web UI, secrets-manager front-end), the chain ends in impersonation of a revoked admin — but even then the CRL-misconfig precondition keeps the affected installed-base share well below the 1% floor that would force HIGH.
- No KEV, no EPSS spike, no PoC — threat intel signal is flat.
Why not higher?
Not MEDIUM/HIGH because the bug requires multiple pre-existing conditions to align (FFM, CRL-mTLS, broken CRL, attacker-held revoked cert+key) and produces no new attacker primitives — it only reduces a defence-in-depth control's strength against a population the operator already chose to issue certs to. No KEV, no PoC, no observed exploitation.
Why not lower?
Not IGNORE because there *is* a real security regression: revocation checking is the entire point of CRL configuration, and a silent failure mode violates the operator's explicit security policy. Audit and compliance frameworks (FIPS, PCI-DSS mTLS scopes) will care.
What to do — in priority order.
- Inventory FFM connector + CRL usage across the fleet — Grep
server.xml/SSLHostConfigfor FFM protocol classes pluscertificateRevocationListFile. If the intersection is empty, you're not exposed. Complete within the noisgate remediation window (no mitigation SLA at LOW). - Validate CRL files load cleanly on every Tomcat restart — Pre-flight check the CRL with
openssl crl -in <file> -noout -textin your deploy pipeline; fail the deploy if it errors. This neutralises the bug entirely even on unpatched Tomcat — apply opportunistically alongside the next release window. - Switch FFM CRL-mTLS deployments to JSSE or APR temporarily — Both JSSE and APR fail-closed on bad CRLs. If you're on the FFM connector specifically for performance/Panama reasons, this is a 1-line
protocolchange inserver.xmluntil you upgrade. - Patch to 9.0.119 / 10.1.52 / 11.0.18 — Vendor fix aligns FFM behaviour with JSSE/APR (throws on CRL load error). Roll this in the standard 365-day noisgate remediation SLA for LOW; no fast-track needed.
- WAF / NGFW rules — the TLS handshake completes legitimately at the protocol level; no signature distinguishes a revoked-cert handshake from a valid one.
- Network ACLs — the attacker is already trusted enough to reach the mTLS endpoint; that's the whole premise of mTLS.
- OCSP stapling — different code path and unrelated bug class (see CVE-2026-24734 for the OCSP analog). Enabling OCSP does NOT fix the CRL load-error swallow.
Crowdsourced verification payload.
Run on each Tomcat host as the Tomcat service user (read access to $CATALINA_BASE/conf). Example: ./check-cve-2026-53434.sh /opt/tomcat. Exits VULNERABLE if FFM+CRL config is found on an unpatched version, PATCHED if version is fixed or config is absent, UNKNOWN otherwise.
#!/usr/bin/env bash
# noisgate verifier: CVE-2026-53434 — Tomcat FFM CRL silent-ignore
# Usage: ./check-cve-2026-53434.sh <CATALINA_BASE>
set -u
BASE="${1:-/opt/tomcat}"
CONF="$BASE/conf"
LIB="$BASE/lib"
if [ ! -d "$CONF" ] || [ ! -d "$LIB" ]; then
echo "UNKNOWN: $BASE does not look like a Tomcat install"
exit 2
fi
# 1. Derive Tomcat version
VER=$(java -cp "$LIB/catalina.jar" org.apache.catalina.util.ServerInfo 2>/dev/null \
| awk -F/ '/Server number/ {print $2}' \
| tr -d '[:space:]')
if [ -z "$VER" ]; then
VER=$(ls "$LIB" | grep -oE 'catalina-[0-9.]+\.jar' | head -1 | grep -oE '[0-9.]+')
fi
echo "Tomcat version detected: ${VER:-unknown}"
# 2. Is version fixed?
is_fixed() {
local v="$1"
case "$v" in
9.0.*) [ "${v#9.0.}" -ge 119 ] && return 0 ;;
10.1.*) [ "${v#10.1.}" -ge 52 ] && return 0 ;;
11.0.*) [ "${v#11.0.}" -ge 18 ] && return 0 ;;
esac
return 1
}
# 3. Look for FFM connector + CRL config
FFM_HIT=$(grep -RiE 'protocol="[^"]*(OpenSSL|FFM|Panama)[^"]*"' "$CONF" 2>/dev/null | head -5)
CRL_HIT=$(grep -RiE 'certificateRevocationListFile' "$CONF" 2>/dev/null | head -5)
if [ -z "$FFM_HIT" ] || [ -z "$CRL_HIT" ]; then
echo "PATCHED: FFM connector + CRL configuration not both present — not exposed"
exit 0
fi
if is_fixed "$VER"; then
echo "PATCHED: version $VER >= fixed release"
exit 0
fi
echo "VULNERABLE: FFM connector with CRL on unpatched Tomcat $VER"
echo "--- FFM connector evidence ---"
echo "$FFM_HIT"
echo "--- CRL config evidence ---"
echo "$CRL_HIT"
exit 1
If you remember one thing.
openssl crl -in <file> -noout to your deploy pre-flight so bad CRLs fail the rollout instead of silently weakening mTLS. Schedule the actual Tomcat upgrade to 9.0.119 / 10.1.52 / 11.0.18 within the noisgate remediation SLA of ≤365 days, bundled with your normal quarterly Tomcat patch train. Do not pull engineers off CRITICAL or HIGH work for this one.Sources
- Apache Tomcat 11 security advisories
- Apache Tomcat 10 security advisories
- Apache Tomcat 9 security advisories
- Apache Tomcat 9.0 Changelog
- HeroDevs — Apache Tomcat CVE round-up (April 2026)
- MITRE CVE keyword search — Tomcat
- OpenCVE — Apache Tomcat tracker
- CWE-390: Detection of Error Condition Without Action
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.