Re: [yocto-patches] [meta-security][PATCH] dm-verity: add PKCS#7 root hash signature support

Ayoub Zaki <[email protected]>
Newsgroups org.yoctoproject.lists.yocto-patches
Message-ID <[email protected]>
Hi Ahmad,

thanks for the review.

On 4/24/26 09:19, Ahmad Fatoum wrote:
> Hello Ayoub,
> 
> Thanks for your patch.
> 
> On 4/22/26 19:34, Ayoub Zaki wrote:
>> On 4/22/26 18:54, Scott Murray via lists.yoctoproject.org wrote:
>>> On Wed, 22 Apr 2026, Ayoub Zaki via lists.yoctoproject.org wrote:
>>>> On 4/21/26 22:45, Scott Murray via lists.yoctoproject.org wrote:
>>>>> On Mon, 20 Apr 2026, Ayoub Zaki via lists.yoctoproject.org wrote:
>>>>>> +Root Hash Signature Verification
>>>>>> +--------------------------------
>>>>>> +By default, dm-verity stores the root hash as plain text in the initramfs
>>>>>> +at /usr/share/misc/dm-verity.env. This creates a TOCTOU (time-of-check to
>>>>>> +time-of-use) vulnerability: an attacker who can modify the initramfs can
>>>>>> +replace both the root hash and the filesystem image, defeating dm-verity.
>>>>>
>>>>> Just to double check I'm clear wrt the attack scenario, this only works
>>>>> if the initramfs is outside the secure boot chain, i.e. stored as a
>>>>> separate file from the kernel?  I'm thinking that perhaps secure boot
>>>>> with FIT images avoids the problem, and that's not uncommon these days.
>>>>> And I'm guessing initramfs bundled with the kernel might also avoid TOCTOU
>>>>> w/o a more elaborate attack.  If so, it might be good to be more explicit
>>>>> here wrt the insecure scenario.
> 
> I agree.
> 
>>>> The scenario this addresses is precisely when the initramfs is verified at an
>>>> earlier boot stage (e.g. bundled with the kernel or part of a signed FIT
>>>> image) but there is a multi-second window between that verification and the
>>>> actual use of the root hash where memory contents can be modified:The
>>>> specific techniques to exploit this window vary depending on hardware (DMA
>>>> attacks, JTAG, etc.). I'll clarify this in the documentation so readers
>>>> understand the attack surface more precisely.
>>>
>>> Gotcha.  I'm all for your changes as they will add another layer of
>>> defense, but I am curious if a determined attacker with that capability
>>> might also be able to flip off the signature verification flag, or
>>> potentially overwrite the kernel keyring?
> 
> One wouldn't even need to go for the kernel keyring. The attacker can just
> directly exchange code in the kernel image itself. It lies there in RAM
> the same way as the initramfs and in the same time window.
> 
> Critically, a vast number of systems doesn't employ physical ASLR, so
> an attacker knows beforehand exactly what memory address the relevant
> parts of the kernel will be at.
> 
> 
>>>
>>> [snip]
>>
>> That's a good question : yes in theory but the difference is the attack magnitude: replacing a plain-text hash in RAM location is trivial compared to locating and patching kernel data structures in memory at runtime.
> 
> An attacker that has read/write access to DRAM can trivially search the
> page cache for an executable page of any UID 0 binary at runtime and modify
> it all the same, no? I fail to see how one is harder than the other.
> 
>> On top of that standard kernel hardening via CONFIG_STRICT_KERNEL_RWX
> 
> For the described scenario here, the attacker can directly manipulate
> physical memory, so their memory accesses wouldn't even go through the MMU
> and thus CONFIG_STRICT_KERNEL_RWX is without consequence.
> 
>> IOMMU/SMMU makes those structures significantly harder to tamper with.
> 
> Either:
> 
> - IOMMU/SMMU prevents access to kernel, so it should equally prevent access to initramfs
> - IOMMU/SMMU does not prevent access to kernel, so it would not prevent access to initramfs
> 
> The situation of having initramfs and kernel in the same memory region during
> bootloader/kernel startup, but assuming only initramfs can be modified by not the
> kernel image itself sounds a bit contrived.
> 
> Frankly, I don't see how for signed FIT configurations this offers a security
> benefit.
> 


You're right about the RAM symmetry STRICT_KERNEL_RWX IOMMU don't really 
help once you've granted the attacker DMA or JTAG.

There's a also other cases where the patch could help and it doesn't 
need RAM tampering. where root hash comes from the kernel cmdline via a 
unsigned Bootloader enviroments. An attacker could tamper the env 
offline  with their own root hash and craft a matching rootfs.
Even the secure boot chain is not interupted, dm-verity happily sets up 
against the attacker's hash and mounts their rootfs.

With CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG the kernel refuses an unsigned 
hash regardless of where it came from (enforcment via  dm_verity 
require_signatures=1 should be set)
So defense in depth not a replacement for hardware mitigations.
I can reframe the threat model in a v3 an maybe drops the RAM arguments.


> 
> I agree though that if your initramfs is outside the secure boot chain and
> it can't be easily aadded into it, this can be a workable solution.
> 
> Just keep in mind that without rotating the keys every time, this will allow
> mix-n-match attacks, e.g. an attacker could dig out a vulnerable initramfs
> and inject it into a boot flow where all other components are of the newest
> version. If that's something you want to prevent, you could equally well
> compile the initramfs into the kernel and not need any signing at all...
> 


> Cheers,
> Ahmad
> 

Mit freundlichen Grüßen / Kind regards

-- 
Ayoub Zaki
Embedded Systems Consultant

Vaihinger Straße 2/1
D-71634 Ludwigsburg

Mobile   : +4917662901545
Email    : [email protected]
Homepage : https://embetrix.com
VAT No.  : DE313902634
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.