Skip to content

The signed bundle does not bind the FSBL — 'the bundle verified' says nothing about the trust root #742

Description

@Nicola-Ceornea

Surfaced by an audit agent during the 2026-09-23 boot-proof work; verified in source.

fwsign/src/subcommands/sign.rs:66-77 reads --fsbl only to hand it to artifact_key::verify_artifact_bytes, i.e. a vendor-key provenance check on retained ELF sections. No FSBL hash is placed in the manifest. fwsign inspect confirms the manifest carries secure_len, ns_len, secure_hash, ns_hash and vendor_fpr — and no FSBL field.

Why this is worth an issue rather than a shrug. Invariant #10 makes the FSBL the entire post-sale trust root: it measures the active slots and renders the fingerprint, and its immutability is supposed to come from WRP + RDP-2, not from the signed manifest. That is a coherent design. The problem is what it means for evidence:

  • A bundle that verifies proves nothing about which FSBL is on the part. Any statement of the form "we flashed the signed bundle, therefore the FSBL was X" is unfounded.
  • During the screen-unit run I claimed stage-marker was off in the flashed FSBL. That claim is true, but it is backed by a local chain I happened to build (nm on the ELF -> elf-to-bin of that same ELF -> round-trip re-hash of the composed blob -> CubeProgrammer verify), not by anything in the signed artifact. Someone repeating the run without that chain would have only operator testimony.
  • The WRP/RDP-2 gates that are supposed to supply this property are all still OPEN (invariant S-4: OPTIGA pre-ship lower-severity items — close in the same hardening branch as S-1/S-2/S-3 #10 lists them).

Not proposing the FSBL be added to the manifest — that may be wrong, since the FSBL is the verifier and a self-referential binding buys little. What is needed is a decision, recorded: either the release flow emits an FSBL measurement receipt alongside the bundle, or the docs state plainly that FSBL identity is established only by WRP+RDP-2 and by out-of-band measurement, so nobody infers it from a bundle signature.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions