Hi everyone, new User here.

First let me explain how we are using U-Boot:
NXP MX6 Hardware, load FIT Image with Kernel, DTB, RamFS as one FIT-Image from 
MMC, bootm
To secure the FIT we are hashing all 3 Parts using sha256 und signing the 
Config with our Certificate.
In short we are following this process:

1.       Generate Cert, name it "required-company-cert" here

2.       Attach this Cert to dts/dt.dtb of U-Boot using mkimage -k 
<dir-with-above-cert> -K dts/dt.dtb -r

3.       make U-Boot to attach the Cert with it, store it at a secure place and 
put it on several devices
In 2. you can see that I used -r to store this cert as required.
Using "fdtget u-boot.dtb /signature/required-company-cert required" I get 
"conf".
So the Cert is attached to U-Boot and is marked as required for configurations.
(To be sure, I used a hex editor to find the cert and the required in the final 
U-Boot image)

It is planned to never change U-Boot and FIT Updates are done using a dual 
image system (bootcount, altbootcmd)
We create FIT images "test.itb" with Kernel, DTB, RamFS. 3 images using sha256, 
one configuration using above certificate.

For the following test I used the u-boot git master from today, using "make 
sandbox_defconfig".
The FIT Images are checked using "tools/fit_check_sign -f <itb> -k u-boot.dtb"

1.       Using the correct Cert I get:

Verifying Hash Integrity for node 'conf-1'... 
sha256,rsa4096:required-company-cert+

Verified OK, loading images

Signature check OK

2.       Using no Cert I get:

Verifying Hash Integrity for node 'conf-1'...  error!

for '(null)' hash node in 'conf-1' config node

Failed to verify required signature 'key-rtu-fit-sign'

3.       Using the wrong Cert "tamper" I get:
Verifying Hash Integrity for node 'conf-1'... sha256,rsa4096:tamper- error!
Verification failed for '(null)' hash node in 'conf-1' config node
Failed to verify required signature 'required-company-cert'

So fit_check_sign acts correctly by finding the cert 'required-company-cert' as 
required in u-boot.dtb

If I load any of these FIT Images in U-Boot only the sha256 hashes are checked, 
and nobody cares about the Certificate.
(using iminfo here and bootm on our ARM Hardware)
I can load any FIT Image with wrong Certs, or any Cert at all!

On analyzing the Problem in the Source Code I saw that U-Boot does not check 
Certs if it finds no "required" entry.
In common/image-fit-sig.c, method "fit_config_verify_required_sigs" the 
"required" node is searched.
As far as I can tell any FDT operation is done on the loaded FIT, I saw no 
access of the u-boot.dtb included in u-boot.

This makes no sense to me, as the u-boot.dtb included in u-boot must have the 
final word which Cert is to be used and required.
Any information in the FIT must be regarded as possible tampered from a 3rd 
party.

Regards,
Thomas

Reply via email to