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 line
  • dm-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.