How to Check if Your Ubuntu Server Is Affected by a CVE

devopsdockersecurityself-hosting
How to Check if Your Ubuntu Server Is Affected by a CVE

To check a CVE on Ubuntu, run pro fix CVE-ID --dry-run, which names the affected package, says whether a fix exists, and reports whether a reboot is needed. Compare versions with Ubuntu's tracker rather than upstream, because Ubuntu backports fixes. For kernel flaws, also confirm which kernel is actually running.

The output below comes from Ubuntu 24.04 in a systemd-booted container under WSL2, run on November 5, 2026, so the running kernel wasn't an Ubuntu one. Security status changes daily, so treat the CVE details as a snapshot and run the commands yourself.

What Is the Fastest Way to Check a CVE?

pro fix comes with the Ubuntu Pro client, and it works without a subscription for anything in the standard repositories. Add --dry-run to see the result without installing anything:

sudo pro fix CVE-2026-109518 --dry-run
WARNING: The option --dry-run is being used.
No packages will be installed when running this command.
CVE-2026-109518: APT vulnerability
 - https://ubuntu.com/security/CVE-2026-109518

1 affected source package is installed: apt
(1/1) apt:
A fix is available in Ubuntu standard updates.
{ apt update && apt install --only-upgrade -y apt apt-utils libapt-pkg6.0t64 }

✔ CVE-2026-109518 is resolved.

Don't read that last line as your current status. In a dry run it describes what would happen, and apt was still the old version when this printed.

The middle of the output is what you want. These are the results I saw, and what each one means for you:

pro fix saysMeaningWhat to do
A fix is available in Ubuntu standard updatesYou are exposed and the patch existsRun it without --dry-run, or wait for unattended upgrades
A fix is coming soon. Try again tomorrow.You are exposed and no patch has shippedReduce exposure and check again daily
The update is already installed. A reboot is requiredThe fix is on disk but not runningReboot
The update is already installed, is resolvedThe package is patchedFor a kernel flaw, still check uname -r

How Do You Compare Versions by Hand?

Use the Ubuntu CVE tracker, and compare with dpkg, because these version strings don't sort the way they look:

installed=$(dpkg-query -W -f='${Version}' apt)
dpkg --compare-versions "$installed" ge 2.8.4ubuntu0.1 && echo patched || echo "needs update"

That printed needs update on 2.7.14build2 and patched on 2.8.4ubuntu0.1.

The changelog shows which CVEs a package fixed:

