[U-Boot] U-Boot Hole in Verified Boot

Larry.Gass at microchip.com Larry.Gass at microchip.com
Tue May 1 21:33:13 UTC 2018


This is my first post to the U-Boot mailing list so if I'm doing it wrong I apologize in advance and would welcome feedback.

I was able to bypass the SHA+RSA check of an image by performing a "fdt checksign" followed by a load of an unsigned image, even though I have 'required="conf"' in my control FDT.

Below, I have 2 images. linuxnosec.itb is not signed. linux.itb IS signed correctly.

How do I report the bug?
Thanks,
Larry


------------------------------------------------------------------------------------------------
Good behavior:

=> fatload mmc 1:1 0x20000000 linuxnosec.itb
4989282 bytes read in 331 ms (14.4 MiB/s)

=> bootm 0x20000000
## Loading kernel from FIT Image at 20000000 ...
   Using 'conf at 1' configuration
   Verifying Hash Integrity ... sha256,rsa4096:samkey- Failed to verify required signature 'key-samkey'
Bad Data Hash
ERROR: can't get kernel image!
=>

-------------------------------------------------------------------------------------------------
How to bypass the signature check:
=> fatload mmc 1:1 0x20000000 linux.itb
4975090 bytes read in 330 ms (14.4 MiB/s)

=> bdinfo
arch_number = 0x00000000
boot_params = 0x20000100
DRAM bank   = 0x00000000
-> start    = 0x20000000
-> size     = 0x20000000
baudrate    = 115200 bps
TLB addr    = 0x3FFF0000
relocaddr   = 0x3FD58000
reloc off   = 0x18E58000
irq_sp      = 0x3F952FB0
sp start    = 0x3F952FA0
Early malloc usage: 14f0 / 2000
fdt_blob = 3f952fc8

=> fdt addr 0x3f952fc8
=> fdt check 0x20000000
=> fatload mmc 1:1 0x20000000 linuxnosec.itb

4989282 bytes read in 332 ms (14.3 MiB/s)

=> bootm 0x20000000
## Loading kernel from FIT Image at 20000000 ...
   Using 'conf at 1' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel at 1' kernel subimage
     Description:  unavailable
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x200000c4
     Data Size:    4937752 Bytes = 4.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x21000000
     Entry Point:  0x21000000
     Hash algo:    sha256
     Hash value:   a6fa3b9d6b8ec4e302130b56a95dfdbcb5845980a6cd8fbf7de1f21dafaa3229
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 20000000 ...
   Using 'conf at 1' configuration
   Trying 'fdt at 1' fdt subimage
     Description:  unavailable
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x204b59b4
     Data Size:    33480 Bytes = 32.7 KiB
     Architecture: ARM
     Hash algo:    sha256
     Hash value:   4e338db79f27d05fc666aaffce73c5e03562562da7b59913eec2b374aaef4b07
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x204b59b4
   Loading Kernel Image ... OK
   Loading Device Tree to 3f946000, end 3f9512c7 ... OK

Starting kernel ...



More information about the U-Boot mailing list