Skip to content

Commit f89da78

Browse files
committed
verify updater container image signatures using cosign
1 parent f12cbee commit f89da78

File tree

15 files changed

+1109
-90
lines changed

15 files changed

+1109
-90
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-signatures", 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: 151 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,53 +11,200 @@ require (
1111
github.com/hexops/gotextdiff v1.0.3
1212
github.com/moby/moby v27.5.1+incompatible
1313
github.com/moby/sys/signal v0.7.1
14+
github.com/sigstore/cosign/v2 v2.5.0
1415
github.com/spf13/cobra v1.9.1
1516
gopkg.in/yaml.v3 v3.0.1
1617
rsc.io/script v0.0.2
1718
)
1819

1920
require (
21+
cloud.google.com/go/compute/metadata v0.6.0 // indirect
2022
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
23+
github.com/AliyunContainerService/ack-ram-tool/pkg/credentials/provider v0.14.0 // indirect
24+
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
2125
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // 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.23 // indirect
29+
github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 // 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
2234
github.com/Microsoft/go-winio v0.6.2 // indirect
23-
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
35+
github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c // indirect
36+
github.com/ThalesIgnite/crypto11 v1.2.5 // indirect
37+
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect
38+
github.com/alibabacloud-go/cr-20160607 v1.0.1 // indirect
39+
github.com/alibabacloud-go/cr-20181201 v1.0.10 // indirect
40+
github.com/alibabacloud-go/darabonba-openapi v0.2.1 // indirect
41+
github.com/alibabacloud-go/debug v1.0.0 // indirect
42+
github.com/alibabacloud-go/endpoint-util v1.1.1 // indirect
43+
github.com/alibabacloud-go/openapi-util v0.1.0 // indirect
44+
github.com/alibabacloud-go/tea v1.2.1 // indirect
45+
github.com/alibabacloud-go/tea-utils v1.4.5 // indirect
46+
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
47+
github.com/aliyun/credentials-go v1.3.2 // indirect
48+
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
49+
github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect
50+
github.com/aws/aws-sdk-go-v2/config v1.29.10 // indirect
51+
github.com/aws/aws-sdk-go-v2/credentials v1.17.63 // indirect
52+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
53+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
54+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
55+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
56+
github.com/aws/aws-sdk-go-v2/service/ecr v1.40.3 // indirect
57+
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.31.2 // indirect
58+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
59+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
60+
github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 // indirect
61+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.2 // indirect
62+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect
63+
github.com/aws/smithy-go v1.22.2 // indirect
64+
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1 // indirect
65+
github.com/blang/semver v3.5.1+incompatible // indirect
66+
github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 // indirect
67+
github.com/clbanning/mxj/v2 v2.7.0 // indirect
68+
github.com/cloudflare/circl v1.3.7 // indirect
69+
github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect
2470
github.com/containerd/log v0.1.0 // indirect
2571
github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
72+
github.com/coreos/go-oidc/v3 v3.12.0 // indirect
73+
github.com/cyberphone/json-canonicalization v0.0.0-20231011164504-785e29786b46 // indirect
74+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
75+
github.com/digitorus/pkcs7 v0.0.0-20230818184609-3a137a874352 // indirect
76+
github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7 // indirect
77+
github.com/dimchansky/utfbom v1.1.1 // indirect
2678
github.com/distribution/reference v0.6.0 // indirect
2779
github.com/docker/distribution v2.8.3+incompatible // indirect
2880
github.com/docker/docker-credential-helpers v0.8.2 // indirect
2981
github.com/docker/go-connections v0.5.0 // indirect
3082
github.com/docker/go-units v0.5.0 // indirect
83+
github.com/dustin/go-humanize v1.0.1 // indirect
84+
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
3185
github.com/felixge/httpsnoop v1.0.4 // indirect
86+
github.com/fsnotify/fsnotify v1.8.0 // indirect
87+
github.com/go-chi/chi v4.1.2+incompatible // indirect
88+
github.com/go-jose/go-jose/v3 v3.0.4 // indirect
89+
github.com/go-jose/go-jose/v4 v4.0.5 // indirect
3290
github.com/go-logr/logr v1.4.2 // indirect
3391
github.com/go-logr/stdr v1.2.2 // indirect
92+
github.com/go-openapi/analysis v0.23.0 // indirect
93+
github.com/go-openapi/errors v0.22.1 // indirect
94+
github.com/go-openapi/jsonpointer v0.21.0 // indirect
95+
github.com/go-openapi/jsonreference v0.21.0 // indirect
96+
github.com/go-openapi/loads v0.22.0 // indirect
97+
github.com/go-openapi/runtime v0.28.0 // indirect
98+
github.com/go-openapi/spec v0.21.0 // indirect
99+
github.com/go-openapi/strfmt v0.23.0 // indirect
100+
github.com/go-openapi/swag v0.23.1 // indirect
101+
github.com/go-openapi/validate v0.24.0 // indirect
102+
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
34103
github.com/gogo/protobuf v1.3.2 // indirect
104+
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
105+
github.com/golang/protobuf v1.5.4 // indirect
106+
github.com/golang/snappy v0.0.4 // indirect
107+
github.com/google/certificate-transparency-go v1.3.1 // indirect
108+
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
109+
github.com/google/go-github/v55 v55.0.0 // indirect
110+
github.com/google/go-querystring v1.1.0 // indirect
111+
github.com/google/gofuzz v1.2.0 // indirect
112+
github.com/google/uuid v1.6.0 // indirect
113+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
114+
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
115+
github.com/imdario/mergo v0.3.16 // indirect
116+
github.com/in-toto/attestation v1.1.1 // indirect
117+
github.com/in-toto/in-toto-golang v0.9.0 // indirect
35118
github.com/inconshreveable/mousetrap v1.1.0 // indirect
119+
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect
120+
github.com/josharian/intern v1.0.0 // indirect
121+
github.com/json-iterator/go v1.1.12 // indirect
36122
github.com/klauspost/compress v1.18.0 // indirect
123+
github.com/letsencrypt/boulder v0.0.0-20240620165639-de9c06129bec // indirect
124+
github.com/mailru/easyjson v0.9.0 // indirect
125+
github.com/miekg/pkcs11 v1.1.1 // indirect
37126
github.com/mitchellh/go-homedir v1.1.0 // indirect
127+
github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect
38128
github.com/moby/docker-image-spec v1.3.1 // indirect
39129
github.com/moby/patternmatcher v0.6.0 // indirect
40130
github.com/moby/sys/sequential v0.6.0 // indirect
41131
github.com/moby/sys/user v0.3.0 // indirect
42132
github.com/moby/sys/userns v0.1.0 // indirect
43133
github.com/moby/term v0.5.2 // indirect
134+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
135+
github.com/modern-go/reflect2 v1.0.2 // indirect
136+
github.com/mozillazg/docker-credential-acr-helper v0.4.0 // indirect
137+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
138+
github.com/nozzle/throttler v0.0.0-20180817012639-2ea982251481 // indirect
139+
github.com/oklog/ulid v1.3.1 // indirect
44140
github.com/opencontainers/go-digest v1.0.0 // indirect
45141
github.com/opencontainers/image-spec v1.1.1 // indirect
142+
github.com/opentracing/opentracing-go v1.2.0 // indirect
143+
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
46144
github.com/pkg/errors v0.9.1 // indirect
145+
github.com/sagikazarmark/locafero v0.7.0 // indirect
146+
github.com/sassoftware/relic v7.2.1+incompatible // indirect
147+
github.com/secure-systems-lab/go-securesystemslib v0.9.0 // indirect
148+
github.com/segmentio/ksuid v1.0.4 // indirect
149+
github.com/shibumi/go-pathspec v1.3.0 // indirect
150+
github.com/sigstore/fulcio v1.6.6 // indirect
151+
github.com/sigstore/protobuf-specs v0.4.1 // indirect
152+
github.com/sigstore/rekor v1.3.9 // indirect
153+
github.com/sigstore/sigstore v1.9.1 // indirect
154+
github.com/sigstore/sigstore-go v0.7.1 // indirect
155+
github.com/sigstore/timestamp-authority v1.2.5 // indirect
47156
github.com/sirupsen/logrus v1.9.3 // indirect
157+
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
158+
github.com/sourcegraph/conc v0.3.0 // indirect
159+
github.com/spf13/afero v1.12.0 // indirect
160+
github.com/spf13/cast v1.7.1 // indirect
48161
github.com/spf13/pflag v1.0.6 // indirect
162+
github.com/spf13/viper v1.20.1 // indirect
163+
github.com/subosito/gotenv v1.6.0 // indirect
164+
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
165+
github.com/thales-e-security/pool v0.0.2 // indirect
166+
github.com/theupdateframework/go-tuf v0.7.0 // indirect
167+
github.com/theupdateframework/go-tuf/v2 v2.0.2 // indirect
168+
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
169+
github.com/tjfoc/gmsm v1.4.1 // indirect
170+
github.com/transparency-dev/merkle v0.0.2 // indirect
49171
github.com/vbatts/tar-split v0.12.1 // indirect
172+
gitlab.com/gitlab-org/api/client-go v0.127.0 // indirect
173+
go.mongodb.org/mongo-driver v1.14.0 // indirect
50174
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
51175
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
52176
go.opentelemetry.io/otel v1.35.0 // indirect
53177
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
54178
go.opentelemetry.io/otel/metric v1.35.0 // indirect
55179
go.opentelemetry.io/otel/trace v1.35.0 // indirect
56180
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
57-
golang.org/x/sync v0.12.0 // indirect
58-
golang.org/x/sys v0.31.0 // indirect
181+
go.uber.org/multierr v1.11.0 // indirect
182+
go.uber.org/zap v1.27.0 // indirect
183+
golang.org/x/crypto v0.37.0 // indirect
184+
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
185+
golang.org/x/mod v0.24.0 // indirect
186+
golang.org/x/net v0.38.0 // indirect
187+
golang.org/x/oauth2 v0.29.0 // indirect
188+
golang.org/x/sync v0.13.0 // indirect
189+
golang.org/x/sys v0.32.0 // indirect
190+
golang.org/x/term v0.31.0 // indirect
191+
golang.org/x/text v0.24.0 // indirect
59192
golang.org/x/time v0.11.0 // indirect
60193
golang.org/x/tools v0.31.0 // indirect
61-
google.golang.org/protobuf v1.36.5 // indirect
194+
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
195+
google.golang.org/protobuf v1.36.6 // indirect
196+
gopkg.in/inf.v0 v0.9.1 // indirect
197+
gopkg.in/ini.v1 v1.67.0 // indirect
198+
gopkg.in/yaml.v2 v2.4.0 // indirect
62199
gotest.tools/v3 v3.5.2 // indirect
200+
k8s.io/api v0.28.3 // indirect
201+
k8s.io/apimachinery v0.28.3 // indirect
202+
k8s.io/client-go v0.28.3 // indirect
203+
k8s.io/klog/v2 v2.130.1 // indirect
204+
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
205+
k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect
206+
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
207+
sigs.k8s.io/release-utils v0.11.1 // indirect
208+
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
209+
sigs.k8s.io/yaml v1.4.0 // indirect
63210
)

0 commit comments

Comments
 (0)