@@ -20,6 +20,7 @@ import (
2020 "github.com/flashbots/cvm-reverse-proxy/internal/config"
2121
2222 "github.com/google/go-tdx-guest/abi"
23+ "github.com/google/go-tdx-guest/pcs"
2324 "github.com/google/go-tdx-guest/proto/tdx"
2425 "github.com/google/go-tdx-guest/validate"
2526 "github.com/google/go-tdx-guest/verify"
@@ -28,6 +29,8 @@ import (
2829 "github.com/google/go-tpm/legacy/tpm2"
2930)
3031
32+ const AZURE_V6_BAD_FMSPC = "90c06f000000"
33+
3134// Validator for Azure confidential VM attestation using TDX.
3235type Validator struct {
3336 variant.AzureTDX
@@ -36,6 +39,9 @@ type Validator struct {
3639
3740 getter trust.HTTPSGetter
3841 hclValidator hclAkValidator
42+
43+ tcbOverride func (pcs.TcbInfo ) pcs.TcbInfo
44+ log attestation.Logger
3945}
4046
4147// NewValidator returns a new Validator for Azure confidential VM attestation using TDX.
@@ -44,6 +50,7 @@ func NewValidator(cfg *config.AzureTDX, log attestation.Logger) *Validator {
4450 cfg : cfg ,
4551 getter : trust .DefaultHTTPSGetter (),
4652 hclValidator : & azure.HCLAkValidator {},
53+ log : log ,
4754 }
4855
4956 v .Validator = vtpm .NewValidator (
@@ -58,6 +65,11 @@ func NewValidator(cfg *config.AzureTDX, log attestation.Logger) *Validator {
5865 return v
5966}
6067
68+ func (v * Validator ) SetTcbOverride (overrideFn func (pcs.TcbInfo ) pcs.TcbInfo ) * Validator {
69+ v .tcbOverride = overrideFn
70+ return v
71+ }
72+
6173func (v * Validator ) getTrustedTPMKey (_ context.Context , attDoc vtpm.AttestationDocument , _ []byte ) (crypto.PublicKey , error ) {
6274 var instanceInfo InstanceInfo
6375 if err := json .Unmarshal (attDoc .InstanceInfo , & instanceInfo ); err != nil {
@@ -96,12 +108,26 @@ func (v *Validator) validateQuote(tdxQuote *tdx.QuoteV4) error {
96108 if err := verify .TdxQuote (tdxQuote , & verify.Options {
97109 CheckRevocations : true ,
98110 GetCollateral : true ,
111+ PatchTCBInfo : v .tcbOverride ,
99112 TrustedRoots : roots ,
100113 Getter : v .getter ,
101114 }); err != nil {
102115 return err
103116 }
104117
118+ // Hacky way to log every time we validate the outdated v6 tcb
119+ if v .tcbOverride != nil {
120+ if chain , err := verify .ExtractChainFromQuote (tdxQuote ); err == nil {
121+ if exts , err := pcs .PckCertificateExtensions (chain .PCKCertificate ); err == nil {
122+ if exts .FMSPC == AZURE_V6_BAD_FMSPC {
123+ if tdxQuote .TdQuoteBody .TeeTcbSvn [7 ] == 3 {
124+ v .log .Warn ("allowing azure's outdated SEAM loader" )
125+ }
126+ }
127+ }
128+ }
129+ }
130+
105131 if err := validate .TdxQuote (tdxQuote , & validate.Options {
106132 HeaderOptions : validate.HeaderOptions {
107133 MinimumQeSvn : v .cfg .QESVN .Value ,
0 commit comments