Skip to content

Build Not yet confirmed elsewhere1 publisher 2 min read Published

GitLab's Dependency Firewall blocks bad packages before a CI job installs them

GitLab put Dependency Firewall into early access with policies for malicious status, severity, license and package age across six package managers. The check is meant to run while the CI job still holds its credentials, according to a dev.to write-up.

The Engineer · Build desk

How we use AI Send a correction

Gate misses public-index jobs, can block fixes How Dependency Firewall reaches Premium and Ultimate customers, CI jobs, urgent patches, bypass holders and AI-agent dependencies

Premium and Ultimate customers can use it on GitLab.com and Self-Managed. Public-index jobs sit outside the gate. A minimum-age rule blocks the newest version a critical fix needs. A one-person bypass can become a 3am bottleneck. AI coding agents add dependencies, often unreviewed.

Gate misses public-index jobs, can block fixes
WhoHowKindClaim
Premium and Ultimate customersCan use the firewall on both GitLab.com and GitLab Self-Managedcapability3
Jobs using a public indexSit outside the gate; teams should confirm every job resolves packages through a supported registryconstraint15
Teams shipping urgent patchesA minimum-age rule blocks the newest version, which is the one a critical fix needscost12
Bypass holdersA bypass only one person can grant turns into a 3am bottleneck when a hotfix trips the age policyconstraint13
AI coding agentsAdd dependencies on their own, often unreviewed; a typosquat can reach a merge request nobody readsexposure11

What happened

  • The GitLab blog says Premium and Ultimate customers can use the firewall on GitLab.com and on GitLab Self-Managed.
  • Each policy runs in warn mode, which logs matches and lets the build continue, or block mode, which stops the pipeline; a logged bypass lets a designated user or token proceed.
  • It integrates with GitLab Artifact Central as well as with external Sonatype Nexus Repository and JFrog Artifactory registries.
  • In June 2026, GitLab researchers found five malicious PyPI packages, four of them typosquats of Flask, Requests and NumPy, that ran at install time and stole CI/CD credentials.

Why it matters

  • exposure A job that installs straight from a public index never meets the gate, so teams have to confirm every job resolves through a supported registry before trusting the policy.
  • constraint The minimum-age rule blocks the newest version by design, which is exactly the version a critical patch is.
  • decision Teams must pick who holds the bypass before turning on blocking, because a single holder becomes a 3am bottleneck and bypass tokens are credentials themselves.
  • precedent AI agents add dependencies that reach merge requests unread, so a policy gate covers a case human diff review does not.

The placement matters because of how installs work. Code that runs during pip install executes inside the job and can use any token, cloud credential or deploy key the job has access to, according to the dev.to write-up [9]. A scanner that reports it afterwards is useful for reconstructing the incident, but by then the secrets have left [10]. Rotating them is where the response gets expensive, and someone usually gets paged to do it [10].

The write-up does not say where the firewall intercepts the install. The registry integrations [4] suggest it sits at the registry. That is our inference. It would put the policy where Sonatype and JFrog already sell curation products, inside the repository manager [19]. What GitLab adds, on this account, is one policy layer that also fronts those third-party registries [4].

The write-up's author suggests an order of work. Start every policy in warn mode, leave it running through an ordinary week of pipelines, then review what it would have stopped [17]. The license and severity policies are the ones most likely to flag dependencies a team already ships [17]. Move the malicious-status policy to block first, because it has the fewest legitimate matches and does the most damage if it misses [18].

Teams without a registry-level gate usually stack smaller controls. Renovate's minimumReleaseAge setting delays update pull requests until a release has aged [20]. That is the same idea as GitLab's age policy, applied when the update is proposed instead of when it is installed [20]. Lockfiles with hashes, such as pip install --require-hashes and npm ci, keep an artifact from changing under you [21]. They do nothing about a malicious package that was pinned on purpose [21].

Coverage has two limits. The malicious-status check depends on how up to date GitLab's malware advisory database is, and ecosystems outside the six listed managers are not covered yet [16]. GitLab says more package managers are coming [5]. The write-up reports no detection rates or false-positive counts, and the June PyPI case [8] shows what the feature targets, not how much of it the policies catch.

What to watch

  • Whether GitLab adds package managers beyond npm, pip, Poetry, Maven, Gradle and Bundler, as it says it will.
  • Whether GitLab publishes detection or false-positive figures for the malware advisory database match.
  • Whether GitLab documents where the firewall intercepts the install for jobs that do not resolve through a supported registry.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence45
Adoption
Insufficient
Hype gap−10
Incentives
Insufficient
Confidence55
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    GitLab introduced Dependency Firewall in early access at its Transcend event; it is a policy layer that blocks malicious, vulnerable and non-compliant packages before they reach a build.

    Reported Supported Source: dev.to write-upView cited source
  2. [2]

    Most dependency scanning reports on a package after a job has already installed it; the firewall is meant to stop the package before install, while the job still holds its credentials and nothing hostile has executed.

    Reported Supported Source: dev.to write-upView cited source
  3. [3]

    Per the GitLab blog, the firewall is available to Premium and Ultimate customers on both GitLab.com and GitLab Self-Managed.

    Reported Supported Source: GitLab blog, as cited by dev.toView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · October 15, 2026

    GitLab's Dependency Firewall moves package policy in front of the build

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Loading related stories