Skip to content

Commit ef57fe4

Browse files
leonklingeletechknowlogick
authored andcommitted
routers: do not leak secrets via timing side channel (#7364)
* routers: do not leak secrets via timing side channel * routers/repo: do not leak secrets via timing side channel
1 parent 96b66e3 commit ef57fe4

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

routers/metrics.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package routers
66

77
import (
8+
"crypto/subtle"
9+
810
"github.com/prometheus/client_golang/prometheus/promhttp"
911

1012
"code.gitea.io/gitea/modules/context"
@@ -22,7 +24,9 @@ func Metrics(ctx *context.Context) {
2224
ctx.Error(401)
2325
return
2426
}
25-
if header != "Bearer "+setting.Metrics.Token {
27+
got := []byte(header)
28+
want := []byte("Bearer " + setting.Metrics.Token)
29+
if subtle.ConstantTimeCompare(got, want) != 1 {
2630
ctx.Error(401)
2731
return
2832
}

routers/repo/pull.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package repo
88

99
import (
1010
"container/list"
11+
"crypto/subtle"
1112
"fmt"
1213
"io"
1314
"path"
@@ -771,7 +772,9 @@ func TriggerTask(ctx *context.Context) {
771772
if ctx.Written() {
772773
return
773774
}
774-
if secret != base.EncodeMD5(owner.Salt) {
775+
got := []byte(base.EncodeMD5(owner.Salt))
776+
want := []byte(secret)
777+
if subtle.ConstantTimeCompare(got, want) != 1 {
775778
ctx.Error(404)
776779
log.Trace("TriggerTask [%s/%s]: invalid secret", owner.Name, repo.Name)
777780
return

0 commit comments

Comments
 (0)