📖 ~4 min read • Source: Debian Security Tracker
Related CVEs: CVE-2015-1330
Upstream summary: unattended-upgrades before 0.86.1 does not properly authenticate packages when the (1) force-confold or (2) force-confnew dpkg options are enabled in the DPkg::Options::* apt configuration, which allows remote man-in-the-middle attackers to upload and execute arbitrary packages via unspecified vectors.
Table of contents
Symptom & Impact
Nothing visibly changes on a Debian 13 host until unattended-upgrades is next invoked: it runs, exits and leaves no daemon behind, so there is no restart loop or service log to watch. Exposure is per-invocation, and the invocations that matter are the unattended ones — cron jobs, backup and deployment scripts, CI runners, and anything passing attacker-influenced input such as a remote URL, a supplied archive or an untrusted filename. Where unattended-upgrades is run under sudo or from a privileged job, the same flaw becomes local privilege escalation. unattended-upgrades ships command-line programs that run when invoked and then exit, so there is no unit to restart — systemctl and journalctl -u have nothing to act on; only the next invocation matters.
Environment & Reproduction
Reproduction targets Debian 13. Confirm release with cat /etc/debian_version and lsb_release -a, and the currently installed package with dpkg -l unattended-upgrades and apt-cache policy unattended-upgrades. Capture system state with sudo reportbug unattended-upgrades if you need to file upstream. Trigger the workflow that exposes unattended-upgrades while collecting journalctl -b, /var/log/apt/history.log, and dpkg -l output.
Root Cause Analysis
Root cause is tracked at Debian Security Tracker. The Debian Security Team shipped fixes in the corresponding unattended-upgrades point release for Debian 13; running an outdated build leaves the host exposed to the failure modes referenced above. Correlate journalctl --since with apt history (/var/log/apt/history.log) and any kernel taint flags in /proc/sys/kernel/tainted to isolate the originating change.
Quick Triage
Quick triage: sudo apt update && apt list --upgradable, sudo nft list ruleset (or sudo iptables -L), and sudo dpkg --audit. For kernel issues review journalctl -k --since "1 hour ago".
Step-by-Step Diagnosis
1) systemctl --failed. 2) journalctl -xe and . 3) Validate firewall: sudo nft list ruleset or sudo iptables -L -n -v. 4) dpkg -V unattended-upgrades for integrity. 5) sudo apt install --reinstall unattended-upgrades if files were tampered. 6) Correlate findings with /var/log/apt/history.log, /var/log/dpkg.log, and Debian Security Tracker to pin the change that introduced the regression.
Solution – Primary Fix
Primary fix: apply the corrective apt transaction documented in Debian Security Tracker. Typical commands: sudo apt update, sudo apt -y install --only-upgrade unattended-upgrades (or sudo unattended-upgrade -v), then dpkg -l unattended-upgrades to validate the new build is installed. For kernel advisories add sudo reboot.
Need help rolling this patch across a Debian fleet? Our IT Solutions & Services team manages Debian patch windows with zero-downtime change controls. Get in touch for a free consultation.
Solution – Alternative Approaches
Alternatives include pinning a known-good version via /etc/apt/preferences.d/unattended-upgrades.pref, holding the package with sudo apt-mark hold unattended-upgrades, rolling back with sudo apt install unattended-upgrades=<old-version>, switching firewall backends between iptables-legacy and nftables via update-alternatives --config iptables, or applying the patch from the security archive only — deb debian-13-security main contrib non-free — while delaying the full point-release upgrade.
Verification & Acceptance Criteria
Acceptance: dpkg -l unattended-upgrades shows the expected fixed version is active shows no errors, apt list --upgradable no longer lists the advisory, sudo nft list ruleset matches the intended policy, and the original reproduction steps for unattended-upgrades no longer trigger the failure across two consecutive runs.
Rollback Plan
Capture state with apt list --installed > /root/apt-pre.txt and dpkg --get-selections > /root/dpkg-pre.txt. To revert, run sudo apt install --allow-downgrades unattended-upgrades=<old-version> and reload . Reboot if the kernel or initramfs changed and re-verify symptoms. Where LVM snapshots are in use, sudo lvconvert --merge /dev/<vg>/preupgrade is the fastest rollback path.
Prevention & Hardening
Prevent recurrence by enabling unattended-upgrades with Unattended-Upgrade::Origins-Pattern tuned to origin=Debian,codename=${distro_codename},label=Debian-Security, subscribing to debian-security-announce, mirroring through a local apt-mirror or aptly repo for controlled rollouts, version-locking sensitive packages, and monitoring file integrity with debsums -c or aide --check. Apply CIS Debian hardening and keep needrestart installed so service restarts happen automatically after library upgrades.
Related Errors & Cross-Refs
Related issues that commonly surface alongside unattended-upgrades: apt lock contention (dpkg --configure -a), systemd unit ordering cycles, firewall rule drift, and kernel taint flags in cat /proc/sys/kernel/tainted. See sibling common-problem articles in this Debian 13 series for adjacent failure modes.
View all debian-13 tutorials on the Tutorials Hub →
Browse all common problems & solutions on the Tutorials Hub.
References & Further Reading
Primary reference: Debian Security Tracker. Supporting docs: Debian Administrators Handbook, man apt, man systemctl, man nft, man iptables, man journalctl, man debsums, the Debian Security Tracker at security-tracker.debian.org, and Debian Security FAQ at debian.org/security/faq. Review /usr/share/doc/unattended-upgrades/ for component-level notes implicated in unattended-upgrades.