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
/console, /em, /wls-wsat/, /_async/, /clusterjsp/ paths at the proxy/WAF.weblogic.security.net.ConnectionFilterImpl to 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.weblogic.oif.serialFilter) if your version supports it.java.exe/java spawning cmd.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.
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. |
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
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.
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
}