On July 6, 2026, researcher Hyunwoo Kim (@v4bel) publicly disclosed Januscape, a vulnerability in the Linux kernel’s KVM/x86 memory-management code. It has two attack paths. A malicious virtual machine can break out of the guest and run code as root on the host it runs on. And on any host where the KVM device node /dev/kvm is world-accessible, which is the default on EL8 and later, an unprivileged local user can trigger the same bug directly to crash the host, with a working root-level exploit reported but not yet public. Kim is the researcher behind the earlier KVM/arm64 escape “ITScape” (CVE-2026-46316); Januscape is its x86 sibling.

You may be affected even if you do not run virtual machines.

Januscape is a KVM vulnerability, so the obvious question is “we don’t run guests, are we exposed?” On CloudLinux 8, 9, and 10 the answer is usually yes. Those platforms ship /dev/kvm world-accessible by default, so any unprivileged local user (a shell account, a compromised site, a rogue process) can open the device, create a throwaway VM, and trigger the bug to crash the host, without your server ever being a hypervisor. The guest-to-host escape is the more severe path. The local-user path is the more common one on shared hosting.

Another kernel reboot cycle?

Januscape 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 Januscape livepatch reaches the main feed, servers running KernelCare receive it on the next update cycle. See Stream 4 below for current status.

What the bug is

Januscape is a race condition in the KVM x86 memory-management unit (arch/x86/kvm/mmu/mmu.c). Under the race, the host associates a shadow page-table entry with the wrong guest frame number: a frame-number and type confusion in host-managed page tables. Steered carefully, that mis-mapping lets a guest drive the host into mapping memory the attacker chooses, which is how the guest-to-host escape is built. Run without that steering, the same race trips the kernel’s own consistency checks and takes the host down (pte_list_remove). The bug triggers on both Intel (VMX/EPT) and AMD (SVM/NPT) processors.

The defect is old. It was introduced in 2010 and fixed upstream on June 16, 2026, which means nearly every Linux kernel shipped in the last 16 years carries it. Fixing Januscape takes two coupled upstream patches, and both are required: commit 81ccda30b4e8 (CVE-2026-53359, the escape fix) and its companion 0cb2af2ea66a (CVE-2026-46113, the frame-number fix).

A public proof-of-concept is available. It demonstrates the host-crash path: a guest loads a module that seizes raw virtualization state and races the host into a panic within seconds to minutes. The disclosure indicates a full root-level guest-to-host exploit exists but has not been released publicly. In our own testing we have reproduced the crash and the underlying memory corruption.

Details: oss-security disclosure · upstream fix (commit 81ccda30b4e8) · januscape.io · NVD entry for CVE-2026-53359

Status as of July 7, 2026, 10:00 UTC.

Patched CloudLinux kernels for CL7h and CL8 are in the beta/testing channel. AlmaLinux kernels for CL9 and CL10 are in the AlmaLinux testing repository. KernelCare livepatches are rolling out (EL10 in the main feed, EL8/EL9 in preparation). See the Update Instructions below for per-platform status, and apply the mitigation now in the meantime. This advisory is updated as patches move to stable channels.

 

Affected CloudLinux versions

Version Kernel Primary vector (guest→host escape) Secondary vector (local user via /dev/kvm) Patched via
CloudLinux 7 (CL7) 3.10 ⚠️ Only on KVM hypervisor hosts ✅ Not exposed (mode 0600) KernelCare livepatch
CloudLinux 7h (CL7h) 4.18 ⚠️ Only on KVM hypervisor hosts ✅ Not exposed (mode 0600) CloudLinux kernel plus KernelCare livepatch
CloudLinux 8 (CL8) 4.18 ⚠️ Only on KVM hypervisor hosts ❌ Any local user (mode 0666) CloudLinux kernel plus KernelCare livepatch
CloudLinux 8 LTS 4.18 (TuxCare ELS) ⚠️ Only on KVM hypervisor hosts ❌ Any local user (mode 0666) TuxCare ELS kernel plus KernelCare livepatch
CloudLinux 9 (CL9) 5.14 ⚠️ Only on KVM hypervisor hosts ❌ Any local user (mode 0666) AlmaLinux kernel plus KernelCare livepatch
CloudLinux 9 LTS 5.14 (TuxCare ELS) ⚠️ Only on KVM hypervisor hosts ❌ Any local user (mode 0666) TuxCare ELS kernel plus KernelCare livepatch
CloudLinux 10 (CL10) 6.12 ⚠️ Only on KVM hypervisor hosts ❌ Any local user (mode 0666) AlmaLinux kernel plus KernelCare livepatch
CloudLinux for Ubuntu 22.04 LTS 5.15 ⚠️ Only on KVM hypervisor hosts ⚠️ kvm group members only (mode 0660) Ubuntu kernel update (apt) plus KernelCare livepatch

Legend: ✅ not exposed · ⚠️ conditional exposure · ❌ exposed by default.

TuxCare ELS customers on CloudLinux 8 LTS and CloudLinux 9 LTS are patched through the ELS kernel-lts package (see Stream 3). A KernelCare livepatch is available as a no-reboot alternative on all affected versions.

 

Apply this mitigation now

Whether a mitigation applies depends on whether the server runs KVM guests.

If the server does not run virtual machines (most shared-hosting servers)

