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
5555type Manifest interface {}
5656
5757type Meta struct {
58- Keym Manifest
59- Polm Manifest
58+ Keym Manifest
59+ Polm Manifest
60+ Fit []fit.Entry
61+ LeakedKey string
6062}
6163
6264func 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