{"id":"CVE-2026-12681","aliases":["GHSA-9r4w-jg96-92mv","GO-2026-5298"],"title":"Go-Attestation: Hash injection into trusted measurement list via unskipped SignatureHeaderSize vendor bytes in parseEfiSignatureList()","summary":"Go-Attestation: Hash injection into trusted measurement list via unskipped SignatureHeaderSize vendor bytes in parseEfiSignatureList()","severity":"medium","cvss":6.8,"cvssVector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:N","vendor":"google","product":"github.com/google/go-attestation","ecosystem":"go","affected":["github.com/google/go-attestation < 0.6.1"],"patched":["github.com/google/go-attestation 0.6.1"],"published":"2026-06-12","updated":"2026-09-12","sourceUpdated":"2026-09-12T05:15:04.693981733Z","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-9r4w-jg96-92mv","references":[{"url":"https://github.com/google/go-attestation/security/advisories/GHSA-9r4w-jg96-92mv"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-12681"},{"url":"https://github.com/google/go-attestation/pull/502"},{"url":"https://github.com/google/go-attestation/commit/b6e905e7ae52937f02b5ca494dd1c6a3ac7a1003"},{"url":"https://github.com/google/go-attestation"},{"url":"https://github.com/google/go-attestation/releases/tag/v0.6.1"},{"url":"https://github.com/google/go-attestation/releases/tag/v0.6.0"}],"tags":["osv","go"],"epss":0.00191,"epssPercentile":0.09079,"ingestedAt":"2026-07-09T18:56:36.289Z","slug":"CVE-2026-12681","body":"## Overview\n\n## Summary\n\n`parseEfiSignatureList()` in `attest/internal/events.go` does not skip\n`SignatureHeaderSize` vendor bytes before reading `EFI_SIGNATURE_LIST`\nsignature entries, violating UEFI specification section 31.4.1.\n\n## Impact\n\nFor `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.\n\n## Root Cause\n\nAfter `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.\n\n## Affected versions\n\nAll versions through commit `f877374` (2026-05-15).\n\n## Fix\n\nPull request: https://github.com/google/go-attestation/pull/502\n\n- Add bound check: `SignatureHeaderSize` must not exceed remaining list space\n- Skip `SignatureHeaderSize` bytes before both entry loops\n- Regression test: `TestParseEfiSignatureListNonZeroSignatureHeaderSize`\n\n## Affected packages\n\n- `github.com/google/go-attestation < 0.6.1`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `github.com/google/go-attestation 0.6.1`","depth":"sunlit","depthScore":37,"depthScoreParts":{"impact":37.4,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}