Remove the attack surface entirely by unloading the KVM modules and blocking them from loading. This closes both attack paths and does not require a reboot.

# Unload now. This fails if a VM is running, which means the host runs guests; see the next section instead.
sudo modprobe -r kvm_intel kvm      # use kvm_amd on AMD hosts

# Prevent loading on boot. "install ... /bin/false" also blocks dependency and explicit loads,
# which a plain "blacklist" line does not.
printf 'install kvm_intel /bin/false\ninstall kvm_amd /bin/false\n' \
  | sudo tee /etc/modprobe.d/disable-kvm.conf

Verify the surface is gone: lsmod | grep kvm returns nothing, and ls /dev/kvm reports “No such file or directory.”

To revert after the patched kernel is installed, remove /etc/modprobe.d/disable-kvm.conf and run sudo modprobe kvm_intel (or reboot).

If the server is a KVM hypervisor (runs guests)

You cannot unload the KVM modules on a host that is running guests. You can close the unprivileged-local-user path by restricting /dev/kvm to root and the kvm group, so that only legitimate virtualization users can open it:

echo 'KERNEL=="kvm", GROUP="kvm", MODE="0660"' | sudo tee /etc/udev/rules.d/65-kvm.rules
sudo udevadm control --reload-rules
sudo udevadm trigger /dev/kvm

After this change, a process that opens /dev/kvm without root privileges or kvm-group membership fails with EACCES. Add legitimate users to the group with usermod -aG kvm the_user.

This does not stop the guest-to-host escape. A malicious guest still triggers the bug from inside its own VM regardless of device permissions. For a hypervisor host, the patched kernel or a KernelCare livepatch is the only complete fix. Install the patched kernel (Stream 1, 2, or 3) or the KernelCare livepatch (Stream 4) as soon as it is available for your platform.

CageFS is defense in depth, not a substitute.

On shared-hosting servers with CageFS enabled, caged tenants cannot reach /dev/kvm from inside their sandbox, which blocks the unprivileged-local-user path for those tenants. CageFS does not cover non-caged shell users, root-level services, or actual guest VMs on a hypervisor. Treat it as one layer, and still install the patched kernel or livepatch.

 

Update instructions

Four delivery streams cover the affected platforms.

Stream 1 — CloudLinux kernel (CL7h, CL8)

Status: July 7, 2026, 10:00 UTC.

Patched CloudLinux kernels are released to the beta/testing channel: CL7h kernel-4.18.0-553.139.3.lve.el7h or newer, and CL8 kernel-4.18.0-553.139.3.lve.el8 or newer. Promotion to the stable channel follows after the testing period.

To install from the beta/testing channel now (CL8):

yum update 'kernel*' --enablerepo=cloudlinux-updates-testing
reboot

For CL7h:

yum update 'kernel*' --enablerepo=cl7h_beta
reboot

Stream 2 — AlmaLinux kernel (CL9, CL10)

Status: July 7, 2026, 10:00 UTC.

AlmaLinux has published patched kernels to its testing repository. Promotion to the production repositories follows. CL9 / AlmaLinux 9: kernel-5.14.0-687.20.3.el9_8 or newer. CL10 / 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 3 — TuxCare ELS LTS kernel (CL8 LTS, CL9 LTS)

Status: July 7, 2026, 10:00 UTC.

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

ELS-subscribed customers install from the TuxCare ELS repository. This pipeline is separate from the stock CL8/CL9 kernel rebuild above.

yum update kernel-lts
reboot

Stream 4 — KernelCare livepatch (all affected versions)

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

KernelCare livepatch rollout for Januscape, by CloudLinux platform.

  • Fully rolled out on the main feed: CloudLinux 10 and CloudLinux for Ubuntu 22.04.
  • On the main feed (staged rollout): CloudLinux 8.
  • In the testing feed: CloudLinux 7h.
  • Still in preparation: CloudLinux 9.

Update: July 7, 2026, 11:42 UTC.

KernelCare livepatches for Januscape have advanced. On the main feed: the EL10 family (AlmaLinux 10, RHEL 10, Oracle Linux 10, Rocky Linux 10), Ubuntu 22.04 (Jammy, including cloud variants), Debian 13, Ubuntu Focal-on-Jammy HWE, and Proxmox VE 7 and 8. In the testing feed: Ubuntu 24.04 (Noble). In preparation: EL8 and EL9 (CloudLinux 8 and CloudLinux 9).

Status: July 7, 2026, 10:00 UTC.

KernelCare livepatches for Januscape (CVE-2026-53359 and CVE-2026-46113, shipped together) are rolling out. In the main feed: AlmaLinux 10. In the testing feed: RHEL 10, Oracle Linux 10, Rocky Linux 10, and Ubuntu 22.04 (Jammy), including cloud variants. In preparation: EL8, EL9, Ubuntu 24.04 (Noble), and others.

To deploy from the testing feed:

kcarectl --update --prefix test

Once promoted to the main feed, subscribed servers receive the patch automatically on the next update cycle:

kcarectl --update

 

How to verify you are patched

Streams 1, 2, and 3 (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 4 (KernelCare). Both fixes are required for Januscape, so check for both:

kcarectl --patch-info | grep -E 'CVE-2026-53359|CVE-2026-46113'

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