← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-50259 · CWE-121 · Disclosed 2026-06-05

A stack-based buffer overflow flaw was found in the X

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a bad lock on an interior door, not a busted front gate

CVE-2026-50259 is a stack-based buffer overflow in the XKB SetMap request path of the X.Org X server and Xwayland. In _XkbSetMapChecks(), a fixed stack buffer mapWidths[256] is indexed using client-controlled key-type data via CheckKeyTypes(), so a connected X11 client can write past the end of the stack buffer. Upstream fixed it in xorg-server 21.1.23 and xwayland 24.1.12; Debian tracks older packaged branches as vulnerable until backported fixes land, and Ubuntu had the issue under evaluation when reviewed.

The vendor's 7.8/HIGH score is technically defensible in a lab because memory corruption plus potential privilege escalation is real. In enterprise reality, it overstates urgency: the attacker must already have local foothold or X11 client access to the victim display/session, and the best-case impact often collapses further on modern rootless Xwayland and rootless Xorg deployments where the easy 'become root via X server' path is gone.

"Serious memory corruption, but it lives behind an already-compromised or already-authorized X11 trust boundary."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get onto the host or into the user's X trust boundary

The attacker first needs code execution on the workstation, shell access through another compromise, or an allowed path to the victim's X server via local socket, forwarded X11 session, or permissive remote X access. In practice this is usually a post-initial-access condition, not an internet entry point. A simple libxcb or python-xlib client is enough to speak the required protocol.
Conditions required:
  • Attacker already has local code execution, user shell access, or permitted X11 client connectivity
  • Target is running vulnerable Xorg or Xwayland
Where this breaks in practice:
  • Most enterprises do not expose X11 directly to the internet
  • Wayland-first desktops shrink the reachable population for classic Xorg attack paths
  • Xauthority, local sockets, container isolation, and SSH forwarding rules often limit who can connect
Detection/coverage: Traditional network scanners are poor here; EDR process telemetry and Linux audit data are more useful than perimeter scanners.
STEP 02

Send a malicious XKB SetMap request

Using a custom X11 client built on libxcb/libX11, the attacker sends a crafted XKB SetMap request that causes CheckKeyTypes() to index mapWidths[256] out of bounds. This is low-complexity once the attacker can talk to the server because the advisory points directly at the vulnerable code path and the fixing commit narrows the bug shape.
Conditions required:
  • XKB extension reachable in the target server
  • Attacker can submit arbitrary X11 protocol messages
Where this breaks in practice:
  • No widely circulated public weaponized PoC was found during review
  • Reliability may vary across builds, mitigations, and server modes
Detection/coverage: Version-based local checks can flag vulnerable packages; exploit-behavior signatures are uncommon.
STEP 03

Corrupt stack memory in the X server process

The malformed request overflows a stack buffer inside the X server or Xwayland process. At minimum that can crash the graphical session; with careful control and favorable build/runtime conditions it may be steered into code execution inside the X server context.
Conditions required:
  • Target binary lacks effective hardening against turning the overflow into code execution
  • The crafted request lands on the vulnerable path consistently
Where this breaks in practice:
  • Stack canaries, ASLR, PIE, and distro hardening reduce exploit reliability
  • A crash is easier than a stable privilege-escalation chain
Detection/coverage: Crash dumps, coredumps, journalctl, ABRT/apport, and EDR memory-corruption telemetry can catch failed attempts.
STEP 04

Try to turn process compromise into privilege gain

If the attacker gains execution in the X server process, the final impact depends on how that server is running. On legacy or special-case rootful Xorg deployments, compromise can become local privilege escalation; on rootless Xwayland or rootless Xorg, the attacker may only gain same-user process control or session disruption.
Conditions required:
  • X server runs with privileges worth stealing, or the session context is itself high value
  • Exploit succeeds beyond mere denial of service
Where this breaks in practice:
  • Modern Xwayland is typically not running as root
  • Even successful code execution may stay trapped in the current user/session context
Detection/coverage: Privilege transition events, anomalous child processes from Xorg/Xwayland, and EDR lineage alerts are the best signals.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo evidence of active exploitation found in public sources reviewed; Red Hat/CISA ADP marks SSVC Exploitation: none.
PoC availabilityNo public weaponized GitHub PoC was located during review. What *is* public is the advisory, the vulnerable function, and the fix commit, which lowers reverse-engineering effort.
EPSS0.00012 from the supplied intel. That is effectively background-noise probability, but I did not independently verify the exact percentile from a FIRST snapshot.
KEV statusNot listed in the CISA KEV catalog at time of review.
CVSS vector reality checkCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H accurately says *local, low-priv, no user interaction*; that also means this is post-entry, not a front-door exploit.
Affected versionsUpstream advisory says X.Org X server prior to 21.1.23 and Xwayland prior to 24.1.12.
Fixed versionsUpstream fixed in xorg-server 21.1.23 and xwayland 24.1.12. Debian shows fixes in unstable as xorg-server 2:21.1.23-1 and xwayland 2:24.1.12-1; bookworm/trixie entries were still marked vulnerable when reviewed. Ubuntu listed xorg-server/xwayland as *Needs evaluation* on June 6, 2026.
Exposure / scanning dataNo CVE-specific GreyNoise/Censys/Shodan telemetry was found. That's expected: this bug is generally not internet-scannable in the usual sense because the attacker needs X11 client reachability into a live desktop/session trust boundary.
Disclosure timelinePublic advisory landed 2026-06-02; the CVE record was published 2026-06-05. If your internal feeds key off CVE publish date only, you were already three days late to the party.
ReporterReported by Anonymous working with Trend Micro Zero Day Initiative, tracked as ZDI-CAN-30161.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.6/10)

The decisive downward pressure is attacker position: exploitation requires the attacker to already have local code execution or trusted X11 client access into the victim session. That makes this a post-initial-access privilege-escalation opportunity, not an enterprise-wide remote takeover event.

HIGH Attack-position downgrade from vendor HIGH to operational MEDIUM
MEDIUM Impact variance between rootful Xorg and rootless Xwayland/Xorg deployments
MEDIUM Distro patch-status mapping outside upstream versions

Why this verdict

  • Requires X11 client reachability: AV:L/PR:L here really means the attacker is already on the box, in the session, or otherwise allowed to talk to the X server. That's compounding downward pressure because it assumes a prior compromise stage or a trusted local-user position.
  • Modern deployments blunt the blast radius: on rootless Xwayland and many rootless Xorg setups, a successful exploit does not automatically become root. Same-user compromise or session DoS is still bad, but it's not the same as host-level takeover.
  • No heat around exploitation: no KEV listing, no public exploitation evidence found, no public weaponized PoC found, and a tiny supplied EPSS all argue against treating this like an urgent broad spray-and-pray threat.

Why not higher?

Because this is not an unauthenticated remote bug and not meaningfully internet-reachable in normal enterprise layouts. You have to already be inside the machine or inside the user's X trust boundary, which means the vulnerability rides *after* initial access rather than creating it.

Why not lower?

Because it is still real memory corruption in a ubiquitous desktop component, and exploitation can plausibly yield more than a crash on the wrong build or legacy rootful Xorg deployment. If you run Linux VDI, engineering workstations, kiosks, or long-lived X11-forwarding environments, the affected population is non-trivial enough that this should not be shrugged off as hygiene-only.

05 · Compensating Control

What to do — in priority order.

  1. Disable or restrict remote X11 access — Turn off TCP X11 listeners, review X11Forwarding exposure, and remove permissive xhost usage where it still exists. This cuts the reachable population immediately; for a MEDIUM verdict there is no mitigation SLA, so use this as risk reduction while you work inside the remediation window.
  2. Prefer rootless display stacks — Where operationally possible, keep Xwayland/Xorg rootless and retire legacy rootful Xorg configurations on kiosks, GPU workstations, and niche desktop builds. This does not remove the bug, but it meaningfully lowers the privilege-escalation payoff; for MEDIUM, there is no mitigation SLA — go straight to the 365-day remediation window if you cannot justify immediate configuration churn.
  3. Watch the X server process — Add detections for Xorg or Xwayland crashes, unexpected child processes, and unusual command execution spawned from those parents. This is especially useful on shared Linux desktops and VDI where a post-entry local exploit is more realistic than on locked-down servers.
What doesn't work
  • Perimeter WAFs or internet IDS signatures: they do nothing for a local/X11-session attack path.
  • MFA: useful for initial access, irrelevant once a process can already talk to the local X server.
  • Relying on 'Wayland is enabled' alone: many apps still traverse Xwayland, so the vulnerable code may still be present and reachable.
06 · Verification

Crowdsourced verification payload.

Run this on the target Linux host as the logged-in user or with sudo; root is not strictly required, but package-manager queries are more reliable with normal local access. Save as check-cve-2026-50259.sh and run bash check-cve-2026-50259.sh or bash check-cve-2026-50259.sh /usr/bin/Xorg /usr/bin/Xwayland; it checks installed binaries and package metadata, then prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-50259.sh
# Detect likely exposure to CVE-2026-50259 on Linux hosts.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

FIXED_XORG_UPSTREAM="21.1.23"
FIXED_XWAYLAND_UPSTREAM="24.1.12"
STATUS="PATCHED"
DETAILS=()

ver_ge() {
  # returns 0 if $1 >= $2
  [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | tail -n1)" = "$1" ]
}

