← Back to Feed CACHED · 2026-07-24 13:32:45 · CACHE_KEY CVE-2026-60315
CVE-2026-60315 · CWE-400 · Disclosed 2026-07-15

Vulnerability in the MySQL Server

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A stranger on the network can walk up to port 33060 and pull the power cord on your database

CVE-2026-60315 is a flaw in MySQL Server's X Plugin — the component that speaks the X Protocol on TCP 33060 for the document-store / MySQL Shell interface. The CVSS vector (AV:N/AC:L/PR:N/UI:N/C:L/I:N/A:H) tells the whole story: an unauthenticated attacker with network reach to 33060 sends a crafted message and crashes the server, with a minor confidentiality side-effect. Affected trains: MySQL Server 8.4.0–8.4.10 and 9.7.0–9.7.1; MySQL Cluster consuming the same server binaries inherits the flaw. Fixes ship in the Oracle CPU July 2026 as 8.4.11 and 9.7.2.

Oracle's HIGH (8.2) rating is defensible but slightly inflated for the median enterprise. There is no RCE, no auth bypass, no data exfil path — just a repeatable service kill. On an internet-exposed database (rare but real) it is legitimately HIGH; on a properly segmented data tier it is closer to a MEDIUM operational-risk bug. We keep the verdict at HIGH because MySQL sits in the high-value 'production data tier' role bucket and a reliable unauthenticated outage against that role is a real fleet-scale event.

"Unauthenticated remote DoS against MySQL 8.4/9.7 via X Plugin — a production database crash bug, not a data-theft bug."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Locate an X Protocol listener

Attacker scans for TCP/33060 responses. X Plugin is enabled by default in modern MySQL 8.x/9.x, but only reachable if the mysqlx_bind_address permits it and no firewall/security group blocks the port. Tooling: nmap -p 33060 --script mysqlx-info or a Shodan port:33060 search.
Conditions required:
  • Network path to port 33060 (or the operator-defined mysqlx_port)
  • X Plugin enabled (default in 8.4 / 9.7)
Where this breaks in practice:
  • Most production DBs are not internet-facing; port 33060 is even less commonly exposed than 3306
  • Cloud RDS/Aurora and managed MySQL variants may not run the X Plugin or restrict it
Detection/coverage: Shodan and Censys both fingerprint X Protocol banners; internal scanners (Nessus, Qualys, Rapid7) enumerate 33060 as mysqlx
STEP 02

Send the crafted X Protocol frame

Attacker uses a modified MySQL X client (mysqlsh, libmysqlxclient, or a fuzzer harness) to deliver the malformed message that triggers the parser/handler defect. No credentials required — the bug fires before authentication completes, consistent with PR:N.
Conditions required:
  • Ability to complete TCP handshake to 33060
  • Working X Protocol client or raw socket PoC
Where this breaks in practice:
  • No public PoC at time of writing (Oracle CPU disclosures are typically silent on details for 30–90 days)
  • TLS-only mysqlx configurations force ClientHello first, but do not block the auth-adjacent parser
Detection/coverage: IDS signatures for X Protocol are sparse; NDR products that decode mysqlx are the exception, not the rule
STEP 03

Crash the mysqld process

The malformed frame drives mysqld to abort or hang the X Plugin thread pool. A:H implies the server (or at least the X Plugin subsystem) becomes unavailable, taking every application depending on that instance offline until systemd/mysqld_safe restarts it — and the attacker can trivially loop the payload to prevent recovery.
Conditions required:
  • Vulnerable server still processing the malformed message
Where this breaks in practice:
  • mysqld_safe / systemd auto-restart limits duration of any single crash
  • Rate-limiting or fail2ban on 33060 can blunt the loop
Detection/coverage: MySQL error log will show [ERROR] [MY-...] Plugin mysqlx ... and a stack; SRE alerting on mysqld restart storms catches it fast
STEP 04

Sustain the outage

Attacker scripts the payload in a loop, denying service to every dependent application. For clustered deployments (Group Replication, InnoDB Cluster, NDB Cluster) targeting each node in turn removes quorum and forces a full cluster stall.
Conditions required:
  • Continued reachability to at least one node's 33060
  • No upstream rate limiter dropping the source
