Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
---
title: "Fixing CVE-2026-53359 (Januscape) and CVE-2026-46113 on Talos Linux"
slug: fixing-cve-2026-53359-januscape-talos-linux
date: 2026-07-14
author: "lexfrei"
description: "The proper fix for CVE-2026-53359 (Januscape) and CVE-2026-46113 is a kernel bump, not disabling nested virtualization — with a Talos Linux upgrade runbook."
images:
- "januscape-talos-fix.png"
article_types:
- how-to
- talos
topics:
- security
- talos
- kubevirt
- platform

---

![Fixing CVE-2026-53359 (Januscape) and CVE-2026-46113 on Talos Linux](januscape-talos-fix.png)

**Update on CVE-2026-53359 ("Januscape"): the proper fix is here.**

Our [earlier mitigation](https://nvd.nist.gov/vuln/detail/CVE-2026-53359) was a hotfix — a temporary, forced measure. The proper fix is now available, so the hotfix is no longer needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The link for "earlier mitigation" currently points to the NVD page for CVE-2026-53359. It would be much more helpful and contextually accurate to link directly to the previous Cozystack security advisory blog post (/blog/security-advisory-cve-2026-53359-januscape-kvm-guest-to-host-escape/) which describes the hotfix in detail.

Suggested change
Our [earlier mitigation](https://nvd.nist.gov/vuln/detail/CVE-2026-53359) was a hotfix — a temporary, forced measure. The proper fix is now available, so the hotfix is no longer needed.
Our [earlier mitigation](/blog/security-advisory-cve-2026-53359-januscape-kvm-guest-to-host-escape/) was a hotfix — a temporary, forced measure. The proper fix is now available, so the hotfix is no longer needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Link “earlier mitigation” to the prior Cozystack advisory.

The NVD page documents the CVE, but not Cozystack’s earlier hotfix. Link the previous security-advisory post here, or include both links, so readers can compare and roll back the old mitigation.

Based on the supplied prior advisory snippet, that post is the relevant source for the earlier mitigation context.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/en/blog/2026-07-14-fixing-cve-2026-53359-januscape-talos-linux/index.md`
at line 24, Update the “earlier mitigation” link in the advisory content to
reference the prior Cozystack security-advisory post identified by the supplied
context, while retaining the NVD CVE reference as an additional link if needed.
Ensure readers can access the earlier hotfix details for comparison and
rollback.


**TL;DR:** Disabling nested virtualization is no longer needed. It was a hotfix, and for some setups it wasn't even possible. The real fix is a kernel bump. If you already applied the hotfix, roll it back and upgrade instead.

## What changed

When [CVE-2026-53359 (Januscape)](https://nvd.nist.gov/vuln/detail/CVE-2026-53359) was disclosed on July 6, 2026 together with a working exploit, no Talos Linux image with a patched kernel existed yet. The only thing operators could do that day was reduce the attack surface by disabling nested virtualization at the kernel command line.

That window is closed. Patched stable kernels are out, and Talos now ships one. **The fix is a kernel bump, not a config knob** — once you are on a safe kernel, the vulnerable path is gone regardless of whether nested virtualization is enabled.

CVE-2026-53359 (Januscape) and the closely related [CVE-2026-46113](https://nvd.nist.gov/vuln/detail/CVE-2026-46113) are KVM x86 shadow-paging use-after-free bugs that let a guest VM escape to its host. Both affect Intel and AMD CPUs. In a Cozystack context this matters because tenant Kubernetes cluster nodes are KubeVirt VMs — so a malicious tenant with root inside its own VM is exactly the threat model these bugs enable.

## The proper fix: a kernel bump

Both CVEs are fixed in **Linux 6.18.38** and its backports. Make sure every node runs a patched kernel.

Safe kernel versions across all stable branches:

```
6.1.177 · 6.6.144 · 6.12.95 · 6.18.38 · 7.1.3 · 7.2-rc1
```
Comment on lines +42 to +44

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add language identifiers to the plain-text fences.

markdownlint MD040 flags both fenced blocks. Add text after each opening fence.

Based on static-analysis output, both fences are reported by MD040.

Also applies to: 111-113

🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 42-42: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/en/blog/2026-07-14-fixing-cve-2026-53359-januscape-talos-linux/index.md`
around lines 42 - 44, Add the text language identifier to both fenced code
blocks in the blog post, including the block containing the kernel version list
and the other fence reported by MD040, without changing their contents.

Source: Linters/SAST tools


- **Generic Linux hosts (non-Talos):** upgrade to **Linux 6.18.38 or newer** (or the patched version from your branch above), then reboot.
Comment on lines +40 to +46

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '1,140p' content/en/blog/2026-07-14-fixing-cve-2026-53359-januscape-talos-linux/index.md

Repository: cozystack/website

Length of output: 6471


🌐 Web query:

CVE-2026-46113 NVD affected versions fixed 6.19 7.0.7

💡 Result:

CVE-2026-46113 is a security vulnerability in the Linux kernel's KVM (Kernel-based Virtual Machine) x86 shadow paging mechanism [1][2]. The flaw is a use-after-free error caused by unexpected Guest Frame Number (GFN) handling, which can occur during guest-initiated page table changes [3][4]. According to the National Vulnerability Database (NVD) and related security trackers, the affected Linux kernel versions are those containing the vulnerable shadow paging logic [1][4]. The vulnerability is considered resolved in the following stable versions [1][4]: - 6.1.176 and later - 6.6.140 and later - 6.12.88 and later - 6.18.30 and later - 7.0.7 and later Versions prior to 2.6.20 are generally considered unaffected by this specific issue as they did not contain the corresponding shadow paging logic [1][4]. Users are advised to update to a patched kernel version to mitigate this vulnerability [5][4].

Citations:


🌐 Web query:

site:nvd.nist.gov CVE-2026-46113 6.18.30 7.0.7 affected versions

💡 Result:

CVE-2026-46113 is a vulnerability in the Linux kernel related to KVM (Kernel-based Virtual Machine) x86 shadow paging, specifically involving a use-after-free issue caused by an unexpected Guest Frame Number (GFN) [1]. According to official vulnerability data, the affected versions include all Linux kernel versions from 2.6.20 up to, but not including, the versions that contain the fix [1]. Specifically, the vulnerability is reported as resolved in versions 6.1.175, 6.6.140, 6.12.88, 6.18.30, and 7.0.7 [1]. Consequently, kernels newer than or equal to these versions are generally considered unaffected [1]. In summary, the vulnerability affects Linux kernel versions [1]: - Starting from 2.6.20. - Up to (but excluding) 6.1.175. - Up to (but excluding) 6.6.140. - Up to (but excluding) 6.12.88. - Up to (but excluding) 6.18.30. - Up to (but excluding) 7.0.7. The fix for this issue was upstreamed in version 7.1 [1]. The vulnerability arises when a shadow paging mismatch between the stored and computed GFN occurs, which can be triggered by changing a PDE (Page Directory Entry) mapping from outside the guest and subsequently deleting a memory slot [1][2]. This can lead to a use-after-free condition when the KVM shadow page is freed but an rmap entry incorrectly survives, causing subsequent memory accesses to dereference freed memory [1][2].

Citations:


Use exact fixed versions, not “or newer.”
Linux 6.18.38 or newer overstates the safe range; keep the branch-specific fixed versions instead, and rename the heading so 7.2-rc1 isn’t presented as a stable branch.

Suggested wording
-Safe kernel versions across all stable branches:
+Known fixed kernel versions:

-**Generic Linux hosts (non-Talos):** upgrade to **Linux 6.18.38 or newer** (or the patched version from your branch above), then reboot.
+**Generic Linux hosts (non-Talos):** upgrade to one of the exact fixed versions listed above, or your vendor's branch-specific backport, then reboot.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Safe kernel versions across all stable branches:
```
6.1.177 · 6.6.144 · 6.12.95 · 6.18.38 · 7.1.3 · 7.2-rc1
```
- **Generic Linux hosts (non-Talos):** upgrade to **Linux 6.18.38 or newer** (or the patched version from your branch above), then reboot.
Known fixed kernel versions:
🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 42-42: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/en/blog/2026-07-14-fixing-cve-2026-53359-januscape-talos-linux/index.md`
around lines 40 - 46, Update the “Safe kernel versions across all stable
branches” section to avoid describing 7.2-rc1 as a stable branch, and replace
the generic-host guidance in the surrounding version guidance with exact
branch-specific fixed versions rather than “6.18.38 or newer.” Preserve the
listed fixed versions and clearly distinguish stable branches from the
release-candidate version.

Source: MCP tools

- **Talos Linux:** upgrade to **Talos v1.13.6**, which ships Linux 6.18.38. Follow the runbook below.

If you applied the nested-virtualization hotfix, you can now roll it back after upgrading. You may keep it as an extra hardening measure if a workload doesn't need nested virtualization, but it is no longer required for this CVE.

## Why the hotfix wasn't enough

The commonly suggested config mitigation — `machine.install.extraKernelArgs: [kvm_intel.nested=0, kvm_amd.nested=0]` — is **silently ignored on systemd-boot / UKI nodes** (the usual bare-metal UEFI case):

- `kvm_intel` / `kvm_amd` are built into the Talos kernel, so `modprobe.d` and runtime `/sys` writes don't apply (`/sys/module/kvm_intel/parameters/nested` is `0444`); `nested=` is settable only via the kernel command line.
- On systemd-boot the cmdline is baked into the signed UKI, so `extraKernelArgs` are dropped (Talos warns: `extra kernel arguments are not supported when booting using SDBoot`). `grubUseUKICmdline: false` only helps GRUB nodes.

That is precisely why "just disable nested virtualization" wasn't a universal answer, and why a kernel bump is the real fix.

## Runbook for Talos

### 1. Build an Image Factory schematic with your extensions

If your nodes use system extensions (drbd, zfs, firmware, GPU, ucode), declare them — [Image Factory](https://factory.talos.dev) assembles the stock installer plus the official extensions, no custom image build required.

```yaml
customization:
systemExtensions:
officialExtensions:
- siderolabs/drbd
- siderolabs/zfs
- siderolabs/amd-ucode
- siderolabs/intel-ucode
- siderolabs/amdgpu
- siderolabs/i915
- siderolabs/bnx2-bnx2x
- siderolabs/intel-ice-firmware
- siderolabs/qlogic-firmware
```

```bash
curl -sX POST --data-binary @schematic.yaml https://factory.talos.dev/schematics
# -> {"id":"<SCHEMATIC_ID>"}
```

Trim the extension list to what your cluster actually uses.

### 2. Upgrade node by node

```bash
talosctl -n <NODE_IP> upgrade \
--image factory.talos.dev/installer/<SCHEMATIC_ID>:v1.13.6
```

Roll one node at a time. On control-plane nodes, wait for etcd and your CSI/storage to be healthy between nodes. Talos only tests migrations between adjacent minors — from an old release, upgrade sequentially through each minor's latest patch rather than jumping straight.

### 3. Verify

```bash
talosctl -n <NODE_IP> version # Server: v1.13.6
talosctl -n <NODE_IP> read /proc/sys/kernel/osrelease # 6.18.38-talos
talosctl -n <NODE_IP> get extensions # your extensions present
```

`kvm_intel.nested` may stay `Y` — that's expected. The vulnerable path is fixed in the kernel.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the verification step CPU-neutral.

The post covers both Intel and AMD, but only names kvm_intel.nested. Tell AMD readers to check kvm_amd.nested instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/en/blog/2026-07-14-fixing-cve-2026-53359-januscape-talos-linux/index.md`
at line 105, Update the verification guidance in the blog post to be
CPU-neutral: mention checking kvm_intel.nested on Intel systems and
kvm_amd.nested on AMD systems, while preserving the statement that the nested
setting may remain enabled because the vulnerable kernel path is fixed.


## Ready installer (Cozystack extension set)

For the standard Cozystack extensions (drbd, zfs, amd/intel-ucode, amdgpu, i915, bnx2-bnx2x, intel-ice-firmware, qlogic-firmware), you can use this prebuilt schematic directly:

```
factory.talos.dev/installer/be66fdc8a38c2f517f33cba0a6daa7ab97ff87d51e8ca7d2160e45911ba09cf5:v1.13.6
```

## References

- [CVE-2026-53359 (Januscape) — NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-53359)
- [CVE-2026-46113 — NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-46113)
- [Talos bootloader / UKI cmdline](https://docs.siderolabs.com/talos/v1.13/platform-specific-installations/bare-metal-platforms/bootloader)
- [Talos Image Factory](https://factory.talos.dev)

### Join the community

- Telegram [group](https://t.me/cozystack)
- Slack [group](https://kubernetes.slack.com/archives/C06L3CPRVN1) (Get invite at [https://slack.kubernetes.io](https://slack.kubernetes.io))
- [Community Meeting Calendar](https://calendar.google.com/calendar?cid=ZTQzZDIxZTVjOWI0NWE5NWYyOGM1ZDY0OWMyY2IxZTFmNDMzZTJlNjUzYjU2ZGJiZGE3NGNhMzA2ZjBkMGY2OEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.