In early July 2026, researcher Jaeyoung Chung (CompSec Lab, Seoul National University) published a proof-of-concept for Bad epoll, a use-after-free bug in the Linux kernel’s epoll subsystem. On CloudLinux 9 and 10 it lets an unprivileged local user escalate to root. On a shared host, that turns a single compromised website into root on the whole server.

The public exploit reports high reliability (99% on a 6.12 kernel), and it needs no special privileges or configuration to run.

 

Why this matters on a shared host

On CloudLinux 9 and 10, Bad epoll is the difference between one hacked website and a compromised server. A kernel local privilege escalation turns any code running on the server into root, and “local” here does not mean an insider or a customer you trust. It means any process on the machine, including the PHP-FPM worker behind a compromised WordPress plugin, an outdated CMS, or a site running on leaked credentials. The attacker is whoever hacked one of the sites you host.

On an unpatched host the chain is short, and none of it needs special access:

  1. A web-tier compromise. An attacker exploits a vulnerable WordPress plugin, an outdated CMS, or one of the everyday web-application flaws shared hosting sees constantly. They now run as the site’s PHP-FPM or Apache identity, or its CageFS account, in theory confined to that one site.
  2. Bad epoll. From that unprivileged process, the attacker uses the epoll use-after-free to become root. No prior root, no special capability, no admin action.
  3. Root on the host. They now run outside every CageFS boundary and every per-tenant limit. Every other tenant’s files, databases, credentials, and backups on that server are within reach, and recovery means rebuilding the whole server.

On a patched host, or one running a KernelCare livepatch, step 2 fails: a web-tier compromise stays a web-tier compromise, one site to clean up rather than a whole server to rebuild. That is what the kernel update buys you.

If a CloudLinux 9 or 10 server in your fleet has not taken the fix and is not on KernelCare, the gap between “a customer’s site got hacked” and “the whole server is owned” is this one kernel bug.

💡 Another kernel reboot cycle?

Bad epoll is the latest in a run of Linux kernel privilege-escalation issues that have each required a patch and a reboot on affected hosts. If emergency-patching and rebooting servers on this cadence is not sustainable for you, KernelCare is the alternative we recommend. It applies kernel security fixes to a running server automatically, with no reboot and no maintenance window. Once the Bad epoll livepatch reaches the main feed, servers running KernelCare receive it on the next update cycle. See Stream 3 below for current status.

 

Technical details of the bug

Bad epoll is a race condition in the kernel’s epoll event-notification subsystem. Two of epoll’s close paths run at the same time and collide: one path frees an object while the other is still writing into it, in ep_remove(). That is the use-after-free. It gives an 8-byte write into freed kernel memory, which the public exploit builds into arbitrary kernel memory access and a root shell.

Because epoll is a core kernel facility used by almost every process, the bug needs nothing unusual to reach. Any local unprivileged account can trigger it: a shell user, a cron job, or a web process that an attacker has already compromised.

A public proof-of-concept is available. Details: public PoC (J-jaeyoung/bad-epoll) · Red Hat CVE-2026-46242 · upstream fix (commit a6dc643c6931) · NVD entry for CVE-2026-46242

Update: August 25, 2026, 15:00 UTC.

CloudLinux 9 LTS is not affected. Our kernel team has confirmed that the TuxCare ELS kernel CloudLinux 9 LTS runs is pinned to the AlmaLinux 9.2 kernel line, which predates the change that introduced Bad epoll. Red Hat likewise lists RHEL 9.0 and 9.2 as not affected. This advisory initially listed CloudLinux 9 LTS as affected pending confirmation. The Affected versions table and Stream 2 below have been updated. No action is required on CloudLinux 9 LTS.

For CloudLinux 9 and 10 the fix is fully available: patched AlmaLinux kernels are in the production repositories (Stream 1) and KernelCare livepatches are in the main feed (Stream 3).

Status as of July 8, 2026, 15:00 UTC.

Patched AlmaLinux kernels for CloudLinux 9 and 10 are in the AlmaLinux testing repository. KernelCare livepatches are being prepared. See the Update Instructions below for per-platform status, and plan to apply the update as soon as it reaches your channel. This advisory is updated as patches move to stable channels.

The same kernel update also fixes Januscape. The AlmaLinux kernels that close Bad epoll are the same builds that close the Januscape KVM vulnerability (CVE-2026-53359). One kernel update and one reboot cover both. See the Januscape advisory for details on that issue.

 

Affected CloudLinux versions

Version Kernel Affected by Bad epoll Patched via
CloudLinux 7 (CL7) 3.10 ✅ No n/a
CloudLinux 7h (CL7h) 4.18 ✅ No n/a
CloudLinux 8 (CL8) 4.18 ✅ No n/a
CloudLinux 8 LTS 4.18 (TuxCare ELS) ✅ No n/a
CloudLinux 9 (CL9) 5.14 ❌ Yes AlmaLinux kernel plus KernelCare livepatch
CloudLinux 9 LTS 5.14 (TuxCare ELS) ✅ No † n/a
CloudLinux 10 (CL10) 6.12 ❌ Yes AlmaLinux kernel plus KernelCare livepatch
CloudLinux for Ubuntu 22.04 LTS 5.15 ✅ No n/a

