This is a bad lock on the staff-only door, not an open front gate
Plugin tenable:83764 maps to CVE-2014-7810, an Apache Tomcat Expression Language flaw fixed for the 7.x branch in 7.0.59 because 7.0.58 contained the fix but was never released. The bug lets a malicious web application abuse EL evaluation inside a privileged code path and bypass Tomcat's Java SecurityManager protections. For the vulnerable upstream line, Apache lists 7.0.0 through 7.0.57 as affected; the Nessus plugin flags < 7.0.59 for released-build hygiene.
paragraph 2: Vendor severity is technically defensible in a vacuum but too generous for most enterprise fleets. This is not an unauthenticated remote exploit against a normal Tomcat deployment; it generally matters only when you run untrusted third-party apps and enable SecurityManager isolation, which is a narrow shared-hosting or multi-tenant pattern. Tenable also says the plugin is version-only and did not verify exploitability on-host, which pushes this down hard in real patch queues.
4 steps from start to impact.
Gain app-deployment foothold with Tomcat Manager or CI/CD tooling
Tomcat Manager, compromised CI/CD credentials, a supply-chain hit on a WAR, or another prior compromise that already lets them publish application code. This is not the vulnerability doing initial access; it's the attacker arriving with the keys to the app shelf already in hand.- Ability to deploy or modify a web application on the target Tomcat
- Tomcat accepts code/content from a less-trusted tenant, partner, or already-compromised pipeline
- Most enterprises deploy only first-party apps to Tomcat
- Deployment paths are usually authenticated and restricted to admins or build systems
- This prerequisite already implies a serious prior compromise or trusted-tenant model
83764 does not test this step; it only checks the Tomcat version.Land on a host running Java SecurityManager
SecurityManager to sandbox webapps. Without that control boundary, there is nothing meaningful for CVE-2014-7810 to bypass. Apache's own advisory explicitly says the issue only affects installations that run web applications from untrusted sources.- Tomcat launched with
-securityor equivalent SecurityManager enablement - The deployment model relies on SecurityManager isolation between apps/tenants
- SecurityManager-backed isolation was never the dominant enterprise Tomcat pattern
- Many orgs run trusted in-house apps and never enable this mode
- Modern Java ecosystems have moved away from relying on SecurityManager
Trigger privileged EL evaluation with a malicious app
- A malicious app is deployed and executed
- The app can reach the vulnerable EL evaluation path
- Impact is bounded by the Tomcat process and hosting model, not a universal host takeover primitive
- This is mainly a cross-app isolation failure in shared or untrusted hosting setups
Pivot to cross-app impact, not instant internet-scale compromise
- Multiple apps or tenant boundaries exist on the same Tomcat instance
- Those boundaries materially depend on SecurityManager enforcement
- Single-purpose Tomcat nodes have little additional isolation to bypass
- If the attacker can already ship code to the server, your bigger problem is the deploy path compromise
The supporting signals.
| Primary issue | CVE-2014-7810 — Apache Tomcat EL SecurityManager bypass via privileged expression evaluation |
|---|---|
| In-the-wild status | No current KEV listing and I found no authoritative active-exploitation reporting tied to this CVE; Tenable also marks no known exploits available |
| Proof-of-concept availability | No mainstream public PoC surfaced in quick GitHub/Exploit-DB-style discovery, and Tenable explicitly says Exploit Ease: No known exploits are available |
| EPSS | Public mirrors currently show a non-zero but noisy EPSS signal for this old CVE; treat that as weak evidence because the real gating factor is the deployment model, not internet reachability |
| KEV status | Not listed in CISA's Known Exploited Vulnerabilities catalog as of the catalog source used here |
| CVSS interpretation | Vendor/NVD-style base scoring says network, low complexity, no auth, but that framing hides the decisive real-world prerequisite: the attacker typically needs a way to deploy a malicious webapp first |
| Affected versions | Apache Tomcat 7.0.0–7.0.57 are the upstream affected 7.x builds; Nessus uses < 7.0.59 because 7.0.58 was not released |
| Fixed versions | Upstream fix is delivered in released build 7.0.59 for Tomcat 7.x. Distro backports exist, including Debian tomcat7 7.0.28-4+deb7u3 / 7.0.56-3+deb8u1 and Ubuntu libtomcat7-java 7.0.56-2ubuntu0.1 for affected packages |
| Scanning / exposure reality | This flaw is not remotely fingerprintable by behavior; Tenable's plugin is version-only. Internet-wide product counts for Tomcat are therefore a poor proxy for exploitability of this specific CVE |
| Disclosure / credit | Apache publicly disclosed it on 2015-05-14 and credits the Apache Tomcat security team |
noisgate verdict.
The decisive downgrading factor is that this bug usually requires an attacker to already have application deployment capability plus a Tomcat setup that actually uses SecurityManager for sandboxing. That combination is rare in enterprise fleets and turns the CVE into a post-deployment isolation failure, not a broadly exploitable front-door service bug.
Why this verdict
- Requires a prior foothold: the attacker typically needs a way to deploy or alter a webapp first, which implies compromised admin, CI/CD, or tenant access before this CVE matters
- Narrow exposure pattern: impact depends on Tomcat actually using
SecurityManagersandboxing for less-trusted apps, which is a minority enterprise pattern - Version-only detection: Nessus did not validate exploitability on-host; it flagged a version range, so population-level noise is expected
- No KEV / no solid exploitation evidence: no CISA KEV listing and no strong public proof of broad exploitation keep this out of urgent patch lanes
- Blast radius is contextual: the bug is mainly about bypassing app isolation on the same Tomcat instance, not clean unauthenticated server-wide code execution
Why not higher?
Because the headline CVSS framing masks a major prerequisite chain. If an attacker must already be able to publish a malicious app and the server must also rely on SecurityManager isolation, this is not a fleet-wide internet-exposed emergency for a normal enterprise. The reachable population is much smaller than the version count suggests.
Why not lower?
I am not putting this at IGNORE because some organizations really do run shared or delegated Tomcat estates, legacy hosting models, or third-party WAR deployments where SecurityManager was part of the safety boundary. In those environments this is a real isolation failure, just not one that deserves front-of-line treatment across a general enterprise fleet.
What to do — in priority order.
- Audit who can deploy WARs — Confirm whether any tenant, partner, developer, or automation path can deploy or modify applications on affected Tomcat nodes. If deploy rights are tightly controlled, the practical risk collapses; for a LOW verdict there is no SLA (treat as backlog hygiene), but this review is the fastest way to prove the finding is low-noise.
- Check whether
SecurityManageris actually enabled — Review service definitions, startup scripts, and running process arguments for-securityor-Djava.security.manager. If it is not enabled, the CVE's core bypass condition is absent; for a LOW verdict there is no SLA (treat as backlog hygiene). - Lock down Tomcat Manager and CI/CD deploy paths — Restrict Manager access, rotate old deployment credentials, and validate that only approved pipelines can publish apps. This matters more than the CVE itself because the exploit path starts with a code-deployment foothold; for a LOW verdict there is no SLA (treat as backlog hygiene).
- Prefer distro backports where applicable — If the host uses vendor-packaged
tomcat7rather than upstream tarballs, verify the distro-fixed package version instead of chasing upstream7.0.59literally. For a LOW verdict there is no SLA (treat as backlog hygiene), but this avoids false-positive churn.
- A WAF does not solve this well; the vulnerability is about privileged EL evaluation inside a maliciously deployed app, not a clean front-door HTTP payload you can reliably signature.
- Hiding the Tomcat version banner reduces scanner visibility but does nothing about the underlying deploy-path and sandbox conditions.
- Network segmentation alone is weak compensation if the attacker already has Manager access or a compromised build pipeline, which is the more realistic prerequisite.
Crowdsourced verification payload.
Run this on the target Tomcat host as a user that can read the Tomcat install tree and inspect running processes; root is best, but read access plus ps visibility is usually enough. Invoke it as bash verify_cve_2014_7810.sh /opt/tomcat and it will output VULNERABLE, PATCHED, or UNKNOWN based on Tomcat 7.x version and whether SecurityManager appears enabled.
#!/usr/bin/env bash
# verify_cve_2014_7810.sh
# Checks Apache Tomcat 7.x for CVE-2014-7810 exposure conditions.
# Exit codes:
# 0 = PATCHED / not affected
# 1 = VULNERABLE
# 2 = UNKNOWN / insufficient evidence
set -u
TOMCAT_HOME="${1:-}"
if [[ -z "$TOMCAT_HOME" ]]; then
echo "UNKNOWN: usage: $0 /path/to/tomcat"
exit 2
fi
if [[ ! -d "$TOMCAT_HOME" ]]; then
echo "UNKNOWN: path not found: $TOMCAT_HOME"
exit 2
fi
version=""
# Method 1: bin/version.sh if present
if [[ -x "$TOMCAT_HOME/bin/version.sh" ]]; then
version=$("$TOMCAT_HOME/bin/version.sh" 2>/dev/null | awk -F': ' '/Server number/ {print $2; exit}')
fi
# Method 2: RELEASE-NOTES fallback
if [[ -z "$version" && -f "$TOMCAT_HOME/RELEASE-NOTES" ]]; then
version=$(grep -Eo 'Apache Tomcat Version [0-9]+\.[0-9]+\.[0-9]+' "$TOMCAT_HOME/RELEASE-NOTES" 2>/dev/null | head -n1 | awk '{print $4}')
fi
# Method 3: catalina.jar + ServerInfo fallback (requires java)
if [[ -z "$version" && -f "$TOMCAT_HOME/lib/catalina.jar" && -n "$(command -v java 2>/dev/null)" ]]; then
version=$(java -cp "$TOMCAT_HOME/lib/catalina.jar" org.apache.catalina.util.ServerInfo 2>/dev/null | awk -F'/| ' '/Server version/ {for (i=1;i<=NF;i++) if ($i ~ /^[0-9]+\.[0-9]+\.[0-9]+$/) {print $i; exit}}')
fi
if [[ -z "$version" ]]; then
echo "UNKNOWN: could not determine Tomcat version"
exit 2
fi
major=$(echo "$version" | cut -d. -f1)
minor=$(echo "$version" | cut -d. -f2)
patch=$(echo "$version" | cut -d. -f3)
if [[ "$major" != "7" ]]; then
echo "PATCHED: Tomcat version $version is not in the Tomcat 7.x line checked by this script"
exit 0
fi
# Only Apache Tomcat 7.0.0 through 7.0.57 are vulnerable upstream.
# Nessus flags < 7.0.59 because 7.0.58 was not released.
if [[ "$minor" -ne 0 ]]; then
echo "UNKNOWN: unexpected Tomcat 7.x version format: $version"
exit 2
fi
if (( patch >= 59 )); then
echo "PATCHED: Tomcat $version is at or above 7.0.59"
exit 0
fi
if (( patch == 58 )); then
echo "UNKNOWN: 7.0.58 was not a released upstream build; validate packaging/backport provenance"
exit 2
fi
# For 7.0.0 - 7.0.57, check whether SecurityManager appears enabled.
sm_enabled=0
# Process inspection
if ps -ef 2>/dev/null | grep -v grep | grep -E "[o]rg\.apache\.catalina\.startup\.Bootstrap|[t]omcat" | grep -Eq '(^| )-security( |$)|-Djava\.security\.manager'; then
sm_enabled=1
fi
# Config/script inspection
if grep -RqsE '(^|[[:space:]])-security([[:space:]]|$)|-Djava\.security\.manager' \
"$TOMCAT_HOME/bin" "$TOMCAT_HOME/conf" 2>/dev/null; then
sm_enabled=1
fi
if (( sm_enabled == 1 )); then
echo "VULNERABLE: Tomcat $version is in the affected range and SecurityManager appears enabled"
exit 1
fi
echo "UNKNOWN: Tomcat $version is in the affected version range, but SecurityManager was not confirmed; review service wrappers, systemd units, and startup environment manually"
exit 2
If you remember one thing.
SecurityManager is enabled; if not, document the rationale and push this into normal lifecycle cleanup. For a LOW verdict there is no noisgate mitigation SLA and noisgate remediation SLA is no SLA (treat as backlog hygiene), so plan remediation during routine Tomcat modernization rather than as an urgent patch event. If you *do* find a shared-hosting or delegated-WAR deployment pattern, reclassify those specific hosts upward and patch them on an exception basis.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.