NCC-E003660-PCK: Non Constant-Time Comparison of Service Account Token Secrets

This commit is contained in:
carlory 2023-07-28 14:03:28 +08:00
parent 97c7dbcd22
commit 14251738d2

View File

@ -17,8 +17,8 @@ limitations under the License.
package serviceaccount
import (
"bytes"
"context"
"crypto/subtle"
"encoding/json"
"errors"
"fmt"
@ -124,7 +124,7 @@ func (v *legacyValidator) Validate(ctx context.Context, tokenData string, public
klog.V(4).Infof("Token is deleted and awaiting removal: %s/%s for service account %s/%s", namespace, secretName, namespace, serviceAccountName)
return nil, errors.New("Token has been invalidated")
}
if !bytes.Equal(secret.Data[v1.ServiceAccountTokenKey], []byte(tokenData)) {
if subtle.ConstantTimeCompare(secret.Data[v1.ServiceAccountTokenKey], []byte(tokenData)) == 0 {
klog.V(4).Infof("Token contents no longer matches %s/%s for service account %s/%s", namespace, secretName, namespace, serviceAccountName)
return nil, errors.New("Token does not match server's copy")
}