Skip to main content

Controls

Plumber checks your CI/CD configuration and project settings against a catalog of controls, split per provider: GitLab controls inspect .gitlab-ci.yml and GitLab project settings, GitHub controls inspect .github/workflows/*.yml and GitHub repository settings. Pick a provider tab below, or All for the whole catalog with one row per control.

A control that is not respected raises an issue. Click the ISSUE-XXX link in any row for its full description, impact, and remediation.

CI/CD provider

CI/CD Container Images

ControlWhat it checksWhy it matters
Container images must come from authorized sources ISSUE-101Verifies that container images used to run your CI/CD pipelines come from authorized and trusted sources.Helps mitigate security risks introduced by the use of malicious, compromised, or vulnerable images.
Container images must not use forbidden tags ISSUE-102ISSUE-103Verifies that container images used to run your CI/CD pipelines rely on authorized tags.Helps mitigate both security and functional risks introduced by the use of unverified, outdated, or compromised image versions.

CI/CD Variables

ControlWhat it checksWhy it matters
CI/CD variables must be protected ISSUE-201Verifies that CI/CD variables used in a project have the protected field enabled.Ensures sensitive values are restricted to protected branches or tags, reducing unauthorized exposure.
CI/CD variables must be masked ISSUE-202Verifies that CI/CD variables used in a project have the masked field enabled.Prevents variable values from being exposed in pipeline logs, reducing the risk of leaks.
Pipeline must not enable debug trace ISSUE-203Verifies that CI_DEBUG_TRACE and CI_DEBUG_SERVICES are not enabled in the pipeline configuration.Prevents exposure of all CI/CD variable values in job logs, including secrets and tokens.
Pipeline must not use unsafe variable expansion ISSUE-204Detects user-controlled CI variables expanded in shell re-interpretation contexts (eval, sh -c/bash -c, envsubst or xargs piped into a shell, source/. sourcing).Prevents command injection via crafted branch names, MR titles, or commit messages (OWASP CICD-SEC-1).
Pipeline must not override job variables ISSUE-205Detects controlled CI/CD variables redefined in .gitlab-ci.yml that should only be set in GitLab CI/CD Settings.Reduces risk of tampering with scanner settings or other governed variables via pipeline YAML.

Pipeline Composition

ControlWhat it checksWhy it matters
Pipeline must not contains hardcoded jobs ISSUE-401Verifies that no hardcoded job is used in CI/CD pipelines.Improves maintainability and keeps pipelines aligned with best practices.
Includes must not use ambiguous tag/branch refs ISSUE-402Flags include: refs (project ref: or CI/CD component @version) that resolve upstream as both a tag and a branch. API-backed: stays silent when the upstream probe cannot run.A tag deletion or rename can silently rebind the include to a mutable branch, swapping the revision that runs. Pin by commit SHA.
Pipeline must use only up-to-date includes ISSUE-403Verifies that the included pipelines are up-to-date compared to their source.Reduces risks from outdated or vulnerable templates.
Pipeline must not use forbidden ref in includes ISSUE-404Verifies that the included refs are using specified tags.Prevents reliance on insecure or unapproved references.
Pipelines must include templates ISSUE-405ISSUE-406Verifies that the projects contain specific templates. This control can also allow overriding certain variables in the included templates.Ensures pipelines follow the security practices your policy requires.
Pipelines must include components ISSUE-408ISSUE-409Verifies that the projects contain specific GitLab components. This control can also allow overriding certain variables in the included components.Ensures pipelines integrate mandatory security steps.
Security jobs must not be weakened ISSUE-410Detects security scanning jobs (SAST, Secret Detection, Container Scanning, etc.) weakened by allow_failure: true, rules: overrides with when: never / when: manual, or when: manual at job level.Prevents silently neutralized security scans that give a false sense of security (OWASP CICD-SEC-4).
Pipeline must not execute unverified scripts ISSUE-411Detects jobs that download and immediately execute scripts from the internet (curl | bash, wget | sh, download-then-execute, base64 pipe-to-shell) without integrity verification.Prevents supply chain attacks where a compromised URL serves a modified script that exfiltrates secrets (OWASP CICD-SEC-3, CICD-SEC-8).
Pipeline must not use Docker-in-Docker ISSUE-412ISSUE-413Detects Docker-in-Docker (docker:dind) services and insecure daemon configuration (for example plaintext Docker API).Reduces container escape and lateral movement risk on shared runners; prefer Kaniko or Buildah for image builds.

Access and Authorization

ControlWhat it checksWhy it matters
Branch must be protected ISSUE-501ISSUE-505Verifies that the project configuration respects the protection, push, merge and owner approval on included branch names.Prevents unauthorized modifications and enforces branch protection standards.
MR approval rules must require a minimum number of approvals ISSUE-502Verifies that the project merge request approval rules that cover all protected branches have a minimum number of approval requirements.Prevents unreviewed code from being merged, reducing security risks.
MR approval settings must be compliant ISSUE-503Verifies that the project's merge request approval settings meet your expectations: who may approve (authors, committers), whether approval rules can be overridden per merge request, whether approving requires re-authentication, and what happens to approvals when a commit is added. Requires GitLab Premium or Ultimate.Approval settings sit above every approval rule: if authors can approve their own merge requests or approvals survive new commits, the review requirement can be satisfied without anyone reviewing the code that ships.
MR approval rules must cover all protected branches ISSUE-504Verifies that the protected branches have at least one approval rule.Ensures protected branches cannot bypass review processes.
MR settings must be compliant ISSUE-506Verifies that the project's merge request settings are correct in terms of merge method, resolving differences, squashing, etc.Reduces risk of unauthorized or insecure code changes.

Security Source

ControlWhat it checksWhy it matters
Project must have a security policy source ISSUE-601Verifies that the project directly links the expected GitLab security policy project. A source inherited from a parent group does not count: the check reads the project's own link.Ensures the security policy is applied and reduces the risk of unmanaged vulnerabilities. Security policies require the GitLab Ultimate tier.