This isn't a vulnerability — it's a confession that you're running software the vendor stopped defending
Tenable plugin 109345 is not a CVE. It is a *lifecycle* finding: the scanner identified an Oracle WebLogic Server instance running a release family that has aged out of Oracle Premier and Extended Support (historically 10.3.x / 11g, 12.1.x, and increasingly 12.2.1.3/12.2.1.4 as their support windows close). Oracle ships WebLogic security fixes only through the quarterly Critical Patch Update (CPU) stream, and only for in-support versions. Once a release leaves that stream, any new WebLogic CVE — and WebLogic has had a *long* list of unauth pre-auth RCEs (CVE-2017-10271, 2019-2725, 2020-2883, 2020-14882, 2023-21839, 2024-20931 to name a few) — will never get a vendor patch on your box.
Tenable's CRITICAL label is *directionally correct but lazy*. The plugin itself has no exploit; it's a sticker. The real risk is the expected value of all future unpatched WebLogic CVEs over the asset's remaining lifetime, which on a product with WebLogic's exploit history is enormous. We rate this HIGH (8.5) rather than CRITICAL because severity depends entirely on network exposure and what the instance hosts — an internet-reachable unsupported WebLogic is effectively a 10.0; an air-gapped lab instance is a 4.
4 steps from start to impact.
Discover the unsupported instance
/console, /wls-wsat/, /_async/, or /em endpoints, the WebLogic Server HTTP header, or T3/IIOP banners on 7001/7002. Version is leaked through console login pages and error stacks. Tools: Shodan (product:"Oracle WebLogic"), FOFA, Nuclei template weblogic-detect.- Network reachability to HTTP/T3/IIOP listener
- Default management paths not stripped
- Reverse proxy hiding console paths
- Non-default ports
- WAF banner scrubbing
Select an unpatched RCE from the back catalog
/console/css/%252e%252e%252fconsole.portal, CVE-2023-21839 T3/IIOP JNDI injection (PoC: 4ra1n/CVE-2023-21839), or CVE-2024-20931 patch bypass.- Public PoC matching the deployed version
- Targeted endpoint reachable
- Custom security filters
- T3 protocol filter (
weblogic.security.net.ConnectionFilterImpl) configured - IIOP disabled
cmd.exe/bash from the Java process.Execute code as the WebLogic process account
servers/AdminServer/tmp/_WL_internal/... or as direct command execution via Runtime.exec. Tools: ysoserial, Behinder, Godzilla for managed shells.- WebLogic process can write to deployment temp dirs
- Outbound network for staging optional
- Read-only filesystem deployments (rare)
- Strict egress filtering blocking stagers
Pivot from the appserver tier
boot.properties, jdbc/*-jdbc.xml, and connection-pool config. Attacker exfils datasource creds, hits the backing Oracle/MSSQL/Postgres, and uses the appserver's privileged network position to reach internal services. From here it's standard post-exploit: AD enum, credential theft, lateral.- Service account has DB or AD-joined privileges
- Internal network reachability
- Tiered network segmentation
- Workload identity / IMDSv2-style ephemeral creds
- Database firewall
The supporting signals.
| In-the-wild status | WebLogic is one of the most consistently exploited Java appservers in the wild — multiple CVEs across the back catalog are CISA KEV-listed (2017-10271, 2019-2725, 2020-2883, 2020-14882, 2020-14883, 2023-21839). Mass-exploitation campaigns from cryptominer crews (8220 Gang, Kinsing, Rocke) and APT groups (DarkHotel, APT41) are routine. |
|---|---|
| PoC availability | Public PoCs exist for *every* significant WebLogic RCE — see Y4er/CVE-2023-21839, Al1ex/WeblogicScan, rabbitmask/WeblogicScan, 0nise/CVE-2020-14882. Metasploit modules: exploit/multi/misc/weblogic_deserialize_*. |
| EPSS | N/A for the plugin itself; individual WebLogic RCEs routinely score EPSS 0.94+ (>99th percentile). |
| KEV status | Plugin is informational; 6+ underlying WebLogic CVEs are KEV-listed (oldest added 2021-11-03). |
| CVSS framing | Plugin has no CVSS. The underlying unpatched RCEs are mostly CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8. |
| Affected versions | WebLogic 10.3.x (11g) — out of support since Dec 2018; 12.1.x — out since Dec 2022; 12.2.1.3 — Premier ended Dec 2022, Extended ended Dec 2025; 12.2.1.4 approaching end. Only 14.1.1.x / 14.1.2.x remain in active CPU coverage as of 2026. |
| Fixed version | Upgrade to 14.1.2.0 (current GA) and stay on quarterly CPU. There is no backport path for EOL families. |
| Exposure data | Shodan consistently shows 15,000–25,000 internet-exposed WebLogic instances globally; sampling typically shows the majority on unsupported 10.3/12.1/12.2.1.3 branches. |
| Disclosure | Plugin 109345 published by Tenable on 2018-04-11; expanded continuously as Oracle support windows close. |
| Researcher | Plugin authored by Tenable Research; lifecycle data sourced from Oracle Lifetime Support Policy documents. |
noisgate verdict.
The single decisive factor is role and exposure of the affected component: WebLogic is a canonical application-tier server frequently holding DB creds, AD service accounts, and customer data, and unsupported builds will *never* receive fixes for the steady stream of new RCEs. Vendor severity is correct in spirit but blunt — it does not distinguish an internet-exposed billing portal from an isolated lab box, and our HIGH bucket reflects that the realistic blast radius across an enterprise fleet of 10k hosts is fleet-impacting but exposure-dependent.
Why this verdict
- Lifecycle, not lottery: Unlike a single CVE, this finding *guarantees* future exploitability — every new WebLogic CPU adds another permanently-unpatched RCE to your asset.
- Back catalog is loaded: 6+ KEV-listed WebLogic RCEs already work against EOL builds with public PoCs and Metasploit modules.
- Role multiplier: WebLogic in its canonical role (Java EE app tier fronting Oracle DB, often AD-integrated) means a successful chain ends in datasource credential theft and lateral movement to the data tier — fleet-relevant outcome, hence HIGH floor.
- Friction adjustment downward: Many WebLogic instances are internal-only behind reverse proxies, which narrows the exploitable population versus a true 10.0 internet-wide bug.
- No vendor remediation pathway: The only fix is migration to 14.1.2, which is a project, not a patch — increasing the residency time of the risk.
Why not higher?
We hold at HIGH rather than CRITICAL because the plugin itself is a *condition*, not an active exploit chain — actual exploitability depends on network reachability and which specific endpoints (/console, T3, IIOP) are exposed. An internet-facing instance should be elevated to CRITICAL on a per-asset basis.
Why not lower?
MEDIUM would imply this is hygiene. It is not — unsupported WebLogic has an unbroken decade-long history of mass exploitation, the back catalog of unpatched RCEs grows every Oracle CPU, and a single compromised appserver typically leads to DB and AD compromise.
What to do — in priority order.
- Inventory and triage every WebLogic instance by exposure tier — Within the noisgate mitigation SLA of 30 days, classify each instance as Internet-exposed / DMZ / internal / isolated. Internet-exposed instances on EOL versions are de-facto CRITICAL — treat as already-compromised, do IR triage first.
- Remove internet exposure immediately — Put unsupported WebLogic behind an authenticating reverse proxy (or VPN-gate it) within 3 days for any externally reachable instance. Block direct access to
/console,/em,/wls-wsat/,/_async/,/clusterjsp/paths at the proxy/WAF. - Restrict T3/T3s/IIOP protocol access — Configure
weblogic.security.net.ConnectionFilterImplto allow T3 only from known management subnets. T3 is the carrier for most deserialization RCEs; closing it breaks a huge fraction of the exploit catalog. - Apply latest *available* Oracle CPU even if EOL — If your support contract still grants Extended Support or Sustaining patches, install them. Within 30 days, also harden via Oracle's deserialization blocklist (
weblogic.oif.serialFilter) if your version supports it. - Plan migration to WebLogic 14.1.2 or alternative platform — This is the only true remediation. Target 180-day remediation for HIGH-rated instances; bring forward to 90 days for any internet-exposed ones (treat them as CRITICAL per the SLA table).
- Wrap with EDR + JVM child-process alerting — Tune EDR to alarm on
java.exe/javaspawningcmd.exe,powershell,bash,sh,whoami,nslookup, or writing executable/JSP content into WebLogic tmp dirs. Highest-fidelity tripwire for live exploitation.
- Network IDS signatures alone — many WebLogic chains travel over TLS-wrapped T3s/HTTPS and evade plaintext sigs.
- Disabling specific URLs that match known PoCs — every Oracle CPU adds a new endpoint or bypass; you are playing whack-a-mole against an EOL product.
- Relying on
serialFilterdeserialization blocklists on older 10.3.x — feature was added later; many EOL releases lack it entirely. - WAF default rulesets — generic OWASP CRS misses most WebLogic-specific deserialization payloads. You need WebLogic-tuned virtual patches.
Crowdsourced verification payload.
Run on the target Windows host (or adapt for Linux by reading the same files via bash). Invoke as: .\Check-WeblogicEOL.ps1 -DomainHome 'C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain'. Requires read access to the WebLogic install directory — typically run as a local administrator or the WebLogic service account.
#requires -Version 5
<#
.SYNOPSIS
Detects Oracle WebLogic versions that are out of vendor support.
.PARAMETER DomainHome
Path to a WebLogic domain. If omitted, attempts auto-discovery under C:\Oracle.
.OUTPUTS
VULNERABLE | PATCHED | UNKNOWN
#>
param(
[string]$DomainHome = ''
)
$ErrorActionPreference = 'Stop'
# Released-and-supported family floor as of 2026-06-25.
# Anything < 14.1.2.0 is either EOL or rapidly approaching it.
$supportedFloor = [Version]'14.1.2.0'
function Get-WeblogicVersion {
param([string]$home)
$candidates = @(
Join-Path $home 'registry.xml',
(Join-Path $home '..\..\..\..\inventory\registry.xml'),
(Join-Path $home '..\..\..\..\OPatch\config\inventory.xml')
)
foreach ($f in $candidates) {
if (Test-Path $f) {
$txt = Get-Content -Raw $f
if ($txt -match 'WebLogic Server.*?(\d+\.\d+\.\d+(?:\.\d+)?)') {
return $Matches[1]
}
}
}
# Fallback: run weblogic.version via java
$wljar = Get-ChildItem -Path 'C:\Oracle' -Recurse -Filter 'weblogic.jar' -ErrorAction SilentlyContinue | Select-Object -First 1
if ($wljar) {
try {
$out = & java -cp $wljar.FullName weblogic.version 2>&1
if ($out -match 'WebLogic Server\s+(\d+\.\d+\.\d+(?:\.\d+)?)') { return $Matches[1] }
} catch {}
}
return $null
}
if (-not $DomainHome) {
$found = Get-ChildItem 'C:\Oracle' -Recurse -Directory -Filter 'domains' -ErrorAction SilentlyContinue | Select-Object -First 1
if ($found) { $DomainHome = (Get-ChildItem $found.FullName -Directory | Select-Object -First 1).FullName }
}
if (-not $DomainHome -or -not (Test-Path $DomainHome)) {
Write-Output 'UNKNOWN: no WebLogic domain located'
exit 2
}
$ver = Get-WeblogicVersion -home $DomainHome
if (-not $ver) {
Write-Output 'UNKNOWN: could not determine WebLogic version'
exit 2
}
try { $v = [Version]$ver } catch { Write-Output "UNKNOWN: unparseable version $ver"; exit 2 }
if ($v -lt $supportedFloor) {
Write-Output "VULNERABLE: WebLogic $ver is past Oracle support (floor $supportedFloor)"
exit 1
} else {
Write-Output "PATCHED: WebLogic $ver is in supported family"
exit 0
}
If you remember one thing.
ConnectionFilterImpl, block console paths at the load balancer, tune EDR for JVM child-process spawns; 180-day remediation SLA to migrate to 14.1.2 or decommission); isolated lab/dev instances (document and schedule for backlog hygiene). Migration is the only true fix — start the platform-modernization project this quarter, because every Oracle CPU adds another unpatchable RCE to your asset.Sources
- Tenable Plugin 109345
- Oracle Lifetime Support Policy — Fusion Middleware
- Oracle Critical Patch Updates
- CISA KEV Catalog (search 'WebLogic')
- CVE-2020-14882 — WebLogic console RCE
- CVE-2023-21839 — WebLogic T3/IIOP JNDI
- WebLogic ConnectionFilterImpl hardening guide
- Unit42 / Kinsing WebLogic exploitation reporting
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.