aboutsummaryrefslogtreecommitdiffstats
path: root/hw/rollback_boot.py (follow)
Commit message (Collapse)AuthorAge
* finding: the bootloader accepts an older signed system driver, with no ↵user2026-09-30
version enforcement An earlier pass called this blocked for want of an older build of this component for this chip, which was wrong: the container the part loads is published and historical versions are public, so two older vendor-signed builds for this exact chip were obtained. The older signed build boots and runs. After a full cold power cycle, with the injected bytes the only copy of that component supplied, the secure OS comes up and an application both loads and invokes successfully, and application service is provided by that component, so the injected build is what executes. A positive control re-injecting the running bytes also boots, so the injection mechanism is sound. Two objections are closed by measurement rather than argument, because the first version of this test proved nothing: a resident copy from a previous boot could have been servicing requests, since the driver-level reset does not clear processor state, so the test was redone from cold; and the load might have been refused with the secure OS booting anyway, which the working application service rules out. A register that cannot answer the question is also recorded: it reports the secure OS version while only the driver component was substituted, and an earlier draft treated it first as confirmation and then as refutation, being wrong both times. Signature enforcement is intact but version enforcement is absent, so any memory-safety defect fixed between an old build and the current one becomes reachable again by choosing the old build. This is a route to reachable corruption rather than corruption itself, and whether it yields one depends on a security fix existing in that window.