|
|
Message-ID: <d6df5e3c-1eac-4b9e-8504-d6d5354ecb90@oracle.com>
Date: Fri, 16 Oct 2026 14:53:04 -0700
From: Alan Coopersmith <alan.coopersmith@...cle.com>
To: oss-security@...ts.openwall.com
Subject: Fwd: X.Org Security Advisory: multiple security issues
in X.Org X client libraries
All five library releases are available now, see
https://lists.x.org/archives/xorg-announce/2026-October/thread.html
for links to their release announcements.
-------- Forwarded Message --------
Subject: X.Org Security Advisory: multiple security issues in X.Org X client
libraries
Date: Fri, 16 Oct 2026 12:04:10 -0700
From: Alan Coopersmith <alan.coopersmith@...cle.com>
To: xorg-announce@...ts.x.org
CC: xorg@...ts.x.org
======================================================================
X.Org Security Advisory: October 16, 2026
Issues in X.Org X client libraries prior to libX11 1.8.14,
libXi 1.8.4, libXpm 3.5.20, libXrender 0.9.13, libXtst 1.2.6
======================================================================
Multiple issues have been found in the X client library implementations
published by X.Org for which we are releasing security fixes for in
* libX11 1.8.14
* libXi 1.8.4
* libXpm 3.5.20
* libXrender 0.9.13
* libXtst 1.2.6
========================================================================
libX11 - 4 CVEs
========================================================================
For those considering cherry-picking the fixes, note that libX11 1.8.14
also includes additional code hardening fixes without CVEs assigned
that you may also want to consider.
* CVE-2026-88806:
Out-of-bounds write vulnerability in libX11's XKB (X Keyboard Extension)
action parser.
A malicious server could send a XkbGetMap reply with keycode values
exceeding max_keycode + 1, causing a write past the end of the allocated
array during reply handling.
Fixed in: libX11 1.8.14
Fix: https://gitlab.freedesktop.org/xorg/lib/libx11/-/commit/6d4432b13
Found by: Adam Bedard working with TrendAI Zero Day Initiative (ZDI-CAN-32061)
* CVE-2026-94283:
Out-of-bounds read vulnerability in libX11's XIM (X Input Method)
attribute parser.
A malicious or compromised XIM server can send a crafted XIM_OPEN_REPLY
message with inconsistent nested attribute lengths, causing the client
to read past the end of the received packet buffer during parsing.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — 6.5 (MEDIUM)
Fixed in: libX11 1.8.14
Fix: https://gitlab.freedesktop.org/xorg/lib/libx11/-/commit/f263bbca2
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-15963)
* CVE-2026-94284:
Out-of-bounds read vulnerability in libX11's XIM trigger-key
registration parser.
A malicious XIM server can send a crafted XIM_REGISTER_TRIGGERKEYS
message with oversized inner on-keys/off-keys length fields, causing the
client to read past the received buffer during memcpy() and crash.
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — 5.5 (MEDIUM)
Fixed in: libX11 1.8.14
Fix: https://gitlab.freedesktop.org/xorg/lib/libx11/-/commit/924fc91f0
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-16671)
* CVE-2026-94285:
Out-of-bounds read in libX11's byte-oriented codeset parser.
When the last byte of input is a valid lead byte for a multi-byte locale
(e.g. GBK, Big5), byteM_parse_codeset() reads past the caller-provided
buffer while matching the second byte range.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L — 5.3 (MEDIUM)
Fixed in: libX11 1.8.14
Fix: https://gitlab.freedesktop.org/xorg/lib/libx11/-/commit/797eaf0bd
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-16718)
========================================================================
libXi - 9 CVEs
========================================================================
For those considering cherry-picking the fixes, note that libXi 1.8.4
also includes additional code hardening fixes without CVEs assigned
that you may also want to consider.
* CVE-2026-93541:
Out-of-bounds read in libXi's XQueryDeviceState().
XQueryDeviceState() trusts the num_valuators value from a
ValuatorClass reply without checking it fits in the declared class
length, enabling an OOB read and client crash via a forged reply.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — 6.5 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/9a5f8636b
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-13253)
* CVE-2026-93542:
Out-of-bounds read in libXi's XI2 class parsing via size_classes()
and copy_classes().
Malicious XIQueryDevice replies or XI_DeviceChanged events with
inconsistent class lengths can drive the parser past the received
buffer and crash the client.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — 6.5 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/59f8dece8
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-13600)
* CVE-2026-93543:
Out-of-bounds read in libXi's XI2 class parser.
A malicious X server can send forged XI_DeviceChanged events
(or XIQueryDevice replies) with inconsistent class metadata.
An overlong num_classes, zero or oversized per-class length,
or button/key counts exceeding the class bytes causing the
size_classes() and copy_classes() to walk past the event/reply
buffer and crash the client.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — 5.9 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/f885619bb
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-13717)
* CVE-2026-93544:
Out-of-bounds read in libXi's XI2 XIQueryDevice reply parsing.
Class parsing helpers size_classes()/copy_classes() and the
XIQueryDevice() caller walk wire data using data provided by the
Xserver (length, num_buttons and num_keycodes) without bounds
checking, enabling OOB reads and client crashes via malformed
replies.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — 6.5 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/e2ec4a1c8
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-14043)
* CVE-2026-93545:
Out-of-bounds read in libXi's XListInputDevices()
A malicious server can set a name length byte that exceeds the
remaining reply bytes, causing memcpy() to read past the buffer
when parsing device name strings from a ListInputDevices reply.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L — 5.4 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/2e5ecd187
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-14711)
* CVE-2026-94281:
Out-of-bounds read in libXi's XListInputDevices() class parsing.
SizeClassInfo() validates each class record's length against the
original buffer size but never decrements it, allowing a sequence
of individually-valid class lengths to cumulatively advance past
the buffer. ParseClassInfo() then walks the same records without
any bounds checking.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:L — 5.4 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/1d5813ba0
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-14718)
* CVE-2026-94282:
Out-of-bounds read in libXi's XI2 enter/leave/focus cookie conversion.
A malicious X server can send a crafted XI2 Enter, Leave, FocusIn,
or FocusOut GenericEvent with a small outer length but an oversized
buttons_len field, causing wireToEnterLeave() to copy data past the
end of the received event buffer.
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H — 6.1 (MEDIUM)
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/8caed97a3
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-15083)
* CVE-2026-109089:
libXi XGetDeviceControl Control Type Mismatch Heap Buffer Overflow
XGetDeviceControl() sizes the client buffer from the server's
d->control and fills it from the caller's control argument. A hostile
server can answer DEVICE_RESOLUTION with a small fixed-size control
type so allocation is tiny while the fill still walks an unbounded
DEVICE_RESOLUTION valuator list, overflowing the heap.
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/f7836d0a0
Found by: Adam Bedard, Security Researcher.
* CVE-2026-109090:
libXi XGetDeviceControl DEVICE_ENABLE Heap Buffer Overflow
DEVICE_ENABLE has a fill path in XGetDeviceControl() but no size arm,
so allocation uses the wire length (8 bytes) while the fill writes a
full XDeviceEnableState (12–16 bytes), overflowing the heap.
Fixed in: libXi 1.8.4
Fix: https://gitlab.freedesktop.org/xorg/lib/libxi/-/commit/4eb9f70b6
Found by: Adam Bedard, Security Researcher.
========================================================================
libXpm - 1 CVE
========================================================================
* CVE-2026-94287:
Denial of service via unsigned underflow in libXpm's write path.
A crafted 0x0 XPM passes the parser's dimension checks and, when
serialized through WritePixels(), causes an unsigned underflow in the
row loop bound (height - 1 wraps to UINT_MAX), resulting in prolonged
CPU use and continuous output growth.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — 5.5 (MEDIUM)
Fixed in: libXpm 3.5.20
Fix: https://gitlab.freedesktop.org/xorg/lib/libxpm/-/commit/58eb875b7
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-14424)
========================================================================
libXrender - 1 CVE
========================================================================
* CVE-2026-88807:
Out-of-bounds read in libXrender's XRenderQueryFormat reply parser.
A malicious server could reply to XRenderQueryFormat with a numSubpixels
count greater than the number of screens, causing an OOB write into
screen->subpixel which was allocated using numScreens.
Fixed in: libXrender 0.9.13
Fix: https://gitlab.freedesktop.org/xorg/lib/libxrender/-/commit/0564bce54
Found by: Adam Bedard working with TrendAI Zero Day Initiative (ZDI-CAN-32093)
========================================================================
libXtst - 2 CVEs
========================================================================
* CVE-2026-94286:
Out-of-bounds read in libXtst's RECORD reply parser.
A malicious Xserver can send a crafted RECORD reply where the inner
element's datum_bytes exceeds the actual reply buffer size, causing
the RECORD callback to receive a pointer/length pair that extends past
the allocated buffer.
When the callback reads the advertised payload, it triggers an out of
bounds read that can crash the client or expose adjacent process memory.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H — 7.1 (HIGH)
Fixed in: libXtst 1.2.6
Fix: https://gitlab.freedesktop.org/xorg/lib/libxtst/-/commit/b84737d84
Found by: Aisle Research (AISLE-Report-PSIRTSUPT-16762)
* CVE-2026-109088:
libXtst RECORD EnableContext Reply Endless Loop
parse_reply_call_callback() advances through RECORD EnableContext
reply elements by datum_bytes. A zero-sized XRecordFromClient
(BIG-REQUESTS length 0) or an undefined category byte leaves
datum_bytes at 0 while bytes remain, so the loop never terminates
and the application callback is invoked forever with empty data.
A malicious or compromised X server answering EnableContext can hang
XRecordEnableContext() (sync) or livelock Xlib reply processing
(async).
Fixed in: libXtst 1.2.6
Fix: https://gitlab.freedesktop.org/xorg/lib/libxtst/-/commit/ac60f5f47
Found by: Kaya Emre Arikan.
========================================================================
X.Org thanks all of those who reported and fixed these issues, and those
who helped with the review and release of this advisory and these fixes.
The X.Org security team would like to take this opportunity to remind X
client authors that current best practices suggest separating code that
requires privileges from the GUI, to reduce the risk of issues like these.
--
-Alan Coopersmith- alan.coopersmith@...cle.com
X.Org Security Response Team - xorg-security@...ts.x.org
Download attachment "OpenPGP_signature.asc" of type "application/pgp-signature" (841 bytes)
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.