Our offices

  • Exceev Consulting
    61 Rue de Lyon
    75012, Paris, France
  • Exceev Technology
    332 Bd Brahim Roudani
    20330, Casablanca, Morocco

Follow us

Preferences

Brand kit

9 min read - GitHub Package Firewall: Test the Exception Path Before Rollout

Software Supply Chain Security

Published October 22, 2026 · Author Exceev Consulting

Dependency policy usually arrives after the package. A scanner opens an alert, a developer reads it, and the team decides what to do with code that may already have run on a laptop or CI runner. GitHub's package firewall moves that decision in front of installation.

GitHub released the feature in public preview on 20 October 2026. It can inspect npm metadata and downloads requested by developer machines, CI systems and coding agents, then block a request under an enterprise policy. That timing is useful, but it creates a new operational dependency: if the firewall rejects a legitimate urgent update, can your team review and release it without switching the control off?

A useful pilot covers the happy path. It also tests the refusal and the exception.

What GitHub released

The 20 October announcement and package-firewall documentation describe a proxy between endpoints and the public npm registry. An administrator can configure five current checks:

  • active malware advisories in the GitHub Advisory Database;
  • vulnerability advisories at a chosen minimum severity;
  • the loss of a SLSA attestation on a version when earlier versions had one;
  • newly introduced preinstall or postinstall scripts;
  • a minimum package age between 1 and 365 days, with 0 disabling the age gate.

GitHub documents one day as the default minimum age. Malware blocking, attestation downgrade blocking and the install-script check are on by default; the vulnerability threshold starts at critical severity. Those defaults are product facts, not a risk assessment for your repositories.

The preview currently supports npm only and requires GitHub Enterprise Cloud. GitHub says the preview is free and plans metered billing for general availability. The feature and its terms can change before then.

Endpoints must use the enterprise-specific firewall URL rather than reaching the public registry directly. Each request also needs a GitHub token tied to an enterprise member or bot account. If a workstation, runner or agent can still use another registry route, the policy has a bypass outside GitHub's exception workflow.

Put the control in the right place

A package firewall answers a narrow question: should this requested version cross the installation boundary now? It does not establish that the dependency is well maintained, suitable for your application or free of code-level defects.

ControlDecision pointRemaining gap
Package firewallBefore npm metadata or a package reaches the endpointUnsupported ecosystems and alternate routes
Lockfile and npm ciWhen the build resolves an expected dependency treeA pinned version can still be hostile
Install-script approvalBefore a dependency's lifecycle script runsPackage code may execute later at application time
Composition analysisWhen known vulnerabilities match the dependency graphNew malware may lack an advisory
Provenance and attestationWhen the team checks how an artefact was producedProvenance does not prove benign behaviour
Build isolationWhen installed code attempts to reach secrets or systemsIsolation needs its own tested policy

The npm documentation shows that current npm releases can maintain version-pinned approvals for dependency install scripts. That control and a package firewall overlap at one risk, but they use different evidence. GitHub can flag a newly added install script before download; npm can deny an unapproved script even when the package passes the firewall.

Keep both decisions visible. A team that routes traffic through the firewall and then allows every lifecycle script has reduced one exposure without closing the execution boundary.

Design the exception before setting the age gate

A cooldown period buys observation time. It does not make an old version safe. The OpenSSF dependency-firewall guide describes package age as a risk-reduction measure and calls for an exception process for urgent patches and new internal packages.

GitHub's workflow lets a user request an override from a URL printed in npm or CI output. An enterprise administrator or security manager reviews the request, chooses a version or range and records a comment. Approving * allows every version of that package, which turns a one-release need into an open-ended policy change.

Define four fields before anyone can approve a request:

FieldRequired evidence
Requested scopeExact package and version; avoid a range unless the reason covers the range
Business reasonFailing build, urgent fix or documented delivery dependency
Technical reviewDiff, maintainer and publication checks, scripts, provenance and test result
Expiry and ownerNamed approver plus a date to remove or reassess the override

The product documentation explains how to add and remove an override, but it does not promise automatic expiry. Treat expiry as an operating task until the live product shows otherwise. A permanent exception list becomes a second, quieter registry policy unless someone reviews it.

The difficult case is a security update published inside the cooldown window. Your process should compare two risks: installing a version that has had little public observation, and remaining exposed to the defect fixed by that version. The approver needs evidence for that exact release; general trust in the publisher is not enough.

Run a pilot that can expose failure

