ALAS2023-2026-3260


Amazon Linux 2023 Security Advisory: ALAS2023-2026-3260
Advisory Released Date: 2026-10-24
Advisory Updated Date: 2026-10-26
Severity: Important

Issue Overview:

CheckSetDoodad() in xkb/xkb.c frees doodad->text.text on error but does
not NULL the pointer. When the error path continues, _XkbClearDoodad() is
called during cleanup and frees the same pointer again, resulting in a
double free.
An authenticated X client can trigger this by sending a crafted XkbSetGeometry request with a malformed TextDoodad entry that causes the initial error path to be taken.

The double free can lead to heap corruption, potentially enabling arbitrary code execution or denial of service (crash).

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/c724006ee76fb002add50fcb4d97e8c96c279f09 (xorg-server-21.1.25) (CVE-2026-88812)

Present_clear_window_notifies() does not unlink notify entries from the per-window list before freeing window_priv. When the window is subsequently destroyed or reused, the stale list entries are traversed, resulting in a use-after-free.

An authenticated X client can trigger this by creating cross-window Present notifies and then destroying the target window. Both the Present and SYNC extensions must be enabled (they are by default).
The use-after-free can lead to denial of service (crash) or potentially information disclosure.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/a469f98bcfab50dab607ff5ac24037632b0079a3 (xorg-server-21.1.25) (CVE-2026-93515)

XInput Passive Grab modifierDevice Use-After-Free

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/9442a53c137bb9eb61336c6fd39627912d50cc8d (xorg-server-21.1.25) (CVE-2026-93516)

In the GLX RenderLarge request handling, the buffer is allocated to the size of cmdlen but the subsequent memcpy copies dataBytes into it. There is no validation that dataBytes is less than or equal to cmdlen, allowing an attacker to write past the end of the allocated buffer.

An authenticated X client can trigger this by sending a crafted GLX RenderLarge request where dataBytes exceeds cmdlen, causing a heap buffer overflow.
The heap buffer overflow can lead to arbitrary code execution or denial of service.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/3961cdca467975a7d377f1f7bcd55d52eb3f417a (xorg-server-21.1.25) (CVE-2026-93517)

In XkbResizeKeyType(), the size_syms variable is declared as unsigned short. The expression (nTotal * 15) / 10 can exceed 65535 for large nTotal values, and the result is truncated when assigned to the unsigned short variable. This causes an undersized allocation, and subsequent writes overflow the heap buffer.

An authenticated X client can trigger this by sending XKB requests that cause a key type resize with a sufficiently large nTotal value.
The heap buffer overflow resulting from the truncated allocation can lead to arbitrary code execution or denial of service.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/558ba8f784b0f5d4d96948051b2f04c983af20cc (xorg-server-21.1.25) (CVE-2026-93518)

Input_constrain_cursor() writes barrier events into a fixed-size buffer without checking bounds. When more than 100 pointer barriers are active, the writes overflow the fixed buffer on the stack or heap. An authenticated X client can trigger this by creating more than 100 pointer barriers (using the XFIXES extension) and then generating pointer motion events (e.g. via XTEST). Both extensions are enabled by default.

The buffer overflow can lead to arbitrary code execution or denial of service.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/9c3880d0745acefc98ed37e79498dfbe558a0f40 (xorg-server-21.1.25) (CVE-2026-93519)

In RRChangeProviderProperty() with PrependMode, new_value.size is set to len instead of total_len. Additionally, the old_data offset calculation uses prop_value->size instead of len for the memcpy of existing data. This causes a heap buffer overflow when prepending property data, as the buffer is undersized and the copy offset is incorrect.

This mirrors a bug pattern that was previously fixed in RRChangeOutputProperty but was not applied to the provider property path.

An authenticated X client can trigger this by sending RandR ChangeProviderProperty requests with PrependMode on a system with RandR providers (standard on modern GPUs).
The heap buffer overflow can lead to arbitrary code execution or denial of service.
Fixed in: xorg-server-21.1.25 and xwayland-24.1.14
Fix: https://gitlab.freedesktop.org/xorg/xserver/-/commit/5dc9efd5a199 (CVE-2026-93521)