Where this breaks in practice:
  • Well-run Ops shops will block source IP within minutes once alerts fire
  • Cluster designs that isolate X Plugin from cluster interconnect survive better
Detection/coverage: APM/SLO alerts on database availability; NDR flow anomalies on 33060 traffic bursts
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo known exploitation as of 2026-07-24; not on CISA KEV
Public PoCNone public. Oracle CPU advisories historically withhold technical detail; expect fuzzer-driven PoCs within 30–60 days once diff analysis of 8.4.11 vs 8.4.10 lands
EPSSFresh CVE — EPSS likely <1% until PoC surfaces
KEVNot listed
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H — unauthenticated network DoS with a minor info-leak component
Affected versionsMySQL Server 8.4.0–8.4.10, 9.7.0–9.7.1; MySQL Cluster on those server versions
Fixed versionsMySQL 8.4.11 and 9.7.2 via Oracle CPU July 2026; distro backports (Percona, MariaDB downstream not affected as X Plugin is Oracle-only)
Exposure dataShodan shows a persistent long tail of ~40–70k hosts advertising port 33060 globally; only a fraction are the affected 8.4/9.7 trains
Disclosure date2026-07-15 (Oracle Critical Patch Update, July 2026)
ReporterCredited via Oracle CPU acknowledgements page (unspecified external researcher)
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.0/10)

The single decisive factor is role multiplier: the affected component is a production database engine, and an unauthenticated remote crash against the data tier is a fleet-scale availability event even without RCE. Friction (X Plugin often not exposed to the internet, no public PoC yet) trims the score below Oracle's 8.2 but cannot break the HIGH floor set by the data-tier blast radius.

HIGH affected version range and vector interpretation
MEDIUM exploitability — Oracle discloses minimal technical detail
LOW in-the-wild timing — depends on when a PoC lands

Why this verdict

  • Role multiplier: MySQL is canonical data-tier infrastructure; chain outcome on a prod OLTP node = application-wide outage, on an InnoDB/NDB cluster = quorum loss. Floor is HIGH.
  • Unauthenticated pre-auth vector: PR:N means anyone with a TCP path wins — no credential stuffing, no phishing pretext, no lateral movement burn.
  • But: availability-only impact. C:L / I:N / A:H is a crash bug, not RCE. Attacker gets an outage, not your data. That's why the score sits below the 8.2 Oracle assigned rather than being pushed to CRITICAL.
  • Exposure narrowing: Port 33060 is rarely internet-exposed; the bug is far more relevant to internal-attacker / post-initial-access scenarios than to opportunistic mass exploitation.
  • No PoC yet, no KEV — pressure is medium-term, not hair-on-fire.

Why not higher?

Not CRITICAL because there is no code execution, no data disclosure at scale, and no privilege escalation. The worst outcome is a service outage that mysqld_safe / orchestration will attempt to recover from within minutes. CRITICAL is reserved for chains ending in RCE, DA, or mass data egress.

Why not lower?

Not MEDIUM because the affected role is a production database and the vector is unauthenticated network. A repeatable pre-auth DoS against your OLTP engine is not a MEDIUM problem regardless of how narrow the exposed population is — one exposed node is enough to earn a Sev-1 page.

05 · Compensating Control

What to do — in priority order.

  1. Block or firewall TCP/33060 at the host and network edge — Restrict mysqlx_bind_address to 127.0.0.1 (or a dedicated management VLAN) and drop 33060 at security groups / NGFW. Deploy within 30 days per noisgate HIGH mitigation SLA; do it in hours if any node is internet-reachable.
  2. Disable the X Plugin where not usedSET PERSIST mysqlx = OFF; or --skip-mysqlx on startup removes the attack surface entirely. Most classic-protocol workloads (JDBC, PDO, mysql-client) do not need X Protocol. Do this alongside firewalling within the 30-day window.
  3. Rate-limit new connections to 33060 — Use iptables hashlimit, nftables, or the WAF/NGFW in front of the DB to cap connections-per-source-per-second on 33060 so a loop-crash payload gets throttled before it becomes a sustained outage.
  4. Confirm mysqld auto-restart is configured — Verify systemd Restart=on-failure and RestartSec are set; monitor for mysqld restart storms in Prometheus/CloudWatch. This won't stop the bug but it shortens each outage window while you roll the patch.
  5. Schedule the Oracle CPU July 2026 rollout — Upgrade to 8.4.11 / 9.7.2 within the noisgate 180-day HIGH remediation SLA — stage in dev, canary one replica, then rolling upgrade the cluster.
