NEWS
X41 D-Sec GmbH Security Advisory: X41-2026-004
dm-verity can be bypassed in Debian live-boot
Severity Rating: Medium
Confirmed Affected Versions: >= 1:20220505
Confirmed Patched Versions: None
Vendor: Debian Live Maintainers
Vendor URL: https://tracker.debian.org/pkg/live-boot
Vendor Reference: Debian Bug report #1146422
Vector: Manipulating live medium
Credit: X41 D-Sec GmbH, JJ
Status: Public
CVE: CVE-2026-89169
CWE 347 – Improper Verification of Cryptographic Signature
CVSS Score: 4.1
CVSS Vector: CVSS:4.0/AV:P/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Advisory URL: https://www.x41-dsec.de/lab/advisories/x41-2026-004-debian-live-boot/
Summary and Impact
The live-boot package includes several dm-verity-related features, including the option to enforce signature checking of the file system.
However, when the .verity file is removed from the live medium, live-boot fails to make use of its dm-verity-related features.
Attackers could boot live images with modified file system contents, bypassing all file system authenticity and integrity checks,
which in turn allows for malicious code execution on the system.
It should be noted that while the live-boot package is maintained by the Debian project, Debian’s own live images do not use its dm-verity options.
Product Description
The live-boot package can be used to create a live system, i.e. an operating system that can boot without installation to a hard drive. Live systems are typically booted from media such as CDs, DVDs or USB sticks. Some may also boot over the local network or the Internet.
The package provides helpers that are executed in an early stage of the boot process (initramfs), including scripts to mount and, if desired, verify the file system’s authenticity and integrity using dm-verity. A typical use case of this verification is systems that use Secure Boot.
Analysis
live-boot supports the following, dm-verity-related kernel command-line parameters (see documentation):
dm-verity-oncorruption=ignore|panic|restart
Results in the chosen option when a corrupted dm-verity device is encountered.dm-verity-root-hash=IMAGE:ROOTHASH,IMAGE2:ROOTHASH2 ... IMAGEn:ROOTHASHn
Allows pinning the root hash on the kernel command linedm-verity-enforce-roothash-signature
Enforces that the root hash has to be checked against a signature (.roothash.p7s).
The signature is checked against the keyring (such as Secure Boot keys taken from UEFI).
A typical secure live boot medium could look like this:
/live
├── vmlinuz
├── initrd
├── filesystem.squashfs
├── filesystem.squashfs.verity
├── filesystem.squashfs.roothash
└── filesystem.squashfs.roothash.p7s
And booting the system would work as follows:
- The bootloader is signed with UEFI Secure Boot keys
- UEFI verifies and loads the bootloader
- The bootloader verifies the kernel (
vmlinuz) and initramfs (initrd) - Bootloader loads the kernel with the baked-in kernel command line (including the dm-verity parameters mentioned above)
- Initramfs mounts the root file system (
filesystem.squashfs), utilizing dm-verity to verify it
Without the dm-verity verification, the file system could be modified and the attacker would effectively gain control over the system.
X41 found that all of the dm-verity-related parameters are ignored by live-boot when removing the .verity file, resulting in none of mount(8)’s verity options being used.
The authenticity and integrity checks are thus skipped, allowing modifications of the block device and its file system.
The relevant live-boot source code can be found at /components/9990-overlay.sh:112-114:
# Setup dm-verity support if a device has it supported
hash_device="${image}.verity"
if [ -f ${hash_device} ]
then
log_begin_msg "Start parsing dm-verity options for ${image}"
backdev_roothash=$(get_backing_device ${hash_device})
verity_mount_options="-o verity.hashdevice=${backdev_roothash}"
root_hash=$(get_dm_verity_hash ${imagename} ${DM_VERITY_ROOT_HASH})
valid_config="true"
case $(mount --version) in
*verity*)
;;
*)
valid_config="false"
log_warning_msg "mount does not have support for dm-verity. Ignoring mount options"
;;
esac
if [ -n "${root_hash}" ]
then
verity_mount_options="${verity_mount_options} -o verity.roothash=${root_hash}"
# Check if the root hash is saved on disk
elif [ -f "${image}.roothash" ]
then
verity_mount_options="${verity_mount_options} -o verity.roothashfile=${image}.roothash"
else
valid_config="false"
log_warning_msg "'${image}' has a dm-verity hash table, but no root hash was specified ignoring"
fi
Workarounds
Possible workarounds may include using dm-mod.create (see this blog post for an example), or manually patching the initramfs.
Non-Workarounds
The dm_verity.require_signatures=1 (see modinfo dm_verity) kernel command-line parameter does not provide a workaround, as the dm_verity module is not used without the .verity file present.
Validating the existence and/or integrity of the .verity, .roothash, or .roothash.p7s files in the bootloader (for example, using GRUB’s verify_detached) does not offer sufficient protection, as the file can be manipulated after the check. The attacker likely controls the boot medium and could present the files to the bootloader, but then delete or conceal them when live-boot runs (Time of Check / Time of Use).
Timeline
2026-04-30 Issue identified during audit for an X41 customer
2026-05-04 Issue reported to X41 customer
2026-05-11 Issue reported to Debian Security Team, asked about CVE assignment process
2026-05-16 Acknowledgment from Debian Security Team and inclusion of live-boot maintainers
2026-07-03 Debian Security Team suggests filing against public bug tracker
2026-07-06 Acknowledgment from live-boot maintainer
2026-09-01 Debian Bug report #1146422 filed; CVE requested from Debian CNA
2026-09-02 Debian CNA referred to MITRE as Debian itself not affected; CVE requested from MITRE
2026-09-21 Advisory released
LLM usage
No LLMs were used in finding the bug or writing this text.