Skip to content

Commit 919e74b

Browse files
committed
verify updater container image signatures using cosign
1 parent d4c8083 commit 919e74b

File tree

8 files changed

+1517
-69
lines changed

8 files changed

+1517
-69
lines changed

cmd/dependabot/internal/cmd/root.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,19 @@ import (
1212
)
1313

1414
type SharedFlags struct {
15-
file string
16-
cache string
17-
debugging bool
18-
flamegraph bool
19-
proxyCertPath string
20-
collectorConfigPath string
21-
extraHosts []string
22-
output string
23-
pullImages bool
24-
volumes []string
25-
timeout time.Duration
26-
local string
15+
file string
16+
cache string
17+
debugging bool
18+
flamegraph bool
19+
proxyCertPath string
20+
collectorConfigPath string
21+
extraHosts []string
22+
output string
23+
pullImages bool
24+
verifyImageSignatures bool
25+
volumes []string
26+
timeout time.Duration
27+
local string
2728
}
2829

2930
// root flags

cmd/dependabot/internal/cmd/test.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,25 @@ func NewTestCommand() *cobra.Command {
3535
processInput(&scenario.Input, nil)
3636

3737
if err := executeTestJob(infra.RunParams{
38-
CacheDir: flags.cache,
39-
CollectorConfigPath: flags.collectorConfigPath,
40-
CollectorImage: collectorImage,
41-
Creds: scenario.Input.Credentials,
42-
Debug: flags.debugging,
43-
Expected: scenario.Output,
44-
ExtraHosts: flags.extraHosts,
45-
InputName: flags.file,
46-
InputRaw: inputRaw,
47-
Job: &scenario.Input.Job,
48-
LocalDir: flags.local,
49-
Output: flags.output,
50-
ProxyCertPath: flags.proxyCertPath,
51-
ProxyImage: proxyImage,
52-
PullImages: flags.pullImages,
53-
Timeout: flags.timeout,
54-
UpdaterImage: updaterImage,
55-
Volumes: flags.volumes,
38+
CacheDir: flags.cache,
39+
CollectorConfigPath: flags.collectorConfigPath,
40+
CollectorImage: collectorImage,
41+
Creds: scenario.Input.Credentials,
42+
Debug: flags.debugging,
43+
Expected: scenario.Output,
44+
ExtraHosts: flags.extraHosts,
45+
InputName: flags.file,
46+
InputRaw: inputRaw,
47+
Job: &scenario.Input.Job,
48+
LocalDir: flags.local,
49+
Output: flags.output,
50+
ProxyCertPath: flags.proxyCertPath,
51+
ProxyImage: proxyImage,
52+
PullImages: flags.pullImages,
53+
VerifyImageSignatures: flags.verifyImageSignatures,
54+
Timeout: flags.timeout,
55+
UpdaterImage: updaterImage,
56+
Volumes: flags.volumes,
5657
}); err != nil {
5758
log.Fatal(err)
5859
}
@@ -69,6 +70,7 @@ func NewTestCommand() *cobra.Command {
6970
cmd.Flags().StringVar(&flags.proxyCertPath, "proxy-cert", "", "path to a certificate the proxy will trust")
7071
cmd.Flags().StringVar(&flags.collectorConfigPath, "collector-config", "", "path to an OpenTelemetry collector config file")
7172
cmd.Flags().BoolVar(&flags.pullImages, "pull", true, "pull the image if it isn't present")
73+
cmd.Flags().BoolVar(&flags.verifyImageSignatures, "verify", true, "verify image signatures")
7274
cmd.Flags().BoolVar(&flags.debugging, "debug", false, "run an interactive shell inside the updater")
7375
cmd.Flags().StringArrayVarP(&flags.volumes, "volume", "v", nil, "mount volumes in Docker")
7476
cmd.Flags().StringArrayVar(&flags.extraHosts, "extra-hosts", nil, "Docker extra hosts setting on the proxy")

cmd/dependabot/internal/cmd/update.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -81,26 +81,27 @@ func NewUpdateCommand() *cobra.Command {
8181
}
8282

8383
if err := infra.Run(infra.RunParams{
84-
CacheDir: flags.cache,
85-
CollectorConfigPath: flags.collectorConfigPath,
86-
CollectorImage: collectorImage,
87-
Creds: input.Credentials,
88-
Debug: flags.debugging,
89-
Flamegraph: flags.flamegraph,
90-
Expected: nil, // update subcommand doesn't use expectations
91-
ExtraHosts: flags.extraHosts,
92-
InputName: flags.file,
93-
Job: &input.Job,
94-
LocalDir: flags.local,
95-
Output: flags.output,
96-
ProxyCertPath: flags.proxyCertPath,
97-
ProxyImage: proxyImage,
98-
PullImages: flags.pullImages,
99-
Timeout: flags.timeout,
100-
UpdaterImage: updaterImage,
101-
Volumes: flags.volumes,
102-
Writer: writer,
103-
ApiUrl: flags.apiUrl,
84+
CacheDir: flags.cache,
85+
CollectorConfigPath: flags.collectorConfigPath,
86+
CollectorImage: collectorImage,
87+
Creds: input.Credentials,
88+
Debug: flags.debugging,
89+
Flamegraph: flags.flamegraph,
90+
Expected: nil, // update subcommand doesn't use expectations
91+
ExtraHosts: flags.extraHosts,
92+
InputName: flags.file,
93+
Job: &input.Job,
94+
LocalDir: flags.local,
95+
Output: flags.output,
96+
ProxyCertPath: flags.proxyCertPath,
97+
ProxyImage: proxyImage,
98+
PullImages: flags.pullImages,
99+
VerifyImageSignatures: flags.verifyImageSignatures,
100+
Timeout: flags.timeout,
101+
UpdaterImage: updaterImage,
102+
Volumes: flags.volumes,
103+
Writer: writer,
104+
ApiUrl: flags.apiUrl,
104105
}); err != nil {
105106
if errors.Is(err, context.DeadlineExceeded) {
106107
log.Fatalf("update timed out after %s", flags.timeout)
@@ -126,6 +127,7 @@ func NewUpdateCommand() *cobra.Command {
126127
cmd.Flags().StringVar(&flags.proxyCertPath, "proxy-cert", "", "path to a certificate the proxy will trust")
127128
cmd.Flags().StringVar(&flags.collectorConfigPath, "collector-config", "", "path to an OpenTelemetry collector config file")
128129
cmd.Flags().BoolVar(&flags.pullImages, "pull", true, "pull the image if it isn't present")
130+
cmd.Flags().BoolVar(&flags.verifyImageSignatures, "verify-signatures", true, "verify image signatures using cosign")
129131
cmd.Flags().BoolVar(&flags.debugging, "debug", false, "run an interactive shell inside the updater")
130132
cmd.Flags().BoolVar(&flags.flamegraph, "flamegraph", false, "generate a flamegraph and other metrics")
131133
cmd.Flags().StringArrayVarP(&flags.volumes, "volume", "v", nil, "mount volumes in Docker")

go.mod

Lines changed: 152 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,198 @@ require (
66
github.com/MakeNowJust/heredoc v1.0.0
77
github.com/docker/cli v25.0.4+incompatible
88
github.com/docker/docker v25.0.5+incompatible
9+
github.com/google/go-containerregistry v0.19.1
910
github.com/goware/prefixer v0.0.0-20160118172347-395022866408
1011
github.com/hexops/gotextdiff v1.0.3
1112
github.com/moby/moby v25.0.4+incompatible
1213
github.com/moby/sys/signal v0.7.0
14+
github.com/sigstore/cosign v1.13.6
1315
github.com/spf13/cobra v1.8.0
1416
gopkg.in/yaml.v3 v3.0.1
1517
rsc.io/script v0.0.2
1618
)
1719

1820
require (
21+
cloud.google.com/go/compute v1.23.4 // indirect
22+
cloud.google.com/go/compute/metadata v0.2.3 // indirect
23+
github.com/AliyunContainerService/ack-ram-tool/pkg/credentials/alibabacloudsdkgo/helper v0.2.0 // indirect
24+
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
1925
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
26+
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
27+
github.com/Azure/go-autorest/autorest v0.11.29 // indirect
28+
github.com/Azure/go-autorest/autorest/adal v0.9.22 // indirect
29+
github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 // indirect
30+
github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // indirect
31+
github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
32+
github.com/Azure/go-autorest/logger v0.2.1 // indirect
33+
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
2034
github.com/Microsoft/go-winio v0.6.1 // indirect
35+
github.com/ThalesIgnite/crypto11 v1.2.5 // indirect
36+
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect
37+
github.com/alibabacloud-go/cr-20160607 v1.0.1 // indirect
38+
github.com/alibabacloud-go/cr-20181201 v1.0.10 // indirect
39+
github.com/alibabacloud-go/darabonba-openapi v0.1.18 // indirect
40+
github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect
41+
github.com/alibabacloud-go/endpoint-util v1.1.1 // indirect
42+
github.com/alibabacloud-go/openapi-util v0.0.11 // indirect
43+
github.com/alibabacloud-go/tea v1.1.18 // indirect
44+
github.com/alibabacloud-go/tea-utils v1.4.4 // indirect
45+
github.com/alibabacloud-go/tea-xml v1.1.2 // indirect
46+
github.com/aliyun/credentials-go v1.2.3 // indirect
47+
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
48+
github.com/aws/aws-sdk-go-v2 v1.25.2 // indirect
49+
github.com/aws/aws-sdk-go-v2/config v1.27.4 // indirect
50+
github.com/aws/aws-sdk-go-v2/credentials v1.17.4 // indirect
51+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 // indirect
52+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 // indirect
53+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 // indirect
54+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
55+
github.com/aws/aws-sdk-go-v2/service/ecr v1.15.0 // indirect
56+
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.12.0 // indirect
57+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect
58+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.2 // indirect
59+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 // indirect
60+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 // indirect
61+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.1 // indirect
62+
github.com/aws/smithy-go v1.20.1 // indirect
63+
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220228164355-396b2034c795 // indirect
64+
github.com/blang/semver v3.5.1+incompatible // indirect
65+
github.com/chrismellard/docker-credential-acr-env v0.0.0-20220119192733-fe33c00cee21 // indirect
66+
github.com/clbanning/mxj/v2 v2.5.6 // indirect
67+
github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect
2168
github.com/containerd/containerd v1.7.14 // indirect
2269
github.com/containerd/log v0.1.0 // indirect
70+
github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect
71+
github.com/coreos/go-oidc/v3 v3.9.0 // indirect
72+
github.com/cyberphone/json-canonicalization v0.0.0-20210823021906-dc406ceaf94b // indirect
73+
github.com/davecgh/go-spew v1.1.1 // indirect
74+
github.com/dimchansky/utfbom v1.1.1 // indirect
2375
github.com/distribution/reference v0.5.0 // indirect
76+
github.com/docker/distribution v2.8.2+incompatible // indirect
77+
github.com/docker/docker-credential-helpers v0.7.0 // indirect
2478
github.com/docker/go-connections v0.5.0 // indirect
2579
github.com/docker/go-units v0.5.0 // indirect
80+
github.com/emicklei/go-restful/v3 v3.10.1 // indirect
2681
github.com/felixge/httpsnoop v1.0.4 // indirect
82+
github.com/fsnotify/fsnotify v1.6.0 // indirect
83+
github.com/go-chi/chi v4.1.2+incompatible // indirect
84+
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
2785
github.com/go-logr/logr v1.4.1 // indirect
2886
github.com/go-logr/stdr v1.2.2 // indirect
87+
github.com/go-openapi/analysis v0.21.4 // indirect
88+
github.com/go-openapi/errors v0.20.3 // indirect
89+
github.com/go-openapi/jsonpointer v0.19.5 // indirect
90+
github.com/go-openapi/jsonreference v0.20.0 // indirect
91+
github.com/go-openapi/loads v0.21.2 // indirect
92+
github.com/go-openapi/runtime v0.24.2 // indirect
93+
github.com/go-openapi/spec v0.20.7 // indirect
94+
github.com/go-openapi/strfmt v0.21.3 // indirect
95+
github.com/go-openapi/swag v0.22.3 // indirect
96+
github.com/go-openapi/validate v0.22.0 // indirect
97+
github.com/go-playground/locales v0.14.1 // indirect
98+
github.com/go-playground/universal-translator v0.18.1 // indirect
99+
github.com/go-playground/validator/v10 v10.11.1 // indirect
29100
github.com/gogo/protobuf v1.3.2 // indirect
101+
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
102+
github.com/golang/protobuf v1.5.4 // indirect
103+
github.com/golang/snappy v0.0.4 // indirect
104+
github.com/google/certificate-transparency-go v1.1.6 // indirect
105+
github.com/google/gnostic v0.5.7-v3refs // indirect
106+
github.com/google/go-cmp v0.6.0 // indirect
107+
github.com/google/go-github/v45 v45.2.0 // indirect
108+
github.com/google/go-querystring v1.1.0 // indirect
109+
github.com/google/gofuzz v1.2.0 // indirect
110+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
111+
github.com/hashicorp/go-retryablehttp v0.7.1 // indirect
112+
github.com/hashicorp/hcl v1.0.0 // indirect
113+
github.com/imdario/mergo v0.3.12 // indirect
114+
github.com/in-toto/in-toto-golang v0.9.0 // indirect
30115
github.com/inconshreveable/mousetrap v1.1.0 // indirect
116+
github.com/jedisct1/go-minisign v0.0.0-20211028175153-1c139d1cc84b // indirect
117+
github.com/jmespath/go-jmespath v0.4.0 // indirect
118+
github.com/josharian/intern v1.0.0 // indirect
119+
github.com/json-iterator/go v1.1.12 // indirect
31120
github.com/klauspost/compress v1.17.7 // indirect
32-
github.com/kr/text v0.2.0 // indirect
121+
github.com/leodido/go-urn v1.2.1 // indirect
122+
github.com/letsencrypt/boulder v0.0.0-20230907030200-6d76a0f91e1e // indirect
123+
github.com/magiconair/properties v1.8.6 // indirect
124+
github.com/mailru/easyjson v0.7.7 // indirect
125+
github.com/miekg/pkcs11 v1.1.1 // indirect
126+
github.com/mitchellh/go-homedir v1.1.0 // indirect
127+
github.com/mitchellh/mapstructure v1.5.0 // indirect
33128
github.com/moby/patternmatcher v0.6.0 // indirect
34129
github.com/moby/sys/sequential v0.5.0 // indirect
35130
github.com/moby/sys/user v0.1.0 // indirect
36131
github.com/moby/term v0.5.0 // indirect
37-
github.com/morikuni/aec v1.0.0 // indirect
38-
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
132+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
133+
github.com/modern-go/reflect2 v1.0.2 // indirect
134+
github.com/mozillazg/docker-credential-acr-helper v0.3.0 // indirect
135+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
136+
github.com/oklog/ulid v1.3.1 // indirect
39137
github.com/opencontainers/go-digest v1.0.0 // indirect
40138
github.com/opencontainers/image-spec v1.1.0 // indirect
139+
github.com/opentracing/opentracing-go v1.2.0 // indirect
140+
github.com/pelletier/go-toml v1.9.5 // indirect
141+
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
41142
github.com/pkg/errors v0.9.1 // indirect
143+
github.com/sassoftware/relic v0.0.0-20210427151427-dfb082b79b74 // indirect
144+
github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect
145+
github.com/segmentio/ksuid v1.0.4 // indirect
146+
github.com/shibumi/go-pathspec v1.3.0 // indirect
147+
github.com/sigstore/fulcio v1.0.0 // indirect
148+
github.com/sigstore/rekor v1.0.0 // indirect
149+
github.com/sigstore/sigstore v1.8.0 // indirect
42150
github.com/sirupsen/logrus v1.9.3 // indirect
151+
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
152+
github.com/spf13/afero v1.8.2 // indirect
153+
github.com/spf13/cast v1.5.0 // indirect
154+
github.com/spf13/jwalterweatherman v1.1.0 // indirect
43155
github.com/spf13/pflag v1.0.5 // indirect
156+
github.com/spf13/viper v1.13.0 // indirect
157+
github.com/subosito/gotenv v1.4.1 // indirect
158+
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
159+
github.com/tent/canonical-json-go v0.0.0-20130607151641-96e4ba3a7613 // indirect
160+
github.com/thales-e-security/pool v0.0.2 // indirect
161+
github.com/theupdateframework/go-tuf v0.7.0 // indirect
162+
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
163+
github.com/tjfoc/gmsm v1.3.2 // indirect
164+
github.com/transparency-dev/merkle v0.0.2 // indirect
165+
github.com/vbatts/tar-split v0.11.3 // indirect
166+
github.com/xanzy/go-gitlab v0.74.0 // indirect
167+
go.mongodb.org/mongo-driver v1.10.0 // indirect
44168
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
45169
go.opentelemetry.io/otel v1.24.0 // indirect
46170
go.opentelemetry.io/otel/metric v1.24.0 // indirect
47171
go.opentelemetry.io/otel/trace v1.24.0 // indirect
172+
go.uber.org/atomic v1.10.0 // indirect
173+
go.uber.org/multierr v1.8.0 // indirect
174+
go.uber.org/zap v1.23.0 // indirect
175+
golang.org/x/crypto v0.21.0 // indirect
176+
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
48177
golang.org/x/mod v0.16.0 // indirect
178+
golang.org/x/net v0.22.0 // indirect
179+
golang.org/x/oauth2 v0.17.0 // indirect
180+
golang.org/x/sync v0.6.0 // indirect
49181
golang.org/x/sys v0.18.0 // indirect
182+
golang.org/x/term v0.18.0 // indirect
50183
golang.org/x/text v0.14.0 // indirect
51184
golang.org/x/time v0.5.0 // indirect
52185
golang.org/x/tools v0.19.0 // indirect
53-
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
186+
google.golang.org/appengine v1.6.8 // indirect
187+
google.golang.org/protobuf v1.33.0 // indirect
188+
gopkg.in/go-jose/go-jose.v2 v2.6.1 // indirect
189+
gopkg.in/inf.v0 v0.9.1 // indirect
190+
gopkg.in/ini.v1 v1.67.0 // indirect
191+
gopkg.in/yaml.v2 v2.4.0 // indirect
54192
gotest.tools/v3 v3.5.1 // indirect
193+
k8s.io/api v0.26.2 // indirect
194+
k8s.io/apimachinery v0.26.2 // indirect
195+
k8s.io/client-go v0.26.2 // indirect
196+
k8s.io/klog/v2 v2.100.1 // indirect
197+
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
198+
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 // indirect
199+
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
200+
sigs.k8s.io/release-utils v0.7.3 // indirect
201+
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
202+
sigs.k8s.io/yaml v1.3.0 // indirect
55203
)

0 commit comments

Comments
 (0)