Skip to content

Commit 4897ae6

Browse files
committed
intelmeta: get the whole FIT
Signed-off-by: Daniel Maslowski <info@orangecms.org>
1 parent f1e8c5d commit 4897ae6

1 file changed

Lines changed: 40 additions & 19 deletions

File tree

cmds/intelmeta/main.go

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var (
2424
flagJSON = flag.Bool("j", false, "Output as JSON")
2525
)
2626

27-
func getLeakedKeys() [10][]byte {
27+
func getLeakedKeys() ([10][]byte, error) {
2828
var keys = [10]string{
2929
// https://github.com/binarly-io/SupplyChainAttacks/blob/main/MSI/MsiImpactedDevices.md
3030
"77304b5179d0924e55060188495c80135da6be5a357234809e04a50c9629be6832f2d71be5e720a71bc9103b62413f91f98bf35723a358c5a24530fd46f6c89e6b3c22b77cd364b252bb0190cbc5ef6dd91811bfeff9a7308a6b5d60a4297dcfab6302d5d9db78103d4467d097bacce456b54c983f175c44bfd150b5121a589fa642308fd522471b6216afa0a9dbf8f158b0f7a787c0c6a58e70f2ebbff73708a880ae929bdc6097d6bc6463ab524c4ee6e9aa208ac845211b0e04fe8f2dca3799641af550e4740498ed7c3b4e9ceaf8e9256a30623cba4799ba8198cb3d53e28492c49ce3512856dfd4577992c6c7867eee353bbb38424ac83dcfc7dfba902bb41b180ded8026ac9591f3575cc4e2a6e228c4f12e978996984cb48bfd982067c00baa789447f56d63f52f4bc210025b239b92141592eb0734088647c14ff3df646bd0e629ccb0ec57bec4372700d1041cdd44ecf4e4067cc363e76af1d52fbffc8a6164b25d4c7611b57169c76717a940f387959916aa259a1064596bbc76a7",
@@ -45,18 +45,20 @@ func getLeakedKeys() [10][]byte {
4545
for i, k := range keys {
4646
bkeys[i], err = hex.DecodeString(k)
4747
if err != nil {
48-
fmt.Fprintf(os.Stderr, "cannot decode key\n")
48+
return bkeys, err
4949
}
5050
}
5151

52-
return bkeys
52+
return bkeys, nil
5353
}
5454

5555
type Manifest interface{}
5656

5757
type Meta struct {
58-
Keym Manifest
59-
Polm Manifest
58+
Keym Manifest
59+
Polm Manifest
60+
Fit []fit.Entry
61+
LeakedKey string
6062
}
6163

6264
func main() {
@@ -90,6 +92,7 @@ func main() {
9092
}
9193

9294
var meta Meta
95+
meta.Fit = entries
9396

9497
if bme == nil {
9598
fmt.Fprintf(os.Stderr, "no boot manifest entry\n")
@@ -141,26 +144,44 @@ func main() {
141144
}
142145
}
143146

147+
leakedKeys, err := getLeakedKeys()
148+
if err != nil {
149+
fmt.Fprintf(os.Stderr, "[ERR]: cannot decode list of presumably hex-encoded leaked keys\n")
150+
}
151+
if meta.Polm != nil {
152+
// https://go.dev/tour/methods/15
153+
_, ok := meta.Polm.(cbntbootpolicy.Manifest)
154+
if ok == true {
155+
pol := meta.Polm.(cbntbootpolicy.Manifest)
156+
k := pol.PMSE.Key.Data[4:]
157+
for _, lk := range leakedKeys {
158+
if bytes.Equal(k, lk) {
159+
meta.LeakedKey = hex.EncodeToString(lk[:8])
160+
}
161+
}
162+
}
163+
if ok == false {
164+
p, ok := meta.Polm.(bgbootpolicy.Manifest)
165+
if ok == true {
166+
k := p.PMSE.Key.Data[4:]
167+
for _, lk := range leakedKeys {
168+
if bytes.Equal(k, lk) {
169+
meta.LeakedKey = hex.EncodeToString(lk[:8])
170+
}
171+
}
172+
}
173+
}
174+
}
175+
144176
if *flagJSON {
145177
j, err := json.MarshalIndent(meta, "", " ")
146178
if err != nil {
147-
log.Fatalf("cannot marshal JSON: %v", err)
148-
}
149-
if err != nil {
150-
log.Fatalf("cannot marshal JSON: %v", err)
179+
log.Fatalf("cannot marshal to JSON: %v", err)
151180
}
152181
fmt.Println(string(j))
153182
}
154183

155-
leakedKeys := getLeakedKeys()
156-
if meta.Polm != nil {
157-
p := meta.Polm.(cbntbootpolicy.Manifest)
158-
k := p.PMSE.Key.Data[4:]
159-
// fmt.Fprintf(os.Stderr, "%v\n", k)
160-
for _, lk := range leakedKeys {
161-
if bytes.Equal(k, lk) {
162-
fmt.Fprintf(os.Stderr, "LEAKED BG KEY USED: %x\n", lk[:8])
163-
}
164-
}
184+
if meta.LeakedKey != "" {
185+
fmt.Fprintf(os.Stderr, "LEAKED BG KEY USED: %x\n", meta.LeakedKey)
165186
}
166187
}

0 commit comments

Comments
 (0)