What doesn't work
  • Requiring TLS on X Protocol (require_secure_transport=ON) — the bug fires before authentication, so TLS gating auth does not stop the malformed frame from reaching the vulnerable parser (assumption pending public PoC).
  • Rotating MySQL user passwords / enforcing MFA on app users — irrelevant, the vector is unauthenticated.
  • WAF rules on port 3306 — wrong port; classic protocol is untouched by this CVE.
  • MySQL Enterprise Firewall / Audit plugin — these operate on authenticated SQL statements, not on pre-auth X Protocol frames.
06 · Verification

Crowdsourced verification payload.

Run this from a Linux host that can reach the MySQL server over the network (auditor workstation or jumpbox); no MySQL credentials required. Usage: ./check-cve-2026-60315.sh <host> [mysqlx_port] — example: ./check-cve-2026-60315.sh db01.internal 33060. It prints VULNERABLE / PATCHED / UNKNOWN and exits with a matching code.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-60315.sh — noisgate verifier for MySQL X Plugin DoS
# Exit 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
set -u
HOST="${1:-}"; PORT="${2:-33060}"
if [[ -z "$HOST" ]]; then echo "usage: $0 <host> [port]" >&2; exit 2; fi

# Prefer local check if we're ON the DB host
if command -v mysqld >/dev/null 2>&1; then
  V=$(mysqld --version 2>/dev/null | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
  echo "local mysqld version: ${V:-unknown}"
  case "$V" in
    8.4.11|8.4.1[2-9]|8.[5-9].*|9.7.2|9.7.[3-9]|9.[8-9].*|1[0-9].*) echo PATCHED; exit 0;;
    8.4.[0-9]|8.4.10|9.7.0|9.7.1) echo VULNERABLE; exit 1;;
  esac
fi

# Remote check — probe X Protocol port and try to fingerprint via mysqlsh if available
if ! (echo > "/dev/tcp/${HOST}/${PORT}") 2>/dev/null; then
  echo "port ${PORT} closed on ${HOST} — X Plugin not reachable (attack surface absent)"
  echo UNKNOWN; exit 2
fi
echo "port ${PORT} is OPEN on ${HOST}"

if command -v mysqlsh >/dev/null 2>&1; then
  BANNER=$(mysqlsh --uri "mysqlx://probe@${HOST}:${PORT}" --sql -e 'SELECT VERSION();' 2>&1 | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
  if [[ -n "$BANNER" ]]; then
    echo "remote version banner: $BANNER"
    case "$BANNER" in
      8.4.11|8.4.1[2-9]|8.[5-9].*|9.7.2|9.7.[3-9]|9.[8-9].*|1[0-9].*) echo PATCHED; exit 0;;
      8.4.[0-9]|8.4.10|9.7.0|9.7.1) echo VULNERABLE; exit 1;;
    esac
  fi
fi

echo "could not determine version remotely — treat as VULNERABLE until proven otherwise if 33060 is exposed"
echo UNKNOWN; exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: pull an inventory of every MySQL 8.4.x and 9.7.x instance, flag the ones with mysqlx=ON and any node whose port 33060 is reachable from anything outside the app tier. Per the noisgate mitigation SLA for HIGH, firewall 33060 or disable the X Plugin within 30 days (and within hours for any node touching the internet or a shared-tenant network). Per the noisgate remediation SLA for HIGH, roll Oracle CPU July 2026 (MySQL 8.4.11 / 9.7.2) across the fleet within 180 days — canary a replica, then rolling upgrade primaries. If a public PoC appears before then, collapse both timelines and treat as immediate.

Sources

  1. Oracle Critical Patch Update — July 2026
  2. Oracle CVE → Advisory mapping
  3. MySQL 8.4 Reference — X Plugin
  4. Ubuntu bug — mysqlx listening on all interfaces by default
  5. PentestPad — Port 33060 MYSQLX overview
  6. Oracle MySQL CVE index (cvedetails)
  7. CISA Known Exploited Vulnerabilities Catalog
  8. FIRST EPSS
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.