Back to Blog
high SEVERITY7 min read

How Missing Dependabot Cooldown Periods Enable Supply Chain Attacks in CI/CD Pipelines and How to Fix Them

We fixed a high-severity supply chain security gap in `.github/dependabot.yml` where missing cooldown periods allowed immediate adoption of newly published packages. The fix adds `cooldown: default-days: 7` to all package ecosystems, creating a critical security buffer against typosquatting and malicious dependency attacks.

O
By Orbis AppSec
Published August 31, 2026Reviewed August 31, 2026

Answer Summary

CVE-2026-48779 is a supply chain security vulnerability in Dependabot configuration files where missing cooldown periods enable automatic updates to freshly published, potentially malicious packages. The vulnerability exists in `.github/dependabot.yml` when `package-ecosystem` entries lack a `cooldown` block with `default-days`. The fix, identified by CWE-1104: Use of Unmaintained Third Party Components, adds `cooldown: default-days: 7` to each ecosystem entry, creating a mandatory 7-day waiting period before Dependabot proposes updates to new package versions. This prevents immediate adoption of compromised dependencies in npm and GitHub Actions ecosystems.

Vulnerability at a Glance

cweCWE-1104 (Use of Unmaintained Third Party Components) / CWE-829 (Inclusion of Functionality from Untrusted Control Sphere)
fixAdd `cooldown: default-days: 7` to each `package-ecosystem` entry in `.github/dependabot.yml`
riskAutomatic installation of malicious or backdoored dependencies within hours of publication
languageYAML (Dependabot Configuration)
root causeAbsence of `cooldown` configuration allowing same-day updates to zero-day packages
vulnerabilityMissing Dependabot Cooldown (Supply Chain Security)

Introduction

In a production web service repository, we discovered a high-severity supply chain security gap hiding in plain sight: .github/dependabot.yml at line 3 was configured to automatically propose updates to packages within hours of their publication. The file handles automated dependency management for both npm and GitHub Actions ecosystems, but the absence of a cooldown period created a direct path for attackers to inject malicious code into the build pipeline.

The vulnerable configuration looked like this:

version: 2
updates:
- package-ecosystem: "npm"
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10

