From b799d139c7db307ee8514ba3dc8bf6d28d4cdcd9 Mon Sep 17 00:00:00 2001 From: Samuel MARTIN MORO Date: Tue, 6 Jul 2021 16:58:14 +0200 Subject: [PATCH 1/2] fix(headers): application/vnd.oci.image.manifest.v1+json adds support for docker-registry based registries --- docker/docker.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/docker.go b/docker/docker.go index 346b6fc..5fbf0cc 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -471,7 +471,7 @@ func parseImageResponse(resp *http.Response, image *Image) error { } image.Digest = imageV2.Config.Digest image.schemaVersion = imageV2.SchemaVersion - case "application/vnd.docker.distribution.manifest.v1+prettyjws": + case "application/vnd.docker.distribution.manifest.v1+prettyjws", "application/vnd.oci.image.manifest.v1+json": body, err := ioutil.ReadAll(resp.Body) if err != nil { return fmt.Errorf("failed to read response body: %v", err) @@ -614,7 +614,7 @@ func (i *Image) pullReq() (*http.Response, error) { } // Prefer manifest schema v2 - req.Header.Set("Accept", "application/vnd.docker.distribution.manifest.v2+json, application/vnd.docker.distribution.manifest.v1+prettyjws, application/vnd.docker.distribution.manifest.list.v2+json") + req.Header.Set("Accept", "application/vnd.docker.distribution.manifest.v2+json, application/vnd.docker.distribution.manifest.v1+prettyjws, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.manifest.v1+json") utils.DumpRequest(req) resp, err := i.client.Do(req) if err != nil { From 9f7ca53eb4264e3e552848b850189e1af1a9e904 Mon Sep 17 00:00:00 2001 From: Samuel MARTIN MORO Date: Wed, 7 Jul 2021 15:16:59 +0200 Subject: [PATCH 2/2] fix(v1) found logs such as: `failed to convert schema1 from manifest: unsupported schema version 2` though I was pretty sure previous copy worked ... I did find vulnerabilities on other images from that registry, yesterday. --- docker/docker.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/docker.go b/docker/docker.go index 5fbf0cc..2115bcb 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -459,7 +459,7 @@ func newLocalDockerImage(config *Config) (containerregistry_v1.Image, error) { func parseImageResponse(resp *http.Response, image *Image) error { switch contentType := resp.Header.Get("Content-Type"); contentType { - case "application/vnd.docker.distribution.manifest.v2+json": + case "application/vnd.docker.distribution.manifest.v2+json", "application/vnd.oci.image.manifest.v1+json": var imageV2 imageV2 if err := json.NewDecoder(resp.Body).Decode(&imageV2); err != nil { fmt.Fprintln(os.Stderr, "Image V2 decode error") @@ -471,7 +471,7 @@ func parseImageResponse(resp *http.Response, image *Image) error { } image.Digest = imageV2.Config.Digest image.schemaVersion = imageV2.SchemaVersion - case "application/vnd.docker.distribution.manifest.v1+prettyjws", "application/vnd.oci.image.manifest.v1+json": + case "application/vnd.docker.distribution.manifest.v1+prettyjws": body, err := ioutil.ReadAll(resp.Body) if err != nil { return fmt.Errorf("failed to read response body: %v", err)