APT can check a package, then install a different one as root, Debian says of CVE-2026-109518
Debian says a man-in-the-middle attacker can replace an APT package after verification and run code as root. By this site's count, 4 of the 8 Ubuntu releases patched are exposed by default because of one retry setting. CISA recorded no exploitation on 4 November. Read 8 November 2026.
By Parminder Kumar Sharma · LinkedIn · · 15 min read
4 of 8 Ubuntu releases are exposed by default, and one setting decides it (derived)
Ubuntu's notice USN-8996-1 patches APT on 8 releases. Canonical's blog post says "Ubuntu 22.04 LTS (Jammy Jellyfish) and newer releases are affected by default". Counting the notice's own table, that is 22.04 LTS, 24.04 LTS, 26.04 LTS and 26.10: 4 of 8 (derived). The other 4, from 14.04 LTS to 20.04 LTS, are exposed only where someone has set Acquire::Retries above zero.
The flaw is CVE-2026-109518. Debian's DSA 6607-1 describes the result in one line: a "man-in-the-middle attacker" can "replace a package after verification, resulting in the execution of arbitrary code as root". Ubuntu says the signature scheme "normally secures package mirrors". On Debian's account the check ran, and the file changed afterwards.
That count says nothing about any attack. As read at 09:32 UTC on Sunday 8 November 2026, CVE-2026-109518 is not in CISA's Known Exploited Vulnerabilities catalogue (version 2026.11.06, released 6 November at 19:44 UTC, 1,769 entries). CISA's enrichment entry in the CVE record gives Exploitation "none", time stamped 4 November. Debian and Ubuntu do not say either way whether anyone has used it. The count also does not say how many machines fetch packages over plain HTTP, how many have an attacker anywhere near that path, or how many of the older machines have retries switched on.
The fixes were published on 4 November, 4 calendar days before this read (derived). Canonical reserved the CVE number on 12 October, 23 calendar days before publication (derived); no primary says when the flaw was reported. Canonical sells Ubuntu Pro, the channel through which the fixes for the four older releases are delivered.
What happened, in the words of the people who fixed it
A researcher reported the flaw to APT's maintainers; Canonical says it was "responsibly disclosed". The CVE record, assigned by Canonical as the numbering authority, titles it "APT RCE via hard link reuse" and classes it as CWE-62 (UNIX hard link) and CWE-367 (time-of-check time-of-use race condition). The record sets out four conditions (the count is derived): an attacker able to manipulate the HTTP traffic "(including a malicious mirror or proxy)"; traffic "triggered by a package install"; a client that will "follow redirects and retry the download of package files"; and a retry setting above zero.
Three primaries describe the middle of the chain, each in different words:
- Debian's advisory: "APT can merge two different package downloads after an HTTP redirect gives them the same URI", then "Improper file handling when resuming an HTTP download" allows the replacement.
- APT's maintainers, in their security post: redirects and "standard transient HTTP server errors that cause APT to retry downloads", leading APT to "override existing hardlinks with a chosen payload".
- Ubuntu's notice: "APT incorrectly handled hard links when encountering redirects and retrying package downloads".
Root follows from what a package is. Ubuntu says that when a system installs a .deb "it executes the package's scripts with root privileges". The maintainers call the result "the potential for remote code execution".
No primary prints the exact sequence inside APT. Debian's tracker page names the fixing commit. This site has not read the patch and goes no further than the record.
Scope, on Canonical's word: the flaw is in the HTTP backend and "affects any APT-based frontend", including aptitude and Ubuntu's graphical tools. It "does not affect software installation via snap packages", and "Other transport methods (such as FTP) are not affected".
The order of publication on 4 November, in UTC: the maintainers' post at 12:00:16 (printed as 13:00:16 +0100), Debian's advisory at 12:07:32, Debian's LTS advisory at 12:46:36, the CVE record at 15:49:02. The maintainers' announcement that updates were available came 3 hours 48 minutes 46 seconds before the CVE record (derived).
A newer default widened the door. It did not build it
The record says "the value 3 is the default starting with Debian 12 (bookworm) and Ubuntu 22.04 LTS (Jammy Jellyfish), so older releases are unaffected in a default configuration". The tempting reading is that a recent default created the problem. The primaries do not support that:
- The record's affected ranges start at version 0 for both Debian and Ubuntu, well before the default changed.
- The maintainers say retries have "only been the default since APT 2.3.2", then warn that "many user scripts may have been using it in older releases".
- Ubuntu patched back to 14.04 LTS, and says older releases are "only affected if the Acquire::Retries APT configuration setting is set to a non-zero value".
The accurate version: the setting moved exposure from people who opted in to everyone on a current release. "Unaffected in a default configuration" describes a fresh install. It does not describe a machine that has spent years under a provisioning script.
Fixed apt version per release, as printed by USN-8996-1, DSA 6607-1, DLA 4880-1 and Debian's tracker, read 8 November 2026. The exposure column is derived from the CVE record and Canonical's blog.
| Release | Fixed version and channel | Exposed by default? |
|---|---|---|
| Ubuntu 26.10 | 3.3.3ubuntu0.1, standard support | Yes |
| Ubuntu 26.04 LTS | 3.2.1ubuntu0.1, standard support | Yes |
| Ubuntu 24.04 LTS | 2.8.4ubuntu0.1, standard support | Yes |
| Ubuntu 22.04 LTS | 2.4.15ubuntu0.1, standard support | Yes |
| Ubuntu 20.04 LTS | 2.0.12+esm1, Ubuntu Pro | No, only with retries set |
| Ubuntu 18.04 LTS | 1.6.19+esm1, Ubuntu Pro | No, only with retries set |
| Ubuntu 16.04 LTS | 1.2.36+esm1, Ubuntu Pro with Legacy add-on | No, only with retries set |
| Ubuntu 14.04 LTS | 1.0.1ubuntu2.24+esm4, Ubuntu Pro with Legacy add-on | No, only with retries set |
| Debian 12 bookworm | 2.6.2, DLA 4880-1 | Yes |
| Debian trixie (stable) | 3.0.4, DSA 6607-1 | Yes, by the record's "starting with" |
| Debian forky | 3.3.6, tracker marks fixed | Yes, by the record's "starting with" |
| Debian sid | 3.3.7 current; tracker lists 3.3.6 as the fix | Yes, by the record's "starting with" |
The ranges, counted. The record lists 21 affected ranges (derived): 13 under Debian and 8 under Ubuntu. Of those, 20 end in a lessThan value, which is the fixed version. One does not: Debian's entry from 1.8.3 ends lessThanOrEqual 1.8.5. That entry has an upper bound and no stated fix. The maintainers' list of fixed branches also goes from 1.8.2.4 straight to 2.0.12. No primary says why. Treat it as affected through 1.8.5 with no fixed version on the record.
Two traps for anyone reading the record with a scanner (this site's reading). First, the suffix. 6 of Ubuntu's 8 fixed strings are a Debian fixed number plus a suffix, for example 2.4.15 for Debian and 2.4.15ubuntu0.1 for Ubuntu, so a bare 2.4.15 on Ubuntu sits below the fix. The 3.3 series differs outright: 3.3.6 under Debian and 3.3.3ubuntu0.1 under Ubuntu. Match each host against its own distribution's entry. Second, the gaps. Each vendor's defaultStatus is "unaffected", so a version between listed ranges passes a literal reading. APT 2.3.2, the version the maintainers name as the start of the default, falls in no listed range. No primary says whether such versions are safe; the maintainers list only stable branches.
Who scored what, and what AT:P and UI:P mean here
Who assigned what. CVE record, NVD record, CISA catalogue, Ubuntu's CVE page and the APT maintainers' post, all read 8 November 2026.
| Who | What they recorded | Note |
|---|---|---|
| Canonical, as numbering authority | CVSS 4.0 base 7.7 High | The only CVSS score in the record |
| Ubuntu | Priority High | Its page says to see the score for the reason |
| APT's maintainers | "critical file verification bypass" | A label, with no score |
| CISA, enrichment entry | Exploitation none, Automatable no, Technical Impact total | Time stamped 4 November; entry updated 5 November |
| CISA, KEV catalogue | Not listed | Version 2026.11.06, as read at 09:32 UTC on Sunday 8 November 2026 |
| NVD | Status "Received" | Shows Canonical's score as Secondary; no NVD assessment of its own |
| Debian | No score in DSA 6607-1, DLA 4880-1 or the tracker page | Recommends upgrading |
AT:P, Attack Requirements: Present. FIRST's CVSS 4.0 specification uses this where "The successful attack depends on the presence of specific deployment and execution conditions", and gives two examples: "A race condition must be won" and network injection, meaning "vulnerabilities requiring an on-path attacker". Both fit a record that cites a time-of-check race and an attacker on the HTTP path. The value records that the attack cannot be launched from just anywhere.
UI:P, User Interaction: Passive. FIRST describes "limited interaction by the targeted user" and says "These interactions would be considered involuntary". One of its examples is "using an application which generates traffic over an untrusted or compromised network". Here, the record says the traffic is "triggered by a package install", and Canonical says an attacker can act "only if the target system attempts to install a .deb package".
Canonical publishes no reasoning for either value, so that mapping is this site's reading. One consequence is an inference, and is labelled as one: FIRST's definition allows "a separate user (or user-initiated process)", and Canonical says unattended upgrades are "enabled by default for Ubuntu 16.04 LTS onwards" and "Applies new security updates every 24 hours automatically". Passive here may mean a timer rather than a person. Canonical does not say whether those automatic runs are exposed before the fix lands.
Labels doing the work of a control
"Verified." Canonical says the signature scheme "remains a much stronger integrity protection" than TLS, and nothing here says the cryptography failed. A signature check protects the file that was checked. If a different file is installed, the check has answered the wrong question.
"Unaffected in a default configuration." A default belongs to a clean install. The maintainers' warning about user scripts is the reason to read your own configuration instead of the release number.
"HTTPS." Canonical's sentence is exact: "enabling TLS provides protection against this particular vulnerability when exploited by an on-path attacker". Its zero retries statement is wider, covering a case "whether exploited by an on-path attacker or a potentially malicious mirror". Encrypted delivery from a malicious mirror is still delivery from that mirror, so this site reads the HTTPS advice as covering the path and not the mirror. Canonical does not spell that out, and Debian's pages do not mention HTTPS at all.
What the primaries state, and what they do not
Stated and not stated, from the CVE record, DSA 6607-1, DLA 4880-1, the APT maintainers' post, USN-8996-1 and Canonical's blog, read 8 November 2026.
| Question | Stated | Not stated |
|---|---|---|
| Has it been used in attacks? | CISA: Exploitation none, 4 November. Not in KEV at this read. | Any statement from Debian or Ubuntu either way |
| Is there a public proof of concept? | None of the primaries mentions one. The CVSS threat metric is not defined. | Whether one exists. This site did not search for one. |
| Which mirrors or proxies? | The category: "a malicious mirror or proxy" | Any named mirror, proxy or network |
| How many machines use plain HTTP? | Some community and country mirrors lack HTTPS, says Canonical | Any count, for Debian or Ubuntu |
| Does HTTPS remove the exposure? | Canonical: yes for an on-path attacker | Debian says nothing. Canonical does not address TLS against a malicious mirror or a proxy that ends TLS. |
| Does zero retries stop it? | Canonical: "no downloads are retried and the vulnerability cannot be exploited" | Debian gives no workaround in DSA 6607-1, DLA 4880-1 or the maintainers' post |
| Are older releases safe? | In a default configuration, yes, says the record | How many older machines set retries |
| Derivative distributions? | The record says "derivative Linux distributions" are in scope | Which ones, and their fixed versions |
| Container and golden images? | Nothing | Whether images carrying old apt need rebuilding, though the logic applies |
| How would you tell afterwards? | Nothing | No indicator, log line or check for a past swap |
Where the sources differ
These stay as differences. This site does not resolve them.
Differences between the primaries, read 8 November 2026.
| Point | One source | Another |
|---|---|---|
| Severity | APT's maintainers: "critical" | Canonical: CVSS 7.7 High, Ubuntu priority High |
| Certainty | Debian: "resulting in the execution of arbitrary code as root" | Ubuntu's notice: "could possibly use"; maintainers: "the potential for" |
| What happens to verification | Debian: replaced "after verification" | Canonical: installs "even if it fails signature verification"; record: "unverified package" |
| Retry or resume | Debian: "resuming an HTTP download" | Record, Ubuntu and maintainers: retry |
| Fixed version, 3.3 series | Debian: 3.3.6 | Ubuntu: 3.3.3ubuntu0.1 |
| Workaround source | Canonical: a zero retries option on its own update commands | A participant on oss-security, not Debian: an apt.conf line that "may" help |
What else the update carries, and what it leaves out
Debian's advisory says "Additionally this update addresses several out-of-bounds access issues". The maintainers' post lists 6 bundled fixes (derived count) and says "We do not expect any direct security impact outside denial of service" of third party applications that parse files across a privilege boundary, such as PackageKit. It also records a memory exhaustion fix for series 2.6, 2.8 and 3.0.
Two things are deliberately not fixed, on the maintainers' word. "Several out-of-bounds memory accesses exist in apt-ftparchive" stay, because of fix complexity and little testing in practice. And "An out-of-bounds access in the parser for build dependencies has not been fixed", because a rewrite carries too much regression risk. Anyone feeding untrusted .deb files to apt-ftparchive, or untrusted build dependency strings to that parser, should not assume this update covers them.
What to do, in order
Steps 1 to 4 are Canonical's advice for Ubuntu, except where marked. Debian's only instruction is "We recommend that you upgrade your apt packages". The rest are this site's suggestions.
Take this with you
Ranked actions
- Upgrade now, with retries off for that run. Canonical's order is a full upgrade with Acquire::Retries set to zero, because the patch arrives through the client that needs patching. The exact command is under Technical details.
- If a full upgrade is not possible, upgrade the apt source package alone, with retries still at zero. Canonical gives this as the fallback. On Debian the same option is this site's suggestion; Debian's pages do not mention it.
- Confirm the installed version against the table above, using the full version string including any suffix. Canonical prints a command to list it.
- Where you cannot rule out an attacker on the path, move sources to HTTPS before updating, as Canonical advises. Run apt update afterwards and watch for errors, because some community and country mirrors do not support HTTPS. Debian's pages do not address HTTPS.
- This site's suggestion: on Ubuntu 20.04 LTS and older, or Debian older than 12, search apt configuration and provisioning scripts for Acquire::Retries. Those machines are exposed only if it is set, and the fix on the older Ubuntu releases needs Ubuntu Pro.
- This site's suggestion: list what sits on the path between each host and its archive: forward proxies, caching mirrors, build and CI runners, and any network you do not run.
- This site's suggestion: rebuild container base images and golden images that carry old apt, because a patched host does not patch the image it launches. No primary addresses images.
- This site's suggestion: do not count unattended upgrades as proof. Canonical says they apply within 24 hours; check the version on a sample of hosts.
- This site's suggestion: make scanners use each distribution's own entry, and handle separately any apt version falling in a gap between the listed ranges.
Technical details
The condition. This is the record's sentence on the setting. It lives in APT configuration as Acquire::Retries. A defender checks whether any host sets it above zero, or inherits the default of 3.
It requires the client to have a non-zero Acquire::Retries configuration setting; the value 3 is the default starting with Debian 12 (bookworm) and Ubuntu 22.04 LTS (Jammy Jellyfish), so older releases are unaffected in a default configuration
The score. The vector as Canonical assigned it. AT:P and UI:P are explained above. Feed it to whatever computes your own environmental score.
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CISA's enrichment. The three decision points in the record. Exploitation carries a date and can change, so re-read it rather than quoting this copy later.
[
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
]
timestamp: 2026-11-04T00:00:00+00:00
The odd entry. The one range of 21 with no fixed version. Note lessThanOrEqual where every other entry has lessThan.
{
"status": "affected",
"version": "1.8.3",
"lessThanOrEqual": "1.8.5",
"versionType": "dpkg"
}
Fixed versions. Compare with the installed package. Layout is this site's; the version strings are as printed.
Ubuntu (USN-8996-1)
26.10 stonking apt 3.3.3ubuntu0.1
26.04 LTS resolute apt 3.2.1ubuntu0.1
24.04 LTS noble apt 2.8.4ubuntu0.1
22.04 LTS jammy apt 2.4.15ubuntu0.1
20.04 LTS focal apt 2.0.12+esm1
18.04 LTS bionic apt 1.6.19+esm1
16.04 LTS xenial apt 1.2.36+esm1
14.04 LTS trusty apt 1.0.1ubuntu2.24+esm4
Debian
bookworm (security) 2.6.2 DLA-4880-1
trixie (security) 3.0.4 DSA-6607-1
forky 3.3.6 tracker status: fixed
sid 3.3.7 tracker status: fixed (fixed version listed for unstable: 3.3.6)
Canonical's commands. Listing the installed version, then the recommended upgrade, then the fallback. These are Canonical's, for Ubuntu, and each sets retries to zero for that run only.
apt list --installed '?source-package(^apt$)'
sudo apt update && sudo apt upgrade -o Acquire::Retries=0
sudo apt update && sudo apt install -o Acquire::Retries=0 --only-upgrade '?source-package(^apt$)'
Canonical's HTTPS switch. Rewrites Ubuntu archive URLs in your sources files. Canonical notes it does not touch other mirrors or repositories. Run apt update afterwards.
sudo sed -Ei 's!http://((([a-z]+\.)?archive|security|ports)\.ubuntu\.com)!https://\1!' /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources
The fixing commit. Debian's tracker names it for 3.3.6. Maintainers of derivative distributions can use it to check whether they carry the fix. This site has not read the commit.
5af16a8ad0f155233dfb10b7c92ad1903112ef79 (3.3.6)
A participant on the oss-security list separately suggested adding a zero retries line to apt.conf and wrote that it "may mitigate the issue until you upgrade". That is not Debian's or Ubuntu's advice. No primary prints attack traffic or exploit steps, and none appears here.
The question Debian and Ubuntu leave open
Every primary tells you how to stop this from now on. None tells you how to find out whether it already happened. If a machine installed a swapped package before it was patched, the package would have passed through the normal install path with root privileges, and neither Debian nor Ubuntu names any indicator, log line or check that would show it. For a host that has fetched packages over a network you do not control: what evidence do you have that the package you installed is the package you checked?
Key facts
Sources
- PrimaryCVE record for CVE-2026-109518: description, affected ranges, CVSS 4.0 vector and the CISA enrichment container. Read in fullCVE Program (assigned by Canonical)accessed 2026-11-08
- PrimaryDSA 6607-1 apt security update, 4 November 2026: the mechanism and the trixie fix. Read in fullDebianaccessed 2026-11-08
- PrimaryDLA 4880-1 apt security update, 4 November 2026: the bookworm fix. Read in fullDebian LTSaccessed 2026-11-08
- PrimaryAPT-2026-11-01 security update, 4 November 2026: the retry condition, fixed branches, bundled and excluded fixes. Read in fullAPT maintainers (Debian deity list)accessed 2026-11-08
- PrimaryTracker page for CVE-2026-109518: fixed versions per branch and the named commit. Read in fullDebian security trackeraccessed 2026-11-08
- PrimaryTracker page for the apt source package: versions per branch. Read in fullDebian security trackeraccessed 2026-11-08
- PrimaryUSN-8996-1 APT vulnerability, 4 November 2026: fixed versions for 8 releases. Read in fullCanonical (Ubuntu)accessed 2026-11-08
- PrimaryUbuntu's page for CVE-2026-109518: priority, status per release and the CVSS breakdown. Read in fullCanonical (Ubuntu)accessed 2026-11-08
- PrimaryCVE-2026-109518 APT vulnerability fixes available, 4 November 2026: exposure by release, HTTPS, zero retries and commands. Read in fullCanonical (Ubuntu)accessed 2026-11-08
- PrimaryNVD record for CVE-2026-109518: status Received, Canonical's score listed as SecondaryNIST NVDaccessed 2026-11-08
- PrimaryKnown Exploited Vulnerabilities catalogue, version 2026.11.06: CVE-2026-109518 not listedCISAaccessed 2026-11-08
- PrimaryCVSS v4.0 specification: definitions of Attack Requirements and User InteractionFIRSTaccessed 2026-11-08
- Reported byList post of 4 November 2026 relaying the advisory and suggesting a zero retries setting. Not Debian's or Ubuntu's adviceoss-security list (Openwall archive)accessed 2026-11-08


