Skip to content

Container scanning does not support public docker registries

Summary

Container scanning does not support public docker registries like the ones available through docker.io.

Steps to reproduce

  1. Create a project with a .gitlab-ci.yml
  2. Add the following content to the file above:
include:
  - template: Security/Container-Scanning.gitlab-ci.yml
variables:
  DOCKER_IMAGE: python:3.4-alpine
  1. Run the pipeline and check the content of the container_scanning job.

Example Project

This pipeline can be used as an example.

What is the current bug behavior?

After the job has ended with failure the log will show:

GET https://auth.docker.io/token?scope=repository%3Alibrary%2Fpython%3Apull&service=registry.docker.io: unsupported status code 401; body: {"details":"incorrect username or password"}

What is the expected correct behavior?

The container scanner should be able to access the image and run the analyzer similar to the following:

[INFO] [2021-07-28 18:43:52 +0000] []  ▶  Scanning container python:3.4-alpine for vulnerabilities with severity level UNKNOWN or higher, with gcs 4.3.5 and Trivy Version: 0.19.2, advisories updated at 2021-07-28

Relevant logs and/or screenshots

Raw logs can be found here

Output of checks

Results of GitLab environment info

Expand for output related to GitLab environment info

(For installations with omnibus-gitlab package run and paste the output of:
`sudo gitlab-rake gitlab:env:info`)

(For installations from source run and paste the output of:
`sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)

Results of GitLab application Check

Expand for output related to the GitLab application check

(For installations with omnibus-gitlab package run and paste the output of: sudo gitlab-rake gitlab:check SANITIZE=true)

(For installations from source run and paste the output of: sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production SANITIZE=true)

(we will only investigate if the tests are passing)

Possible fixes

Only use CI_REGISTRY_USER / CI_REGISTRY_PASSWORD by default if image.domain == env['CI_REGISTRY'], and otherwise use anonymous auth.

Edited by Thiago Figueiró