Start with one representative JavaScript service and one disposable runner pool. Do not begin with every workstation. Record the current registry settings, lockfile, dependency update cadence, install scripts and CI credentials before rerouting traffic.

Then run these exercises:

  1. Install the locked dependency tree through the firewall and record latency, blocked versions and the reason returned to npm.
  2. Request a newly published test dependency so the age rule blocks it. Submit an exception, approve only the named version, retry the build and remove the override.
  3. Use a controlled package with a newly introduced install script. Confirm that the firewall blocks it and that npm's script policy supplies a second independent gate.
  4. Attempt a direct request to the public npm registry from the same runner. The test fails if the endpoint can bypass the proxy without an explicit break-glass path.
  5. Remove or expire the request token and observe the error. A useful rollout must distinguish an authentication failure from a package-policy rejection.
  6. Simulate an urgent dependency fix during the cooldown. Measure the time from block to evidence review, decision, successful build and subsequent override removal.

GitHub also documents experimental Artifactory integration. If your teams already use Artifactory, test the full virtual-repository chain; do not assume that configuring one remote removes every direct public-registry route.

The existing GitHub Actions lockfile approval guide shows how to review changes to build dependencies before merge. The Actions cache trust-boundary guide covers a different persistence path. A package gate, a reviewed lockfile and a cache policy work at separate moments, so one cannot stand in for the others.

Decide with operating evidence

Collect a small set of measures during the pilot: blocked requests by reason, false blocks, exception review time, overrides still active after their need has passed and direct-registry attempts. Separate developer machines, CI runners and agents because their credentials and tolerance for delay differ.

For a small company, the decision may be straightforward. If all production builds use npm, GitHub Enterprise Cloud already supplies the control plane, and one owner can review exceptions promptly, the preview can reduce exposure before installation. A mixed Python, Java and JavaScript estate still needs a wider registry strategy because this preview only covers npm.

Pause the rollout if developers need broad version ranges to keep builds moving, agents can rewrite registry settings, the review queue has no owner, or logs cannot separate policy blocks from outages. Also pause if the token supplied to every endpoint has more access than the documented read-only requirement. The proxy should not force the team to create a more dangerous credential pattern.

Proceed when every managed endpoint uses the expected route, urgent updates have a measured review path, overrides are narrow and removable, and unsupported ecosystems have a named control. Keep the preview status in the decision record and set a review date for pricing, package-manager coverage and policy changes.

Exceev's cybersecurity and custom engineering services can help teams map package flows, test CI and agent boundaries, and define the evidence required for an exception. The customer keeps responsibility for its supplier choices, credentials, security policy and release decisions.

Sources and limitations

We opened and reviewed every source below on 22 October 2026.

  • GitHub's 20 October announcement is the primary source for the preview launch, intended endpoints, npm-only scope, plan availability and stated billing direction.
  • GitHub's package-firewall documentation defines the current controls, defaults, authentication, npm and Artifactory setup, roles and exception workflow. GitHub marks the feature as subject to change.
  • npm's install-script documentation documents version-pinned script approvals and denials. It does not evaluate GitHub's firewall.
  • OpenSSF's dependency-firewall guide supplies independent analysis of install-time risk, cooldown limits, exceptions and layered controls. It is a guest article by an Aikido Security author, not a product certification or a test of GitHub's preview.

We did not access a GitHub Enterprise Cloud tenant, route a real runner through the preview, submit an override, measure availability, inspect GitHub's detection logic or verify future pricing. The pilot, evidence fields and stop conditions are Exceev's analysis, not GitHub, npm or OpenSSF requirements. This article does not claim that a package firewall prevents every supply-chain attack or creates a compliance outcome.

We should talk.

Exceev works with startups and SMEs on strategy, AI integration, custom engineering, and practical technology enablement.

More articles

AI Tool Atlas 2026, AI Tools, Agents, Models and Infrastructure

Explore Exceev’s continuously updated map of AI providers, agent frameworks, coding tools, model platforms, infrastructure, evaluation systems, and creative AI products.

Read more

Mechanical Turk Is Closing: Make Human Review Portable

AWS will close Mechanical Turk on 30 September. Preserve task logic, quality evidence and reviewer controls before choosing a replacement.

Read more

Tell us about your project

Our offices

  • Exceev Consulting
    61 Rue de Lyon
    75012, Paris, France
  • Exceev Technology
    332 Bd Brahim Roudani
    20330, Casablanca, Morocco