diff --git a/cmd/bucket-policy.go b/cmd/bucket-policy.go index 05076698e..addfaf96e 100644 --- a/cmd/bucket-policy.go +++ b/cmd/bucket-policy.go @@ -137,6 +137,10 @@ func getConditionValues(r *http.Request, lc string, cred auth.Credentials) map[s } cloneHeader := r.Header.Clone() + if v := cloneHeader.Get("x-amz-signature-age"); v != "" { + args["signatureAge"] = []string{v} + cloneHeader.Del("x-amz-signature-age") + } if userTags := cloneHeader.Get(xhttp.AmzObjectTagging); userTags != "" { tag, _ := tags.ParseObjectTags(userTags) diff --git a/cmd/signature-v4-parser.go b/cmd/signature-v4-parser.go index 45df9a092..d6d3d8d46 100644 --- a/cmd/signature-v4-parser.go +++ b/cmd/signature-v4-parser.go @@ -232,6 +232,10 @@ func parsePreSignV4(query url.Values, region string, stype serviceType) (psv pre return psv, ErrMaximumExpires } + if preSignV4Values.Date.IsZero() || preSignV4Values.Date.Equal(timeSentinel) { + return psv, ErrMalformedPresignedDate + } + // Save signed headers. preSignV4Values.SignedHeaders, aec = parseSignedHeader("SignedHeaders=" + query.Get(xhttp.AmzSignedHeaders)) if aec != ErrNone { diff --git a/cmd/signature-v4.go b/cmd/signature-v4.go index 3f42553e9..ad292ea70 100644 --- a/cmd/signature-v4.go +++ b/cmd/signature-v4.go @@ -334,6 +334,9 @@ func doesPresignedSignatureMatch(hashedPayload string, r *http.Request, region s if !compareSignatureV4(req.Form.Get(xhttp.AmzSignature), newSignature) { return ErrSignatureDoesNotMatch } + + r.Header.Set("x-amz-signature-age", strconv.FormatInt(UTCNow().Sub(pSignValues.Date).Milliseconds(), 10)) + return ErrNone } diff --git a/go.mod b/go.mod index ee7447660..1a4863157 100644 --- a/go.mod +++ b/go.mod @@ -52,7 +52,7 @@ require ( github.com/minio/madmin-go/v3 v3.0.33 github.com/minio/minio-go/v7 v7.0.64 github.com/minio/mux v1.9.0 - github.com/minio/pkg/v2 v2.0.3-0.20231107172951-8a60b89ec9b4 + github.com/minio/pkg/v2 v2.0.4 github.com/minio/selfupdate v0.6.0 github.com/minio/sha256-simd v1.0.1 github.com/minio/simdjson-go v0.4.5 diff --git a/go.sum b/go.sum index 12a7dac1e..c9eaa29a0 100644 --- a/go.sum +++ b/go.sum @@ -497,8 +497,8 @@ github.com/minio/mux v1.9.0 h1:dWafQFyEfGhJvK6AwLOt83bIG5bxKxKJnKMCi0XAaoA= github.com/minio/mux v1.9.0/go.mod h1:1pAare17ZRL5GpmNL+9YmqHoWnLmMZF9C/ioUCfy0BQ= github.com/minio/pkg v1.7.5 h1:UOUJjewE5zoaDPlCMJtNx/swc1jT1ZR+IajT7hrLd44= github.com/minio/pkg v1.7.5/go.mod h1:mEfGMTm5Z0b5EGxKNuPwyb5A2d+CC/VlUyRj6RJtIwo= -github.com/minio/pkg/v2 v2.0.3-0.20231107172951-8a60b89ec9b4 h1:5eHjHtFZrrCQ3eO0sesXomdAUTtcGh0Fpp7Qa6dtjrY= -github.com/minio/pkg/v2 v2.0.3-0.20231107172951-8a60b89ec9b4/go.mod h1:6xTAr5M9yobpUroXAAaTrGJ9fhOZIqKYOT0I87u2yZ4= +github.com/minio/pkg/v2 v2.0.4 h1:vHQOqxD7AdsJq3X9GylO0PO6WCpcK7aePsVfk0oRYh0= +github.com/minio/pkg/v2 v2.0.4/go.mod h1:ya1jPY/rtVp3HarxwDQJkclR8Rd2QxwxA9kwS436ovs= github.com/minio/selfupdate v0.6.0 h1:i76PgT0K5xO9+hjzKcacQtO7+MjJ4JKA8Ak8XQ9DDwU= github.com/minio/selfupdate v0.6.0/go.mod h1:bO02GTIPCMQFTEvE5h4DjYB58bCoZ35XLeBf0buTDdM= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=