Notice what's missing? There's no cooldown block. This means Dependabot would propose an update to ws version 8.18.0 (the package with CVE-2026-48779's denial of service vulnerability) the same day it was published—before the security community could identify and report the issue.

For developers managing CI/CD pipelines, this pattern is especially dangerous because it automates a critical security decision: when to trust a new dependency version.

The Vulnerability Explained

The Specific Problem

The Semgrep scanner flagged this with rule package_managers.dependabot.dependabot-missing-cooldown.dependabot-missing-cooldown, identifying that both package-ecosystem: "npm" and package-ecosystem: "github-actions" entries lacked cooldown configuration. The scanner matched at line 3, the start of the first ecosystem entry.

The vulnerable pattern:

- package-ecosystem: "npm"    # Line 3 - flagged location
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10
  # NO cooldown block here!

How It Could Be Exploited

Here's a concrete attack scenario targeting this specific configuration:

  1. Attacker publishes malicious package: An attacker typosquats a popular npm package (like ws-patched instead of ws) or compromises a maintainer account to publish a backdoored version of a legitimate package.

  2. Zero-day window: The malicious package is published at 9:00 AM UTC. At this point, no security scanners have flagged it, no CVE exists, and the package appears legitimate with proper semantic versioning.

  3. Dependabot immediate proposal: Because interval: daily runs Dependabot checks every 24 hours, and there's no cooldown to delay new versions, Dependabot detects the "update" during its next run at 2:00 PM UTC—just 5 hours after publication.

  4. Auto-merge danger: If the repository uses automated merge rules for Dependabot PRs (common in devOps environments), or if developers habitually merge green PRs quickly, the malicious dependency enters the build pipeline within hours.

  5. Production compromise: The ws package specifically handles WebSocket connections. A malicious version could exfiltrate data from WebSocket messages, create backdoors in connection handlers, or exploit the memory exhaustion vulnerability in CVE-2026-48779 to crash production services.

Real-World Impact

For this web service, the impact was severe:

  • Immediate exposure window: Any npm or GitHub Actions update could be adopted before community vetting
  • Automated attack surface: The daily interval combined with no cooldown created predictable, automatable exploitation timing
  • Cascading supply chain risk: A compromised GitHub Action in the workflow could exfiltrate repository secrets, modify source code, or inject malware into build artifacts

The package-lock.json file's mention of ws is particularly relevant—this is a WebSocket library with a history of security issues. A malicious ws update proposed by Dependabot could exploit the very memory exhaustion vulnerability (CVE-2026-48779) that legitimate updates might fix, but with attacker-controlled payload delivery.

The Fix

Specific Changes Made

The fix adds cooldown configuration with default-days: 7 to both package-ecosystem entries:

Before (vulnerable):

version: 2
updates:
- package-ecosystem: "npm"
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10

After (fixed):

version: 2
updates:
- package-ecosystem: "npm"
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10
  cooldown:
    default-days: 7
- package-ecosystem: "github-actions"
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 10
  cooldown:
    default-days: 7

How This Solves the Problem

The cooldown: default-days: 7 configuration creates a mandatory 7-day embargo period after any package's initial publication before Dependabot will propose it as an update. This transforms the attack timeline:

Stage Without Cooldown With 7-Day Cooldown
Malicious package published Day 0, 9:00 AM Day 0, 9:00 AM
Dependabot detects update Day 0, 2:00 PM Day 7, 2:00 PM
Security community flags issue Day 1-3 (typical) Already flagged by Day 7
Repository exposure risk HIGH (hours) LOW (vetting window)

The 7-day window aligns with typical security research timelines: npm's security team, GitHub's advisory database, and community scanners usually identify malicious packages within 24-72 hours of publication. By day 7, malicious versions are typically yanked or flagged, and Dependabot will skip proposing them.

Why Both Ecosystems Needed the Fix

Both npm and github-actions ecosystems required identical cooldown configuration because:

  • npm: Direct dependency supply chain for application code—malicious packages execute in production
  • github-actions: Indirect supply chain compromise—malicious actions execute during CI/CD with repository secrets and write permissions

GitHub Actions supply chain attacks have become increasingly common, with attackers publishing actions that appear to provide useful functionality but exfiltrate GITHUB_TOKEN secrets or modify repository contents.

Prevention & Best Practices

Configuration Hardening

  1. Mandatory cooldown for all ecosystems: Every package-ecosystem entry should have:
    yaml cooldown: default-days: 7 # Minimum; consider 14-30 for critical systems

  2. Conservative schedule intervals: Consider weekly instead of daily for less critical dependencies, reducing the frequency of update proposals.

  3. Review requirements for Dependabot PRs: Never auto-merge Dependabot PRs. Require human review with specific security checks:
    - Verify package publication date (should be >7 days ago with cooldown)
    - Check npm/GitHub security advisories
    - Review diff of actual changes

Detection Tools

  • Semgrep: Use rule package_managers.dependabot.dependabot-missing-cooldown in CI pipelines
  • GitHub Advanced Security: Enable dependency review to block PRs with known vulnerabilities
  • npm audit: Run in CI to catch known vulnerabilities before deployment

Security Standards

  • OWASP Software Component Verification Standard (SCVS): Controls for third-party component management
  • SLSA (Supply-chain Levels for Software Artifacts): Framework for securing build pipelines
  • CWE-1104: Use of Unmaintained Third Party Components
  • CWE-829: Inclusion of Functionality from Untrusted Control Sphere

Key Takeaways

  • Always configure cooldown: default-days: 7 in .github/dependabot.yml for every package-ecosystem entry—this is not a default, it must be explicit
  • The interval schedule does not protect against zero-day packages—only cooldown creates the necessary publication-to-proposal delay
  • GitHub Actions ecosystems need the same protection as npm—compromised actions have privileged access to your build environment and secrets
  • 7 days is the security community's minimum vetting window—shorter periods risk including packages before they're flagged; longer periods (14-30 days) add safety for critical systems
  • Dependabot configuration is production security infrastructure—treat .github/dependabot.yml with the same security rigor as application code

How Orbis AppSec Detected This

  • Source: The .github/dependabot.yml configuration file, specifically the package-ecosystem entries at lines 3 and 9
  • Sink: The absence of cooldown configuration allowing immediate proposal of newly published package versions
  • Missing control: No default-days waiting period to validate package stability and legitimacy before automated update proposals
  • CWE: CWE-1104 (Use of Unmaintained Third Party Components) and CWE-829 (Inclusion of Functionality from Untrusted Control Sphere)
  • Fix: Added cooldown: default-days: 7 to both npm and github-actions package ecosystem entries, enforcing a mandatory 7-day embargo on new package versions

Orbis AppSec automatically detected this vulnerability and opened a pull request with the fix. Try Orbis AppSec on your repositories to find and fix issues like this automatically.

Conclusion

Supply chain security requires defense in depth at every automation touchpoint. The missing cooldown configuration in .github/dependabot.yml represented a single point of failure where legitimate automation could become an attack vector. By adding cooldown: default-days: 7 to both npm and GitHub Actions ecosystems, we've inserted a critical security buffer that aligns automated dependency management with community vetting timelines.

For development teams, this fix serves as a reminder: your CI/CD configuration files are as security-critical as your application code. Review your Dependabot configurations today, and ensure every package-ecosystem has an appropriate cooldown period. The 7-day wait could be the difference between blocking a supply chain attack and becoming its next victim.

References

  • CWE-1104: Use of Unmaintained Third Party Components — https://cwe.mitre.org/data/definitions/1104.html
  • CWE-829: Inclusion of Functionality from Untrusted Control Sphere — https://cwe.mitre.org/data/definitions/829.html
  • GitHub Dependabot Cooldown Documentation — https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#cooldown
  • Semgrep Rule: dependabot-missing-cooldown — https://semgrep.dev/r?q=package_managers.dependabot.dependabot-missing-cooldown
  • OWASP SCVS (Software Component Verification Standard) — https://owasp.org/www-project-scvs/
  • fix: this dependabot configuration does not set a co... in...

Frequently Asked Questions

What is a Dependabot cooldown vulnerability?

It's a supply chain security misconfiguration where Dependabot proposes updates to packages immediately after publication, without a waiting period to assess stability or detect malicious releases.

How do you prevent Dependabot cooldown vulnerabilities in YAML?

Add a `cooldown` block with `default-days: 7` (or higher) to every `package-ecosystem` entry in `.github/dependabot.yml` to enforce a mandatory delay before update proposals.

What CWE is Dependabot missing cooldown?

CWE-1104 (Use of Unmaintained Third Party Components) and CWE-829 (Inclusion of Functionality from Untrusted Control Sphere), as it enables immediate inclusion of unvetted third-party code.

Is setting `interval: weekly` enough to prevent this vulnerability?

No. The schedule interval controls how often Dependabot checks for updates, not how long to wait after a package's initial publication. A malicious package published today could still be proposed immediately on the next check.

Can static analysis detect missing Dependabot cooldown?

Yes. Semgrep's rule `package_managers.dependabot.dependabot-missing-cooldown` specifically flags this pattern, matching `package-ecosystem` entries without adjacent `cooldown` blocks.

View the Security Fix

Check out the pull request that fixed this vulnerability

View PR #17378

Related Articles

critical

How a vulnerable websocket-driver dependency happens in Node.js lockfiles and how to fix it

A Trivy scan flagged `websocket-driver@0.7.4` in this repository's `bun.lock` as affected by CVE-2026-54466, a critical issue in a WebSocket protocol handler that parses untrusted HTTP upgrade requests and frame data. The fix upgrades the package to `0.7.5` and adds an explicit `websocket-driver` entry to the lockfile's override block so every transitive consumer — webpack-dev-server, sockjs, faye-websocket — resolves to the patched build instead of the pinned vulnerable one.

high

How Dependabot Missing Cooldown Periods Enable Supply Chain Attacks and How to Fix It

A critical security vulnerability in `.github/dependabot.yml` was exposing a Node.js library to supply chain attacks by automatically updating to newly published packages without a safety delay. By adding a 7-day cooldown period to each package ecosystem configuration, the project now protects against malicious or unstable package versions that could affect downstream consumers.

high

How Exponential-Time Complexity Causes Denial of Service in brace-expansion and How to Fix It

A critical vulnerability in brace-expansion versions 1.1.13 and earlier allowed attackers to cause denial of service through crafted brace pattern inputs. The fix upgrades to patched versions 1.1.16, 2.1.2, and 5.0.7, eliminating the exponential-time complexity that made exploitation possible.

high

How unrestricted file upload via extension-only validation happens in Deno/JavaScript and how to fix it

The review image upload handler in this Deno-based app trusted the client-supplied filename extension to decide whether a file was a "safe" image, without ever inspecting the actual file bytes. The fix adds magic-byte signature verification for PNG, JPEG, GIF, and WEBP formats before the file is written to disk, closing the door on disguised executables and malicious payloads.

high

How Dependabot Missing Cooldown Vulnerability Happens in GitHub Actions and How to Fix It

Dependabot configurations without cooldown periods can automatically propose updates from newly published packages within hours—potentially including malicious or unstable versions. This vulnerability in `.github/dependabot.yml` was fixed by adding a `cooldown` block with `default-days: 7` to delay updates and allow time for community vetting.

high

How dependabot-missing-cooldown happens in GitHub Actions configuration and how to fix it

A high-severity vulnerability in `.github/dependabot.yml` left this repository vulnerable to supply chain attacks through immediate adoption of newly published packages. The fix adds a mandatory 7-day cooldown period to all three package ecosystems, preventing automatic updates to potentially malicious or unstable dependencies before they can be vetted by the community.