PT-2026-51367 · Go · Github.Com/Google/Go-Attestation
Published
2026-06-12
·
Updated
2026-06-12
CVSS v4.0
8.9
High
| Vector | AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
Summary
parseEfiSignatureList() in attest/internal/events.go does not skip
SignatureHeaderSize vendor bytes before reading EFI SIGNATURE LIST
signature entries, violating UEFI specification section 31.4.1.Impact
For
hashSHA256SigGUID lists, attacker-controlled vendor header bytes are appended directly to the trusted SHA256 hash list. A crafted TPM event log can inject arbitrary SHA256 hashes into the verifier's trusted measurement database, allowing a remote attestation verifier to accept a compromised boot state as legitimate — breaking the core integrity guarantee of remote attestation.Root Cause
After
binary.Read(&signatures.Header) reads 28 bytes, buf points to the start of the SignatureHeaderSize vendor bytes. Both entry loops start at sigOffset := 0 instead of sigOffset := SignatureHeaderSize, causing vendor bytes to be read as signature entries.Affected versions
All versions through commit
f877374 (2026-05-15).Fix
Pull request: https://github.com/google/go-attestation/pull/502
- Add bound check:
SignatureHeaderSizemust not exceed remaining list space - Skip
SignatureHeaderSizebytes before both entry loops - Regression test:
TestParseEfiSignatureListNonZeroSignatureHeaderSize
Fix
RCE
Found an issue in the description? Have something to add? Feel free to write us 👾
Related Identifiers
Affected Products
Github.Com/Google/Go-Attestation