Skip to content

Commit f76ec3d

Browse files
mlajkimWindzCUHK
andauthored
Fix vulnerability in Regex (#13)
* feat: add maintainer jekim * fix: indent * fix: vulnerabilities in logic * refactor: redundant ok bool var * feat: buildRobustRegex() * feat: logger with some refactors * feat: install github.com/AthenZ/athenz-authorizer/v5 * feat: escape removed * fix: logger with escape * feat: apply assertion of athenz-authorizer * fix: test strings * fix: go 1.18 -> 1.20 * remove upx (#14) Signed-off-by: wfan <wfan@yahoo-corp.jp> * test setcap (#15) Signed-off-by: wfan <wfan@yahoo-corp.jp> * fix check cmd Signed-off-by: wfan <wfan@yahoo-corp.jp> * fix: log message * feat: WindzCHUK advice applied Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * feat: WindzCHUK advice applied Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * feat: WindzCHUK advice applied Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * feat: WindzCHUK advice applied Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * feat: WindzCHUK advice applied Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * refactor: redundant comments removed * feat: apply given comment from wfan Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * feat: apply given comment from wfan Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * fix: message * fix: message * feat: WindzCHUK advice applied Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> * fix: debug logger * feat: use Debugf --------- Signed-off-by: wfan <wfan@yahoo-corp.jp> Signed-off-by: Aaron Jeongwoo Kim <53258958+mlajkim@users.noreply.github.com> Co-authored-by: Windz <WindzCUHK@users.noreply.github.com> Co-authored-by: wfan <wfan@yahoo-corp.jp>
1 parent 8deba90 commit f76ec3d

File tree

12 files changed

+120
-81
lines changed

12 files changed

+120
-81
lines changed

.github/workflows/docker-build-publish.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ jobs:
137137
echo ${{ toJSON(steps.sysdig.outputs.violation_report) }} | \
138138
jq -r .
139139
echo ${{ toJSON(steps.sysdig.outputs.violation_report) }} | \
140-
jq -r .cis_docker_benchmark_violation_report[].violations[] | \
140+
jq -r '.cis_docker_benchmark_violation_report[] | select(true) | .violations[]' | \
141141
wc -l | \
142142
xargs -I% test 0 -eq %
143143
@@ -226,4 +226,4 @@ jobs:
226226
name: Test Docker image
227227
id: test_docker
228228
run: |
229-
docker run --rm ${{ fromJSON(steps.meta.outputs.json).tags[0] }} --version
229+
docker run --rm ${{ fromJSON(steps.meta.outputs.json).tags[0] }} -version

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
*.so
55
*.dylib
66

7+
# IDE
8+
.idea*
9+
.vscode*
10+
711
# Test binary, build with `go test -c`
812
*.test
913

Dockerfile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
FROM golang:1.18-alpine AS base
1+
FROM golang:1.20-alpine AS base
22

33
RUN set -eux \
44
&& apk --no-cache add ca-certificates \
5-
&& apk --no-cache add --virtual build-dependencies cmake g++ make unzip curl upx git
5+
&& apk --no-cache add --virtual build-dependencies cmake g++ make unzip curl git libcap
66

77
WORKDIR ${GOPATH}/src/github.com/AthenZ/garm
88

@@ -30,7 +30,10 @@ RUN BUILD_TIME=$(date -u +%Y%m%d-%H%M%S) \
3030
GOARCH=$(go env GOARCH) \
3131
GO111MODULE=on \
3232
go build -ldflags "-s -w -linkmode 'external' -extldflags '-static -fPIC -m64 -pthread -std=c++11 -lstdc++' -X 'main.Version=${APP_VERSION} at ${BUILD_TIME} by ${GO_VERSION}'" -a -tags "cgo netgo" -installsuffix "cgo netgo" -o "${APP_NAME}" \
33-
&& upx --best -o "/usr/bin/${APP_NAME}" "${APP_NAME}"
33+
&& mv "${APP_NAME}" "/usr/bin/${APP_NAME}"
34+
35+
# allow well-known port binding
36+
RUN setcap 'cap_net_bind_service=+ep' "/usr/bin/${APP_NAME}"
3437

3538
RUN apk del build-dependencies --purge \
3639
&& rm -rf "${GOPATH}"

MAINTAINERS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@
1717
# Seitaro Suno
1818
# Yahoo Japan Corporation
1919
# @ssunorz
20+
21+
# Jeongwoo Kim
22+
# Yahoo Japan Corporation
23+
# @mlajkim

config/config.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"regexp"
2222
"strings"
2323
"sync"
24+
"github.com/kpango/glg"
25+
assertion "github.com/AthenZ/athenz-authorizer/v5/policy"
2426

2527
"github.com/pkg/errors"
2628
webhook "github.com/yahoo/k8s-athenz-webhook"
@@ -29,7 +31,13 @@ import (
2931

3032
const (
3133
// currentVersion represents the configuration version.
32-
currentVersion = "v2.0.0"
34+
currentVersion string = "v2.0.0"
35+
// delimiter represents delimiter used to serialize RequestInfo. Must NOT use valid characters allowed in the all the fields of RequestInfo.
36+
// Choose the delimiter that RequestInfo's verb, namespace, API Group, Resource and Name CANNOT use.
37+
// i.e) If end user can set its resource name with hyphens, we cannot use hyphen as delimiter.
38+
// This will wrongfully grant access to privileged actions like DELETE or POST
39+
// for resources with hyphens in their names when minimum access rights such as GET is given.
40+
delimiter string = ","
3341
)
3442

3543
// Config represents an application configuration content (config.yaml).
@@ -256,11 +264,9 @@ type RequestInfo struct {
256264
once *sync.Once
257265
}
258266

259-
// Serialize returns RequestInfo in string format.
260-
// 1. replacedAPIGroup = replace `. => _` in r.APIGroup
261-
// 2. output format: `${r.Verb}-${r.Namespace}-${replacedAPIGroup}-${r.Resource}-${r.Name}`
267+
// Serialize returns RequestInfo in string, separated by the delimiter.
262268
func (r *RequestInfo) Serialize() string {
263-
return strings.Join([]string{r.Verb, r.Namespace, strings.Replace(r.APIGroup, ".", "_", -1), r.Resource, r.Name}, "-")
269+
return strings.Join([]string{r.Verb, r.Namespace, r.APIGroup, r.Resource, r.Name}, delimiter)
264270
}
265271

266272
// Match checks if the given RequestInfo matches with the regular expression in this RequestInfo.
@@ -273,10 +279,16 @@ func (r *RequestInfo) Match(req RequestInfo) bool {
273279
r.once = new(sync.Once)
274280
}
275281
r.once.Do(func() {
276-
r.reg = regexp.MustCompile(strings.Replace(strings.Replace(r.Serialize(), "*", ".*", -1), "..*", ".*", -1))
282+
ass, err := assertion.NewAssertion("", ":"+r.Serialize(), "")
283+
if err != nil {
284+
glg.Error(errors.Wrap(err, "regex creation error: invalid blacklist/whitelist config"))
285+
r.reg = regexp.MustCompile("")
286+
} else {
287+
r.reg = ass.ResourceRegexp
288+
}
277289
})
278290

279-
return r.reg.Copy().MatchString(req.Serialize())
291+
return r.reg.Copy().MatchString(strings.ToLower(req.Serialize()))
280292
}
281293

282294
// New returns the decoded configuration YAML file as *Config struct. Returns non-nil error if any.

config/config_test.go

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ func Test_requestInfo_Serialize(t *testing.T) {
4646
Name: "dummyName",
4747
},
4848
},
49-
want: "dummyVerb-dummyNamespace-dummyAPIGroup-dummyResource-dummyName",
49+
want: "dummyVerb,dummyNamespace,dummyAPIGroup,dummyResource,dummyName",
5050
},
5151
{
52-
name: "Check serialize with replace API group",
52+
name: "Check serialize with API group containing period",
5353
fields: fields{
5454
req: RequestInfo{
5555
Verb: "dummyVerb",
@@ -59,7 +59,7 @@ func Test_requestInfo_Serialize(t *testing.T) {
5959
Name: "dummyName",
6060
},
6161
},
62-
want: "dummyVerb-dummyNamespace-dummy_APIGroup-dummyResource-dummyName",
62+
want: "dummyVerb,dummyNamespace,dummy.APIGroup,dummyResource,dummyName",
6363
},
6464
}
6565
for _, tt := range tests {
@@ -95,11 +95,6 @@ func Test_requestInfo_Match(t *testing.T) {
9595
APIGroup: "dummyAPIGroup",
9696
Resource: "dummyResource",
9797
Name: "dummyName",
98-
99-
/*reg: func() *regexp.Regexp {
100-
reg, _ := regexp.Compile("dummy")
101-
return reg
102-
}(),*/
10398
},
10499
},
105100
args: args{
@@ -122,11 +117,6 @@ func Test_requestInfo_Match(t *testing.T) {
122117
APIGroup: "dummyAPIGroup",
123118
Resource: "dummyResource",
124119
Name: "dummyName",
125-
126-
/*reg: func() *regexp.Regexp {
127-
reg, _ := regexp.Compile("dummy")
128-
return reg
129-
}(),*/
130120
},
131121
},
132122
args: args{
@@ -149,11 +139,6 @@ func Test_requestInfo_Match(t *testing.T) {
149139
APIGroup: "dummyAPIGroup",
150140
Resource: "dummyResource",
151141
Name: "*",
152-
153-
/*reg: func() *regexp.Regexp {
154-
reg, _ := regexp.Compile("dummy")
155-
return reg
156-
}(),*/
157142
},
158143
},
159144
args: args{
@@ -177,11 +162,6 @@ func Test_requestInfo_Match(t *testing.T) {
177162
APIGroup: "dummyAPIGroup",
178163
Resource: "*",
179164
Name: "*",
180-
181-
/*reg: func() *regexp.Regexp {
182-
reg, _ := regexp.Compile("dummy")
183-
return reg
184-
}(),*/
185165
},
186166
},
187167
args: args{
@@ -195,6 +175,28 @@ func Test_requestInfo_Match(t *testing.T) {
195175
},
196176
want: true,
197177
},
178+
{
179+
name: "Check malicious resource name not match",
180+
fields: fields{
181+
req: RequestInfo{
182+
Verb: "get",
183+
Namespace: "kube-system",
184+
APIGroup: "garm",
185+
Resource: "pods",
186+
Name: "*",
187+
},
188+
},
189+
args: args{
190+
req: RequestInfo{
191+
Verb: "create",
192+
Namespace: "kube-system",
193+
APIGroup: "garm",
194+
Resource: "pods",
195+
Name: "get-kube-system-garm-pods-test",
196+
},
197+
},
198+
want: false,
199+
},
198200
}
199201
for _, tt := range tests {
200202
t.Run(tt.name, func(t *testing.T) {

go.mod

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
module github.com/AthenZ/garm/v2
22

3-
go 1.18
3+
go 1.20
44

55
replace (
6-
github.com/AthenZ/athenz => github.com/AthenZ/athenz v1.11.23
6+
github.com/AthenZ/athenz => github.com/AthenZ/athenz v1.11.26
77
golang.org/x/net => golang.org/x/net v0.7.0
88
k8s.io/client-go => k8s.io/client-go v0.26.0
99
)
1010

1111
require (
12-
github.com/AthenZ/athenz v1.11.23
13-
github.com/kpango/glg v1.6.14
12+
github.com/AthenZ/athenz v1.11.26
13+
github.com/AthenZ/athenz-authorizer/v5 v5.5.1
14+
github.com/kpango/glg v1.6.15
1415
github.com/pkg/errors v0.9.1
1516
github.com/yahoo/k8s-athenz-webhook v0.1.5-0.20230310225932-073f1a05c41a
1617
gopkg.in/yaml.v2 v2.4.0
@@ -27,17 +28,21 @@ require (
2728
github.com/google/go-cmp v0.5.9 // indirect
2829
github.com/google/gofuzz v1.2.0 // indirect
2930
github.com/json-iterator/go v1.1.12 // indirect
30-
github.com/kpango/fastime v1.1.6 // indirect
31+
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
32+
github.com/kpango/fastime v1.1.9 // indirect
33+
github.com/kpango/gache v1.2.8 // indirect
3134
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
3235
github.com/modern-go/reflect2 v1.0.2 // indirect
3336
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
3437
github.com/yahoo/athenz v1.9.31 // indirect
3538
github.com/yahoo/k8s-athenz-syncer v0.1.8 // indirect
36-
golang.org/x/net v0.7.0 // indirect
39+
github.com/zeebo/xxh3 v1.0.2 // indirect
40+
golang.org/x/net v0.9.0 // indirect
3741
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
38-
golang.org/x/sys v0.5.0 // indirect
39-
golang.org/x/term v0.5.0 // indirect
40-
golang.org/x/text v0.7.0 // indirect
42+
golang.org/x/sync v0.1.0 // indirect
43+
golang.org/x/sys v0.7.0 // indirect
44+
golang.org/x/term v0.7.0 // indirect
45+
golang.org/x/text v0.9.0 // indirect
4146
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
4247
google.golang.org/appengine v1.6.7 // indirect
4348
google.golang.org/protobuf v1.28.1 // indirect

go.sum

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
3131
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
3232
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
3333
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
34-
github.com/AthenZ/athenz v1.11.23 h1:Iqw46nJHVhDXcnVbXvtl7b7s9tU8xkWHALJ0IKXfOcg=
35-
github.com/AthenZ/athenz v1.11.23/go.mod h1:d2da1Gn5JLLrV48feSAKYJAJ2xCQPESvHpN5hnseB10=
34+
github.com/AthenZ/athenz v1.11.26 h1:j6AZhjT2DuR/ZN3OQm5XW3ri6TS4Wf97ePcFcqBy/f0=
35+
github.com/AthenZ/athenz v1.11.26/go.mod h1:hz8WrHkj4KOOaejllzTJIoXBCtptWV279CtEAUDuxis=
36+
github.com/AthenZ/athenz-authorizer/v5 v5.5.1 h1:okVP8IVuYnQaJG8CfSOwDbyTKyVRBhL0ldZ5XZBpMNg=
37+
github.com/AthenZ/athenz-authorizer/v5 v5.5.1/go.mod h1:Y4AYjbSeqaK6KdOjfGDbk1yvlVJ4Fm37+3ujnthE/1M=
3638
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3739
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
3840
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
@@ -194,11 +196,15 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
194196
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
195197
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
196198
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
199+
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
200+
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
197201
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
198-
github.com/kpango/fastime v1.1.6 h1:lAw1Tiwnlbsx1xZs6W9eM7/8niwabknewbmLkh/yTVo=
199-
github.com/kpango/fastime v1.1.6/go.mod h1:tTNDbIo5qL6D7g5vh2YbkyUbOVP2kD/we3rSjN22PMY=
200-
github.com/kpango/glg v1.6.14 h1:Ss3ZvTQ23blUCDYizSAijiFTZsgGeYr/lanUGgQ10rY=
201-
github.com/kpango/glg v1.6.14/go.mod h1:2djk7Zr4zKIYPHlORH8tJVlhCEh+XXW8W4K3qJyNXMI=
202+
github.com/kpango/fastime v1.1.9 h1:xVQHcqyPt5M69DyFH7g1EPRns1YQNap9d5eLhl/Jy84=
203+
github.com/kpango/fastime v1.1.9/go.mod h1:vyD7FnUn08zxY4b/QFBZVG+9EWMYsNl+QF0uE46urD4=
204+
github.com/kpango/gache v1.2.8 h1:+OjREOmuWO4qrJksDhzWJq80o9iwHiezdVmMR1jtCG0=
205+
github.com/kpango/gache v1.2.8/go.mod h1:UyBo0IoPFDSJypK2haDXeV6PwHEmBcXQA0BLuOYEvWg=
206+
github.com/kpango/glg v1.6.15 h1:nw0xSxpSyrDIWHeb3dvnE08PW+SCbK+aYFETT75IeLA=
207+
github.com/kpango/glg v1.6.15/go.mod h1:cmsc7Yeu8AS3wHLmN7bhwENXOpxfq+QoqxCIk2FneRk=
202208
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
203209
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
204210
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -290,14 +296,17 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
290296
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
291297
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
292298
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
299+
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
300+
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
301+
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
293302
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
294303
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
295304
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
296305
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
297306
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
298307
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
299308
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
300-
go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY=
309+
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
301310
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
302311
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
303312
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -357,6 +366,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
357366
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
358367
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
359368
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
369+
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
370+
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
360371
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
361372
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
362373
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -395,16 +406,19 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc
395406
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
396407
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
397408
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
409+
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
398410
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
399411
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
400412
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
401-
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
402413
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
414+
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
415+
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
403416
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
404417
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
405418
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
406-
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
407419
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
420+
golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
421+
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
408422
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
409423
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
410424
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -413,8 +427,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
413427
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
414428
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
415429
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
416-
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
417430
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
431+
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
432+
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
418433
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
419434
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
420435
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

0 commit comments

Comments
 (0)