Legend: ✅ not affected · ❌ affected.

† CloudLinux 9 LTS runs the TuxCare ELS kernel-lts package, which is pinned to the AlmaLinux 9.2 kernel line (5.14.0-284). The change that introduced Bad epoll was backported into the Red Hat 9 kernel after the 9.2 release, so this kernel does not contain the bug; Red Hat lists RHEL 9.0 and 9.2 as not affected. This advisory listed CloudLinux 9 LTS as affected until August 25, 2026, pending confirmation from our kernel team.

 

Is there a mitigation?

No. Unlike a loadable-module vulnerability, there is no workaround short of the kernel update. epoll is a core kernel facility and cannot be disabled, and per-tenant sandboxing such as CageFS does not block it, because every process uses epoll. The only fix is the patched kernel or a KernelCare livepatch. Apply Stream 1 or Stream 3 below for your platform.

 

Update instructions

Two delivery streams cover the affected platforms, CloudLinux 9 and CloudLinux 10: the AlmaLinux kernel (Stream 1) and the KernelCare livepatch (Stream 3). Stream 2 covered CloudLinux 9 LTS, which has since been confirmed not affected, and is kept for the record.

Stream 1: AlmaLinux kernel (CL9, CL10)

Update: August 25, 2026, 15:00 UTC.

The patched kernels are in the AlmaLinux production repositories: CloudLinux 9 / AlmaLinux 9 kernel-5.14.0-687.23.1.el9_8 or newer; CloudLinux 10 / AlmaLinux 10 kernel-6.12.0-211.31.1.el10_2 or newer. A plain dnf update kernel followed by a reboot is sufficient. The testing-repository steps below are no longer needed.

Status: July 8, 2026, 15:00 UTC.

AlmaLinux has published patched kernels to its testing repository. Promotion to the production repositories follows. CloudLinux 9 / AlmaLinux 9: kernel-5.14.0-687.20.3.el9_8 or newer. CloudLinux 10 / AlmaLinux 10: kernel-6.12.0-211.30.3.el10_2 or newer.

To install from the AlmaLinux testing repository now, enable it by installing the release-testing package directly from the AlmaLinux repo, update the kernel, then disable the testing repo again.

For CL10:

dnf install -y https://repo.almalinux.org/almalinux/10/extras/x86_64/os/Packages/almalinux-release-testing-10-2.el10.x86_64.rpm
dnf update 'kernel*'
reboot
dnf config-manager --disable almalinux-testing

For CL9:

rpm -Uvh --nodeps https://repo.almalinux.org/almalinux/9/extras/x86_64/os/Packages/almalinux-release-testing-9-2.el9.noarch.rpm
dnf update 'kernel*'
reboot
dnf config-manager --disable almalinux-testing

Once the kernels reach the production repositories, a plain dnf update kernel; reboot is sufficient.

Stream 2: TuxCare ELS LTS kernel (CL9 LTS)

Update: August 25, 2026, 15:00 UTC.

No update is needed. CloudLinux 9 LTS has been confirmed not affected by Bad epoll: its TuxCare ELS kernel is pinned to the AlmaLinux 9.2 kernel line, which predates the change that introduced the bug. No kernel-lts package will be released for this issue, and no action is required on CloudLinux 9 LTS.

Status: July 8, 2026, 15:00 UTC.

The patched kernel-lts package for CloudLinux 9 LTS is being prepared. Target versions will be added here on release.

This stream is retained for the record only. There is nothing to install.

Stream 3: KernelCare livepatch (all affected versions)

Update: August 25, 2026, 15:00 UTC.

CloudLinux 9 LTS has been confirmed not affected (see Affected CloudLinux versions above), so no livepatch is needed for it. The CloudLinux 9 and CloudLinux 10 livepatches remain in the main feed.

Update: July 10, 2026, 18:00 UTC.

KernelCare livepatches for Bad epoll are now in the main feed for CloudLinux 9 and CloudLinux 10. Subscribed servers on those versions receive the patch automatically on the next update cycle, or immediately with kcarectl --update.

Update: July 10, 2026, 17:00 UTC.

KernelCare livepatch rollout:

  • In the testing feed: CloudLinux 10.
  • Still in preparation: CloudLinux 9 and CloudLinux 9 LTS.

Status: July 8, 2026, 15:00 UTC.

KernelCare livepatches for Bad epoll (CVE-2026-46242) are in development. Once released to the main feed, subscribed servers receive the patch automatically on the next update cycle.

Once available, deploy from the testing feed:

kcarectl --update --prefix test

Once promoted to the main feed, subscribed servers update automatically, or on demand:

kcarectl --update

 

How to verify you are patched

Stream 1 (kernel update). After updating and rebooting, compare your running kernel against the target version in the relevant stream’s most recent status callout above:

uname -r

Stream 3 (KernelCare).

kcarectl --patch-info | grep CVE-2026-46242

⚠ Do not use kcarectl --info | grep CVE-... for verification. That form returns empty output even on correctly patched systems. Always use kcarectl --patch-info for CVE-level status.

 

References