In the last 72 hours, the National Vulnerability Database published 64 CRITICAL-severity CVEs affecting Oracle products, all carrying a network attack vector and CVSS scores reaching the maximum of 10.0. The list is anchored by CVE-2026-101809 and includes 63 additional identifiers — among them CVE-2026-87337, CVE-2026-91216 through CVE-2026-91665, and the CVE-2026-101420 through CVE-2026-101809 range.
This is not a routine patch cycle. In my 15 years of running IR engagements, the pattern that keeps me up at night is exactly this one: remotely exploitable, no-authentication-required vulnerabilities in infrastructure that sits at the heart of the enterprise — databases holding crown-jewel data, middleware brokers connecting every business application, and application servers exposed to partners and the internet. Oracle estates are precisely that. When 64 critical network-vector CVEs land simultaneously, every unpatched listener, every exposed WebLogic console, and every forgotten Fusion Middleware instance becomes an entry point.
If you run Oracle Database, WebLogic Server, Oracle Fusion Middleware, E-Business Suite, or any Oracle product stack, treat this as a patch-now event. This post walks through what's at risk, how attackers will approach these flaws, and — most importantly — exactly how to detect exploitation attempts and remediate.
Technical Analysis
Scope of the Disclosure
The NVD feed shows 64 CVEs published in a three-day window, all scored CRITICAL (CVSS 9.0–10.0) with a network (N) attack vector. Based on the clustering of identifiers and Oracle's quarterly Critical Patch Update (CPU) cadence, this aligns with Oracle's mass CPU disclosure model, where hundreds of patches ship together and the criticals are the ones that matter first.
Key identifiers from the disclosure include:
- CVE-2026-101809 — CVSS up to 10.0, network-exploitable
- CVE-2026-87337, CVE-2026-91216, CVE-2026-91221, CVE-2026-91231, CVE-2026-91299
- CVE-2026-101446, CVE-2026-101501, CVE-2026-101503, CVE-2026-101528, CVE-2026-101529
- CVE-2026-91214 through CVE-2026-91354 (a dense cluster of 20+ IDs)
- CVE-2026-91637 through CVE-2026-91665
- CVE-2026-60432, CVE-2026-83396, CVE-2026-83397, CVE-2026-83399, CVE-2026-87251
- CVE-2026-101420 through CVE-2026-101809 (the high-ID range)
What "Network-Exploitable, CVSS 10.0" Actually Means for Your Estate
A CVSS 10.0 with vector AV:N/AC:L/PR:N/UI:N translates to a very specific operational reality:
- No credentials required. The attacker doesn't need a stolen password, a phished session, or an insider. They need a routable path to the service.
- No user interaction. Nobody has to click anything. The flaw fires on receipt of a crafted request.
- Full impact. Confidentiality, integrity, and availability impacts are all HIGH — meaning remote code execution or full data compromise, not an information leak.
For Oracle environments, the classic exposed attack surface breaks down as:
| Component | Default Port(s) | Typical Exposure |
|---|---|---|
| Oracle TNS Listener | 1521/TCP | Internal; frequently flat-network accessible |
| WebLogic Server (HTTP/HTTPS, T3/IIOP) | 7001, 7002, 8001 | Often internet-facing or DMZ-adjacent |
| Oracle HTTP Server / Fusion Middleware | 443, 4443, 7777–7780 | DMZ |
| Oracle Enterprise Manager | 7803, 1159 | Internal management |
| E-Business Suite / PeopleSoft front ends | 8000–8999 range | Partner/user-facing |
The T3/IIOP protocols on WebLogic (7001) deserve special mention. Historically, WebLogic's highest-severity RCEs have lived in the T3 deserialization path, and post-exploitation behavior is highly consistent: the WebLogic JVM (java.exe / the managed server process) spawns a shell, downloads a second stage, and establishes persistence. That behavioral signature is durable regardless of which specific CVE is abused — which is exactly what we build detection around below.
Similarly, exploitation against Oracle Database via the TNS listener or a database-adjacent web component typically produces anomalous child processes under oracle.exe (Windows) or the oracle user (Linux) — something that should never happen in normal operations.
Exploitation Status
As of publication, these CVEs are newly disclosed through NVD with vendor patches available through Oracle's CPU. No entries have been confirmed on the CISA Known Exploited Vulnerabilities (KEV) catalog at the time of writing, and no public proof-of-concept code has been verified for CVE-2026-101809 specifically. Do not let that lull you. Historically, critical Oracle/WebLogic CVEs see working exploit code within days to weeks of a CPU drop, and patch-diffing accelerates that timeline dramatically. Attackers reverse-engineer the patch; defenders get the same head start only if they deploy it.
Treat the exploitation status as imminent, not theoretical, and sequence your response accordingly.
Detection & Response
The detections below are built on post-exploitation behavior, not脆弱 network signatures. That is deliberate. A CVSS 10.0 network flaw against Java middleware or a database process produces extremely high-fidelity behavioral artifacts: server processes spawning shells, outbound connections from database hosts, and listener/WebLogic service anomalies. These survive patching delays, zero-day variants, and shifting PoC code.
Sigma Rules
---
title: Oracle or WebLogic Server Process Spawning Shell or Script Interpreter
id: 6f3a1b92-4c7d-4e58-9a21-8b5c2d7e0f41
status: experimental
description: Detects Oracle Database (oracle.exe), TNS Listener (tnslsnr), or WebLogic Java processes spawning command shells or script interpreters — a hallmark of post-exploitation following RCE against Oracle services such as CVE-2026-101809.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-101809
- https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/04/17
tags:
- attack.initial_access
- attack.t1190
- attack.execution
- attack.t1059
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\oracle.exe'
- '\tnslsnr.exe'
- '\java.exe'
- '\javaw.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
- '\curl.exe'
filter_weblogic_path:
ParentCommandLine|contains:
- 'weblogic.Server'
- 'startWebLogic'
condition: selection_parent and selection_child and not filter_weblogic_path
falsepositives:
- Oracle Enterprise Manager jobs invoking host commands (rare; baseline and whitelist by command line)
- Legitimate WebLogic admin scripts (typically launch via startWebLogic.cmd, filtered above)
level: critical
---
title: Linux Oracle User Spawning Interactive Shell or Download Utility
id: 9d2e7c44-1a8b-4f63-b5d0-3c9e6a1f78b2
status: experimental
description: Detects the oracle service account or tnslsnr spawning shells, downloaders, or network utilities on Linux — consistent with exploitation of network-facing Oracle vulnerabilities such as the April 2026 critical CPU batch.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-101809
- https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/04/17
tags:
- attack.initial_access
- attack.t1190
- attack.execution
- attack.t1059.004
logsource:
category: process_creation
product: linux
detection:
selection_parent:
ParentImage|endswith:
- '/tnslsnr'
- '/oracle'
- '/java'
selection_child:
Image|endswith:
- '/bash'
- '/sh'
- '/dash'
- '/zsh'
- '/curl'
- '/wget'
- '/nc'
- '/ncat'
- '/python'
- '/python3'
- '/perl'
- '/base64'
condition: selection_parent and selection_child
falsepositives:
- Oracle installer/patching workflows (runInstaller, opatch) — correlate with maintenance windows
- Health-check scripts running under oracle user (baseline known scripts by command line)
level: critical
---
title: Outbound Network Connection from Oracle Database or Listener Process
id: 4b8f6e10-2d5a-4c91-87e3-f1a0c6d4b9e7
status: experimental
description: Detects Oracle Database or TNS Listener processes initiating outbound connections to non-database ports — indicative of reverse shell or C2 activity following exploitation of network-vector Oracle CVEs.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-101809
- https://attack.mitre.org/techniques/T1071/
author: Security Arsenal
date: 2026/04/17
tags:
- attack.command_and_control
- attack.t1071
logsource:
category: network_connection
product: windows
detection:
selection:
Image|endswith:
- '\oracle.exe'
- '\tnslsnr.exe'
filter_known:
DestinationPort:
- 1521
- 1522
- 2483
- 2484
- 443
condition: selection and not filter_known
falsepositives:
- Oracle Enterprise Manager agent communication (restrict to OEM hosts if needed)
- Database links to external hosts (baseline by destination)
level: high
KQL — Microsoft Sentinel / Defender Hunting
The following hunts assume Sysmon/Defender process telemetry on Oracle hosts, plus Syslog/CEF ingestion for Linux database servers. Run them across your entire Oracle asset group, then pivot on any hits to establish parent-child lineage and network follow-on activity.
// Hunt 1: Oracle/WebLogic server processes spawning shells or LOLBins (Windows)
let OracleParents = dynamic(["oracle.exe", "tnslsnr.exe", "java.exe", "javaw.exe"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "certutil.exe", "bitsadmin.exe", "curl.exe"]);
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName in~ (OracleParents)
| where FileName in~ (SuspiciousChildren)
| where InitiatingProcessCommandLine !has "startWebLogic"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, AccountName, InitiatingProcessRemoteIP = InitiatingProcessRemoteUrl
| order by TimeGenerated desc;
// Hunt 2: Linux oracle/tnslsnr spawning shells or downloaders (Syslog/CEF ingestion)
Syslog
| where TimeGenerated > ago(7d)
| where ProcessName in~ ("tnslsnr", "oracle", "java")
or SyslogMessage has_any ("tnslsnr", "/oracle/")
| where SyslogMessage has_any ("/bin/bash", "/bin/sh", "curl ", "wget ", "nc ", "ncat", "python", "base64 -d")
| project TimeGenerated, Computer, ProcessName, SyslogMessage, SeverityLevel
| order by TimeGenerated desc;
// Hunt 3: Anomalous inbound connections to Oracle TNS/WebLogic ports from external or unusual internal sources
CommonSecurityLog
| where TimeGenerated > ago(3d)
| where DestinationPort in (1521, 1522, 7001, 7002, 8001)
| where SourceIP !startswith "10." and SourceIP !startswith "192.168." and SourceIP !startswith "172.16."
| summarize ConnectionCount = count(), DistinctSources = dcount(SourceIP) by DestinationIP, DestinationPort, DeviceAction
| order by ConnectionCount desc;
Velociraptor VQL — Endpoint Forensic Hunt
Deploy this artifact across Oracle database and middleware hosts to identify live post-exploitation artifacts: shells under Oracle processes, dropped executables in temp/Oracle-writable paths, and anomalous listener connections.
-- Hunt: Oracle/WebLogic post-exploitation artifacts
-- Identifies shells spawned by Oracle processes, suspicious files in writable paths,
-- and unusual network connections from Oracle service processes.
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE (
(Exe =~ '(?i)(oracle|tnslsnr|java|javaw)' AND Ppid != 0)
)
AND (
CommandLine =~ '(?i)(cmd\.exe|powershell|pwsh|/bin/sh|/bin/bash|curl|wget|ncat|netcat|base64)'
OR Name =~ '(?i)^(cmd|powershell|pwsh|sh|bash)$'
)
-- Secondary: enumerate current connections from Oracle processes
SELECT Pid, Name, Family, Type, LocalAddr, LocalPort, RemoteAddr, RemotePort, Status
FROM netstat()
WHERE Name =~ '(?i)(oracle|tnslsnr|java)'
AND RemotePort NOT IN (1521, 1522, 7001, 7002)
AND RemoteAddr != ''
AND RemoteAddr != '127.0.0.1'
AND RemoteAddr != '::1'
-- Tertiary: recent executable drops in temp and Oracle-writable directories
SELECT FullPath, Size, Mtime, Ctime
FROM glob(globs=[
'C:\\Windows\\Temp\\*.exe',
'C:\\Windows\\Temp\\*.dll',
'C:\\Users\\*\\AppData\\Local\\Temp\\*.exe',
'/tmp/*.elf',
'/tmp/*.sh',
'/var/tmp/*',
'/dev/shm/*'
])
WHERE Mtime > now() - 604800
ORDER BY Mtime DESC
Remediation & Verification Script
Use this Bash script on Linux Oracle hosts to enumerate exposed Oracle services, verify listener security posture, and snapshot the environment before patching so you can diff afterward. The accompanying PowerShell performs the equivalent checks on Windows-based Oracle/WebLogic hosts.
#!/bin/bash
# Oracle April 2026 Critical CPU — Pre/Post Patch Verification (Linux)
# Run as root or sudo. Output written to /var/log/oracle_cpu_audit_<date>.log
LOG="/var/log/oracle_cpu_audit_$(date +%Y%m%d).log"
exec > >(tee -a "$LOG") 2>&1
echo "=== [1] Listening Oracle-related services ==="
ss -tlnp | grep -E ':(1521|1522|2483|2484|7001|7002|8001|1159|7803|4443)\b'
echo "=== [2] TNS Listener version and status ==="
for ORA_HOME in $(ps -eo args | grep -oP '/\S*(?=/bin/tnslsnr)' | sort -u); do
echo "-- Listener home: $ORA_HOME"
sudo -u oracle "$ORA_HOME/bin/lsnrctl" status 2>/dev/null | grep -E 'Version|Alias|Listener'
done
echo "=== [3] Listener hardening checks ==="
LSNR=$(find /u01 /opt -name listener.ora 2>/dev/null | head -5)
for f in $LSNR; do
echo "-- $f"
grep -iE 'ADMIN_RESTRICTIONS|VALID_NODE_CHECKING|TCPS|WALLET' "$f" || echo " WARNING: no admin restrictions / node checking found"
done
echo "=== [4] Oracle OPatch inventory (current patch level) ==="
for OH in $(ps -eo args | grep -oP '/\S*(?=/bin/(oracle|tnslsnr))' | sort -u); do
echo "-- Oracle Home: $OH"
sudo -u oracle "$OH/OPatch/opatch" lsinventory -oh "$OH" 2>/dev/null | grep -E 'Oracle Interim Patch|applied on|Unique Patch ID'
done
echo "=== [5] WebLogic patch inventory (Smart Update / BSU artifacts) ==="
find /u01 /opt -path '*oracle_common*' -name 'opatch' 2>/dev/null | head -3 | while read OP; do
MW=$(dirname "$(dirname "$OP")")
echo "-- Middleware home: $MW"
"$OP" lsinventory -oh "$MW" 2>/dev/null | grep -E 'Patch|applied on' | head -10
done
echo "=== [6] Suspicious child processes of oracle/java (last snapshot) ==="
ps -eo pid,ppid,user,comm,args | awk 'NR==1 || ($4 ~ /oracle|tnslsnr|java/ && $5 ~ /sh|bash|curl|wget|nc|python/)'
echo "=== [7] Files modified in last 72h in temp/shared-memory dirs ==="
find /tmp /var/tmp /dev/shm -type f -mtime -3 -ls 2>/dev/null
echo "=== Audit complete. Re-run after CPU application and diff outputs. ==="
# Oracle April 2026 Critical CPU — Pre/Post Patch Verification (Windows)
# Run elevated on Oracle DB / WebLogic Windows hosts.
$Log = "C:\Windows\Temp\oracle_cpu_audit_$(Get-Date -Format yyyyMMdd).log"
Start-Transcript -Path $Log -Append
Write-Host "=== [1] Listening Oracle-related services ==="
Get-NetTCPConnection -State Listen | Where-Object {
$_.LocalPort -in 1521,1522,2483,2484,7001,7002,8001,1159,7803,4443
} | Select-Object LocalAddress, LocalPort, OwningProcess,
@{N='Process';E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}} |
Format-Table -AutoSize
Write-Host "=== [2] Oracle services and versions ==="
Get-CimInstance Win32_Service | Where-Object {
$_.Name -match 'Oracle|TNS|WebLogic|NodeManager'
} | Select-Object Name, State, StartMode, PathName | Format-List
Write-Host "=== [3] Suspicious child processes under Oracle/WebLogic ==="
$OracleProcs = Get-CimInstance Win32_Process | Where-Object {
$_.Name -match '^(oracle|tnslsnr|java|javaw)\.exe$'
}
foreach ($p in $OracleProcs) {
Get-CimInstance Win32_Process | Where-Object {
$_.ParentProcessId -eq $p.ProcessId -and
$_.Name -match '^(cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|certutil)\.exe$'
} | Select-Object @{N='Parent';E={$p.Name}}, Name, ProcessId, CommandLine
}
Write-Host "=== [4] Recent executable drops in temp paths (last 72h) ==="
$cutoff = (Get-Date).AddHours(-72)
Get-ChildItem 'C:\Windows\Temp','C:\Users\*\AppData\Local\Temp' -Include *.exe,*.dll,*.ps1,*.bat -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt $cutoff } |
Select-Object FullName, LastWriteTime, Length
Write-Host "=== [5] Outbound connections from Oracle processes (non-standard ports) ==="
foreach ($p in $OracleProcs) {
Get-NetTCPConnection -OwningProcess $p.ProcessId -State Established -ErrorAction SilentlyContinue |
Where-Object { $_.RemotePort -notin 1521,1522,443,7001,7002 } |
Select-Object @{N='Process';E={$p.Name}}, RemoteAddress, RemotePort
}
Stop-Transcript
Write-Host "Audit written to $Log — re-run after patching and compare."
Remediation
1. Patch immediately — this is the only complete fix. Oracle does not release out-of-band patches for CPU vulnerabilities lightly; with 64 critical network-vector CVEs, the April 2026 Critical Patch Update is the definitive remediation path. Apply the CPU to every Oracle product in scope, including Database, WebLogic Server, Fusion Middleware, E-Business Suite, PeopleSoft, and GoldenGate.
- Official advisory: https://www.oracle.com/security-alerts/ — locate the current Critical Patch Update, Security Alerts, and Third Party Bulletin entry and cross-reference each CVE from your inventory against the affected-products matrix.
- NVD reference for the anchor CVE: https://nvd.nist.gov/vuln/detail/CVE-2026-101809
- Use OPatch (
opatch lsinventory,opatch apply,opatch rollbackfor failed applications) for Database homes and Smart Update/BSU or OPatch for WebLogic (oracle_commonhome). Validate patch application withopatch lsinventorypost-patch and diff against your pre-patch output from the scripts above.
2. Sequencing — patch exposure-first:
- Internet/DMZ-facing: WebLogic front ends, Oracle HTTP Server, E-Business Suite/PeopleSoft portals.
- Partner/VPN-accessible middleware and integration tiers.
- Internal flat-network TNS listeners and databases — critical because internal phishing-to-database pivots are standard ransomware tradecraft.
- Management planes (Enterprise Manager) and DR/standby systems.
3. Compensating controls where patching requires a change window:
- Disable T3/IIOP on WebLogic if not required, or restrict it via connection filters (
weblogic.security.net.ConnectionFilterImpl) to known admin subnets. - TNS Listener hardening: set
ADMIN_RESTRICTIONS_<listener>=ONandVALID_NODE_CHECKING_REGISTRATION_<listener>=ONinlistener.ora; migrate to TCPS where feasible. - Network segmentation: ACLs/security groups permitting 1521 and 7001 only from documented application-tier hosts. If you can't enumerate the allowed sources, that's a finding in itself.
- Egress filtering: database and middleware servers should have no direct internet egress. Block it at the firewall and alert on violations — this also neuters reverse-shell callbacks.
4. Assume breach posture for unpatched exposure. If any of these services were internet-reachable during the disclosure window, do not patch and move on. Run the Velociraptor hunt, review 30 days of connection logs to ports 1521/7001, check for new OS and database accounts, and inspect WebLogic deployed applications for unauthorized WAR/EAR artifacts (a classic WebLogic persistence mechanism).
5. Update your vulnerability management SLA. CVSS 10.0 network-exploitable, authentication-free CVEs in internet-adjacent infrastructure belong in your 72-hour emergency patch class, not your quarterly cycle. If your change management process can't absorb an emergency Oracle CPU, the process is the vulnerability.
The Bottom Line
Sixty-four critical, network-exploitable Oracle CVEs in three days is the kind of disclosure that separates mature vulnerability programs from checkbox compliance. The defenders who come out ahead are the ones who (1) know exactly where every Oracle listener and WebLogic instance lives, (2) can deploy the CPU within days, and (3) have behavioral detection — like the Sigma, KQL, and VQL above — already staged so they're watching for exploitation while they patch, not after.
Patch now. Hunt while you patch. And if you need a second set of eyes on your Oracle estate before someone less friendly finds it first, that's what we're here for.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.