apt-get changelog apt | head -6
Get:1 https://changelogs.ubuntu.com apt 2.8.4ubuntu0.1 Changelog [518 kB]
apt (2.8.4ubuntu0.1) noble-security; urgency=medium

  * SECURITY UPDATE: Download verification bypass
    - methods/*.cc: Open target files exclusively
    - CVE-2026-109518

Don't compare against the upstream version. Ubuntu backports fixes, so openssh-server on my 24.04 machine is 1:9.6p1-3ubuntu13.20, and it still reports itself as OpenSSH 9.6. A scanner that reads only the SSH banner will flag fixes you already have, and the tracker is what settles it.

Why Are Kernel CVEs Different?

Because the fix doesn't apply until you reboot. Check what's running against what's installed:

uname -r
dpkg -l 'linux-image-[0-9]*' | grep ^ii
cat /var/run/reboot-required.pkgs

pro fix does read the reboot flag. With the flag present, pro fix reported the CVE as not resolved even though the package was installed:

(1/1) linux:
A fix is available in Ubuntu standard updates.
The update is already installed.

A reboot is required to complete fix operation.
✘ CVE-2026-31431 is not resolved.

Without the flag it reported the same CVE as resolved, and my test machine's running kernel wasn't that package at all. So uname -r is the check you can't skip.

By default, unattended upgrades won't reboot for you, which makes this the most common gap on otherwise patched servers.

Containers don't get their own kernel. docker run --rm alpine uname -r printed the host's kernel version, so a kernel flaw on the host applies to every container on it.

Are Your Docker Containers Patched?

Not by anything you do on the host. After patching apt on the server, I checked it inside a container from a pulled image:

dpkg-query -W -f='${Version}\n' apt
docker run --rm ubuntu:24.04 dpkg-query -W -f='${Version}\n' apt
2.8.4ubuntu0.1
2.8.3

Library fixes reach a container only when you rebuild its image from a fresh base and redeploy:

docker build --pull -t your-app:new .

A scanner can tell you what's stale, but pin it like anything else you pull. Trivy's own Docker Hub images were compromised in March 2026, including the latest tag, and Docker's advice after that was to pin images by digest and verify signed provenance where it's available.

What Ubuntu Doesn't Patch for You

pro security-status tells you how many packages come from somewhere else:

231 packages installed:
    226 packages from Ubuntu Main/Restricted repository
    1 package from Ubuntu Universe/Multiverse repository
    4 packages from third parties

On a Docker host, those third parties usually include Docker itself, and its updates aren't automatic either. Your deployment panel is in the same position. Dokploy and Coolify both published critical advisories in 2026, and Ubuntu's tools won't mention them.

Check apt list --upgradable for what's pending, and subscribe to the security advisories of anything else you run.

What About CVE-2026-98432 and the Other Recent Flaws?

Here is where three recent ones stood for Ubuntu 24.04 on November 5, 2026:

CVEWhat it isUbuntu priorityStatus on 24.04What to do
CVE-2026-98432Kernel IPv4 TCP flaw that can lead to remote code execution, CVSS 9.8CriticalVulnerable, fix in progress in 6.8.0-149.149Install and reboot as soon as it ships
CVE-2026-109518APT flaw that lets an on-path attacker get an unverified package installed, published November 4HighFixed in 2.8.4ubuntu0.1Update apt, unattended upgrades should pick it up
CVE-2026-31431, Copy FailKernel local privilege escalation, may allow container escapeHighFixed in 6.8.0-117.117Confirm you are running that kernel or newer

CVE-2026-98432 is the one to watch. The newest kernel in the 24.04 repositories on my test machine was 6.8.0-147.147, one that the tracker doesn't list as fixed, and pro fix reported this:

1 affected source package is installed: linux
(1/1) linux:
A fix is coming soon. Try again tomorrow.

1 package is still affected: linux
✘ CVE-2026-98432 is not resolved.

The tracker page lists a community-submitted nftables workaround, which isn't an official fix. It says the rule reduces the risk without fully preventing exploitation, that it breaks TCP connections relying on IPv4 options, and that containers with separate networking need their own rule. Read it there and test it before applying it, because the details may change.

CVE-2026-109518 needs an attacker who can tamper with your HTTP traffic to the archive, such as a malicious mirror or proxy, and a client with retries enabled, which is the default from 22.04 on. Ubuntu's default sources use http:// with signed metadata, as mine did, so don't assume the signature check alone covered you here. The tracker shows releases from 20.04 back get the fix only through Ubuntu Pro.

CVE-2026-31431, known as Copy Fail, is a good test of whether your reboots happen. Canonical's guidance is to upgrade the kernel and reboot, and it warns that the flaw may enable container escape on hosts running untrusted workloads. If uname -r shows a standard 24.04 kernel older than 6.8.0-117, you've been missing reboots for months. Other kernel variants have their own fixed versions on the tracker, such as 6.17.0-29.29~24.04.1 for the HWE kernel.

What Should You Do When a New CVE Drops?

Work through the same order each time:

  1. Run sudo pro fix CVE-ID --dry-run to find the package and whether a fix exists.
  2. Decide how exposed you are. A local flaw needs an attacker on the box, while a remote one in TCP or SSH doesn't.
  3. If a fix exists, install it now rather than waiting for the morning timer.
  4. If it's the kernel, reboot, then confirm with uname -r.
  5. If it's a library, check your images too, and rebuild them.
  6. If no fix exists yet, close unused ports at your provider firewall, then check again tomorrow.

Summary

pro fix gives you the fastest answer, and the tracker gives you the version to compare against. The mistakes are in the gaps around them: a patched kernel that was never rebooted, a container image built months ago, and third-party packages like Docker that Ubuntu doesn't update.

Check those three whenever a serious CVE lands.

The rest of the list is in my Ubuntu server hardening checklist, and my self-hosting course includes a maintenance routine for a server you run yourself.

Thanks for reading.

And stay awesome!


Frequently Asked Questions

How do I check if my Ubuntu server is affected by a CVE?

Run pro fix with the CVE ID and the dry-run option. It names the affected package, says whether a fix exists, and reports whether a reboot is needed. Then compare your installed version with the fixed version on the Ubuntu CVE tracker. You do not need an Ubuntu Pro subscription for fixes in the standard repositories.

Is my Ubuntu server affected by CVE-2026-98432?

Probably, until a fixed kernel ships. On November 5, 2026, the Ubuntu tracker listed 22.04, 24.04, and 26.04 as vulnerable with fixes in progress, and pro fix on 24.04 reported that a fix is coming soon. Check the tracker for the current status, then install the kernel and reboot when it arrives.

Why does my scanner say OpenSSH is vulnerable after updating Ubuntu?

Ubuntu backports security fixes without changing the upstream version number. A package such as 1:9.6p1-3ubuntu13.20 still reports OpenSSH 9.6, so a scanner that reads only the banner can flag fixes you already have. Compare the full package version with the Ubuntu tracker.

Do I need to reboot after a kernel security update?

Yes. Installing the package does not change the running kernel. Compare uname -r with the installed kernels, and check /var/run/reboot-required. Ubuntu Livepatch can patch some critical and high severity kernel flaws without a reboot, but Canonical says it does not replace rebooting.

Does updating the host fix CVEs inside Docker containers?

It fixes the kernel, because containers share it. It does not fix packages inside images. In testing, the host had the patched apt package while a container from the ubuntu:24.04 image still had the older one. Rebuild your images with a fresh base and redeploy.

Browse all Self-Hosting guides →
Loading comments...

Whenever you're ready, there are 5 ways I can help you:

  1. Pragmatic Self-Hosting: Learn to deploy and run your apps on a VPS with Dokploy and Tailscale. Keep administration private, automate releases, and practice restoring backups, with source code and a runbook you can reuse.
  2. Pragmatic Clean Architecture: Join 5,000+ students in this comprehensive course that will teach you the system I use to ship production-ready applications using Clean Architecture. Learn how to apply the best practices of modern software architecture.
  3. Modular Monolith Architecture: Join 2,800+ engineers in this in-depth course that will transform the way you build modern systems. You will learn the best practices for applying the Modular Monolith architecture in a real-world scenario.
  4. Pragmatic REST APIs: Join 1,900+ students in this course that will teach you how to build production-ready REST APIs using the latest ASP.NET Core features and best practices. It includes a fully functional UI application that we'll integrate with the REST API.
  5. Patreon Community: Join a community of 5,000+ engineers and software architects. You will also unlock access to the source code I use in my YouTube videos, early access to future videos, and exclusive discounts for my courses.

The .NET Weekly

One practical .NET tip, every Saturday.

Join 66,000+ engineers who read it. Free, and you can unsubscribe any time.