extract_ver() {
  # pull first dotted version from input
  echo "$1" | grep -Eo '[0-9]+(\.[0-9]+){1,3}' | head -n1
}

check_bin() {
  local name="$1"
  local path="$2"
  local fixed="$3"
  local v out

  if [ ! -x "$path" ]; then
    DETAILS+=("$name: not present")
    return 0
  fi

  out="$($path -version 2>/dev/null || $path --version 2>/dev/null || true)"
  v="$(extract_ver "$out")"

  if [ -z "$v" ]; then
    DETAILS+=("$name: version unknown from binary output")
    STATUS="UNKNOWN"
    return 0
  fi

  if ver_ge "$v" "$fixed"; then
    DETAILS+=("$name: binary version $v >= fixed upstream $fixed")
  else
    DETAILS+=("$name: binary version $v < fixed upstream $fixed")
    if [ "$STATUS" != "UNKNOWN" ]; then STATUS="VULNERABLE"; fi
  fi
}

check_dpkg() {
  command -v dpkg-query >/dev/null 2>&1 || return 0
  local pkg ver

  for pkg in xserver-xorg-core xwayland; do
    if dpkg-query -W -f='${Version}' "$pkg" >/dev/null 2>&1; then
      ver="$(dpkg-query -W -f='${Version}' "$pkg" 2>/dev/null)"
      DETAILS+=("dpkg:$pkg=$ver")

      # Known Debian unstable fixed package versions from tracker.
      if [ "$pkg" = "xserver-xorg-core" ]; then
        if dpkg --compare-versions "$ver" ge "2:21.1.23-1"; then
          DETAILS+=("dpkg:$pkg meets Debian unstable fixed threshold")
        else
          DETAILS+=("dpkg:$pkg below Debian unstable fixed threshold; could still be backported later on vendor branches")
          [ "$STATUS" = "PATCHED" ] && STATUS="UNKNOWN"
        fi
      fi

      if [ "$pkg" = "xwayland" ]; then
        if dpkg --compare-versions "$ver" ge "2:24.1.12-1"; then
          DETAILS+=("dpkg:$pkg meets Debian unstable fixed threshold")
        else
          DETAILS+=("dpkg:$pkg below Debian unstable fixed threshold; could still be backported later on vendor branches")
          [ "$STATUS" = "PATCHED" ] && STATUS="UNKNOWN"
        fi
      fi
    fi
  done
}

check_rpm() {
  command -v rpm >/dev/null 2>&1 || return 0
  local pkg
  for pkg in xorg-x11-server-Xorg xorg-x11-server-Xwayland; do
    if rpm -q "$pkg" >/dev/null 2>&1; then
      DETAILS+=("rpm:$pkg=$(rpm -q "$pkg" 2>/dev/null)")
      DETAILS+=("rpm:$pkg installed; vendor backport status must be validated against distro advisory")
      [ "$STATUS" = "PATCHED" ] && STATUS="UNKNOWN"
    fi
  done
}

XORG_PATH="${1:-$(command -v Xorg 2>/dev/null || echo /usr/bin/Xorg)}"
XWAYLAND_PATH="${2:-$(command -v Xwayland 2>/dev/null || echo /usr/bin/Xwayland)}"

check_bin "Xorg" "$XORG_PATH" "$FIXED_XORG_UPSTREAM"
check_bin "Xwayland" "$XWAYLAND_PATH" "$FIXED_XWAYLAND_UPSTREAM"
check_dpkg
check_rpm

# If neither binary exists and no packages were detected, result is PATCHED/NOT APPLICABLE.
# We keep PATCHED to satisfy the required output vocabulary.

echo "$STATUS"
printf '%s
' "${DETAILS[@]}"

case "$STATUS" in
  PATCHED) exit 0 ;;
  VULNERABLE) exit 1 ;;
  *) exit 2 ;;
esac
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, pull an asset list for Linux desktops, VDI pools, engineering workstations, kiosks, and any hosts allowing X11 forwarding or remote X access, then separate rootful Xorg from rootless Xwayland/Xorg because that split drives real risk here. This is a MEDIUM reassessment, so there is no noisgate mitigation SLA — go straight to the 365-day remediation window unless you discover legacy rootful desktop fleets, in which case tighten X11 exposure immediately as a local hardening task and still complete patching within the noisgate remediation SLA of ≤365 days; if you run shared Linux desktops or exposed X11 workflows, don't sit on it until day 364.

Sources

  1. Ubuntu CVE record
  2. Debian security tracker
  3. Openwall oss-security advisory
  4. X.Org security page
  5. CVE/Red Hat data via CIRCL Vulnerability-Lookup
  6. CISA KEV catalog
  7. FIRST EPSS overview
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.