** Description changed:

  [Impact]
  
   * Calculating the hash of the binary is ill defined if there are gaps
  in sections, or sections are not aligned to ensure that signature table
  is aligned.
  
   * This results in sbsign/sbverify to calculate incorrect hash when
  there are gaps, such as in shimaa64.efi as built on focal with sbat.
  
   * This was fixed in eoan, but launchpad signing service uses sbsign
  from bionic.
  
   * Thus if binaries have gaps launchpad is producing signatures that are
  covering the wrong authenticode hash.
  
  [Test Plan]
  
   * Signatures produced by sbsign in bionic, must be able to verify with
  sbverify from focal or later.
  
   * Old signatures generated by launchpad should fail validation
  
-  * Enrolling certificate into db and booting secureboot arm VM must work
+  * Enrolling certificate into db and booting secureboot arm VM must work
  
  ie.
+ 
+ # install old sbsign
  
  # Test old launchpad generated signature, ensure that it fails:
  
  cd $(mktemp -d)
  wget 
http://ppa.launchpad.net/xnox/nonvirt/ubuntu/dists/hirsute/main/signed/shim-arm64/15.3-0ubuntu1~ppa1/signed.tar.gz
  tar xvf ./signed.tar.gz
  
- sbverify --cert 15.3-0ubuntu1~ppa1/control/uefi.crt 
15.3-0ubuntu1~ppa1/shimaa64.efi.signed
- ...
- Signature verification failed
+ sbverify --cert 15.3-0ubuntu1~ppa1/control/uefi.crt
+ 15.3-0ubuntu1~ppa1/shimaa64.efi.signed
  
- Is the correct output
+ Verification will pass with old sbsign, but it is wrong.
  
- # Generate new key on bionic, resign using new sbsigntool, and check
- that it is now all good:
+ # Generate new key on bionic
  
  update-secureboot-policy --new-key
  openssl x509 -inform der -outform pem -in /var/lib/shim-signed/mok/MOK.der 
-out /var/lib/shim-signed/mok/MOK.pem
  
- sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-
- signed/mok/MOK.pem 15.3-0ubuntu1~ppa1/shimaa64.efi
+ cp 15.3-0ubuntu1~ppa1/shimaa64.efi old-sbsign.efi
+ cp 15.3-0ubuntu1~ppa1/shimaa64.efi new-sbsign.efi
  
- sbverify --cert /var/lib/shim-signed/mok/MOK.pem 
15.3-0ubuntu1~ppa1/shimaa64.efi.signed
- Signature verification OK
+ # self-sign the binary using the old sbsign
+ sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert 
/var/lib/shim-signed/mok/MOK.pem old-sbsign.efi
  
- Copy the signed binary & cert to focal, and check that sbverify verifies
- them.
+ # Detach the signature and print the message digest
+ 
+ sbattach --detach old-sbsign-signature.p7c old-sbsign.efi
+ 
+ openssl pkcs7 -inform der -in old-sbsign-signature.p7c -print | grep -A5
+ messageDi
+ 
+ 
+ # upgrade to new sbsign
+ 
+ # check that verifcation now fails
+ 
+ sbverify --cert 15.3-0ubuntu1~ppa1/control/uefi.crt
+ 15.3-0ubuntu1~ppa1/shimaa64.efi.signed
+ 
+ should now fail.
+ 
+ # self-sign with new sbsign
+ sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert 
/var/lib/shim-signed/mok/MOK.pem new-sbsign.efi
+ 
+ # Detach the signature and print the message digest
+ sbattach --detach new-sbsign-signature.p7c old-sbsign.efi
+ 
+ openssl pkcs7 -inform der -in new-sbsign-signature.p7c -print | grep -A5
+ messageDi
+ 
+ # Also detach the launchpad signature and print digest
+ 
+ sbattach --detach lp-sbsign-signature.p7c
+ 15.3-0ubuntu1~ppa1/shimaa64.efi.signed
+ 
+ openssl pkcs7 -inform der -in lp-sbsign-signature.p7c -print | grep -A5
+ messageDi
+ 
+ 
+ The correct digest is, which should be in the new-sbsign-signature.p7c:
+             object: messageDigest (1.2.840.113549.1.9.4)
+             set:
+               OCTET STRING:
+                 0000 - 6a 83 1f 9e cb 7a 68 7f-17 c0 9d 81 c0   j....zh......
+                 000d - 6b 17 b2 c3 1c d7 ed b5-b3 89 49 a3 c1   k.........I..
+                 001a - 8d 75 59 d3 b3 11                        .uY...
+ 
+ The wrong digest is, which is in lp & old sbsign signatures:
+             object: messageDigest (1.2.840.113549.1.9.4)
+             set:
+               OCTET STRING:
+                 0000 - 2a c3 bb e6 20 27 6b b2-58 f8 8d 50 eb   *... 'k.X..P.
+                 000d - 1e 88 68 a3 12 08 7a 1d-27 e5 42 e6 0e   ..h...z.'.B..
+                 001a - e4 24 9a 5c 0a 92                        .$.\..
  
  
  [Where problems could occur]
  
   * Existing edk2 OVMF machines in bionic possibly are calculating
  checksums unpadded, and thus this change will make the new signatures
  fail to validate in edk2 OVMF. However, the binaries on amd64 do not
  have gaps and thus have always had correct signatures. arm64 binaries
  with gaps do not exist in bionic.
  
  [Other Info]
  
  Original bug report:
  
  launchpad signed shimaa64.efi fails to validate on focal
  
  cd $(mktemp -d)
  
  wget
  http://ppa.launchpad.net/xnox/nonvirt/ubuntu/dists/hirsute/main/signed
  /shim-arm64/15.3-0ubuntu1~ppa1/signed.tar.gz
  
  tar xvf ./signed.tar.gz
  
  sbverify --cert 15.3-0ubuntu1~ppa1/control/uefi.crt
  15.3-0ubuntu1~ppa1/shimaa64.efi.signed
  
  Signature verification failed
  
  And yet inside bionic-amd64 chroot I get:
  
  # sbverify --cert 15.3-0ubuntu1~ppa1/control/uefi.crt 
15.3-0ubuntu1~ppa1/shimaa64.efi.signed
  warning: gap in section table:
      .data   : 0x0007f000 - 0x000b3800,
      .sbat   : 0x000b4000 - 0x000b5000,
  gaps in the section table may result in different checksums
  warning: data remaining[740864 vs 800872]: gaps between PE/COFF sections?
  Signature verification OK
  
  However,
  
  If in xenial-amd64 I perform
  
  update-secureboot-policy new-key
  openssl x509 -inform der -outform pem -in /var/lib/shim-signed/mok/MOK.der 
-out /var/lib/shim-signed/mok/MOK.pem
  
  sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-
  signed/mok/MOK.pem 15.3-0ubuntu1~ppa1/shimaa64.efi
  
  sbverify --cert /var/lib/shim-signed/mok/MOK.pem 
15.3-0ubuntu1~ppa1/shimaa64.efi.signed
  Signature verification OK
  
  Looks like something is dodgy in sbverify in bionic; i.e. it calculates
  / signs / verifies wrong hash.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1921387

Title:
  launchpad signing shimaa64.efi fails to validate

To manage notifications about this bug go to:
https://bugs.launchpad.net/launchpad/+bug/1921387/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to