The XI2 passive ungrab path (XIPassiveUngrabDevice) is missing the modifier validation that exists in the grab path and in legacy XI paths. Without checking against AllModifiersMask, a client can supply out-of-range modifier values that lead to an out-of-bounds write when the modifier is used as an index.

An authenticated X client can trigger this by sending an XIPassiveUngrabDevice request with an out-of-range modifier value.
The out-of-bounds write can lead to arbitrary code execution or denial of service.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/aa56160fa213d8767e7da0c076b5c8242703313b (xorg-server-21.1.25) (CVE-2026-93523)

CheckKeySyms() in xkb/xkb.c populates a symsPerKey[] validation array with new key widths for keys in the SetMap request range, then continues filling entries for keys beyond the range. However, the second loop starts at index i = nKeySyms (the first loop's counter) rather than i = firstKeySym + nKeySyms. When firstKeySym is large and nKeySyms is small, the second loop overwrites symsPerKey[target] with the old width from the existing map.

CheckKeyActions() then validates the wire action count against the stale old width and accepts it. In _XkbSetMap(), SetKeySyms() widens the key (resizing actions to nGroups * newWidth), but SetKeyActions() then resizes again to the old count. A subsequent XkbGetMap request reads XkbKeyNumActions() entries (derived from the new wider key_sym_map.width) from the shorter action allocation, causing an out-of-bounds heap read. The overread bytes are copied into the GetMap reply and sent back to the requesting client, producing a bounded heap information disclosure.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/927ee1282d21550807619521bee909ef62ed0571 (xorg-server-21.1.25) (CVE-2026-93524)

GestureBuildSprite() copies raw WindowPtr values into the gesture sprite trace via CopySprite() without any reference counting or lifetime management. WindowGone() only repairs touch sprite traces when a window is destroyed -- gesture sprite traces are never checked or cleaned. This leaves stale WindowPtr references in gesture sprites.

When DeliverOneGestureEvent() later dereferences the stale WindowPtr via DeepestSpriteWin(&gi->sprite)->drawable.id, it produces a use-after-free. The freed 4 bytes (drawable.id) can be read back, potentially leaking information about the contents of the freed memory region.

NOTE: https://lists.x.org/archives/xorg-announce/2026-October/003747.html
NOTE: Fixed by: https://gitlab.freedesktop.org/xorg/xserver/-/commit/4c9c345d2a10baf956fdefa83bb88681f7c840cf (xorg-server-21.1.25) (CVE-2026-93536)


Affected Packages:

xorg-x11-server


Issue Correction:
Run dnf update xorg-x11-server --releasever 2023.12.20261026 or dnf update --advisory ALAS2023-2026-3260 --releasever 2023.12.20261026 to update your system.
More information on how to update your system can be found on this page: Amazon Linux 2023 documentation

New Packages:
aarch64:
    xorg-x11-server-Xorg-debuginfo-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xnest-debuginfo-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xnest-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xephyr-debuginfo-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xorg-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-devel-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-common-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xvfb-debuginfo-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-debuginfo-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xvfb-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-Xephyr-21.1.13-5.amzn2023.0.12.aarch64
    xorg-x11-server-debugsource-21.1.13-5.amzn2023.0.12.aarch64

noarch:
    xorg-x11-server-source-21.1.13-5.amzn2023.0.12.noarch

src:
    xorg-x11-server-21.1.13-5.amzn2023.0.12.src

x86_64:
    xorg-x11-server-Xnest-debuginfo-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xorg-debuginfo-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xephyr-debuginfo-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-debuginfo-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-common-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-debugsource-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xvfb-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xorg-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xephyr-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xnest-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-devel-21.1.13-5.amzn2023.0.12.x86_64
    xorg-x11-server-Xvfb-debuginfo-21.1.13-5.amzn2023.0.12.x86_64