Back to Blog
high SEVERITY6 min read

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.

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

Answer Summary

Dependabot Missing Cooldown (CWE-1104: Use of Unmaintained Third Party Components) is a supply chain security vulnerability where Dependabot automatically proposes updates to packages immediately after publication without a safety buffer. The fix adds a `cooldown` block with `default-days: 7` to each package ecosystem in `.github/dependabot.yml`, creating a 7-day window for community detection and reporting of malicious packages before your project auto-updates.

Vulnerability at a Glance

cweCWE-1104 (Use of Unmaintained Third Party Components), CWE-494 (Download of Code Without Integrity Check)
fixAdd `cooldown: default-days: 7` block to each `package-ecosystem` entry under `updates`
riskAutomatic adoption of malicious or unstable packages immediately after publication, affecting all downstream consumers
languageYAML (GitHub Actions Configuration)
root causeDependabot configuration lacks cooldown period, triggering instant update proposals for newly released package versions
vulnerabilityDependabot Missing Cooldown Period

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

Introduction

In this Node.js library, Dependabot was configured to propose updates for three package ecosystems—pip, npm, and GitHub Actions—but a critical detail was missing: no cooldown period. This meant that the moment a new package version was published to PyPI, npm, or the GitHub Actions marketplace, Dependabot would immediately propose updating to it. For a downstream library distributed to other developers, this created a direct attack vector: a malicious actor could publish a weaponized package version and have it automatically adopted within minutes, potentially compromising all consumers of this library.

The vulnerability was detected in .github/dependabot.yml at line 5 (and subsequently at lines 14 and 25 for additional package ecosystems), where three package-ecosystem entries lacked the critical cooldown configuration block. The fix added cooldown: default-days: 7 to each ecosystem, creating a 7-day safety window that aligns with security community best practices.

The Vulnerability Explained

How It Manifests in the Code

The vulnerable configuration looked like this:

version: 2
updates:
  - package-ecosystem: pip
    directory: /
    schedule:
      interval: daily

Notice what's missing: there is no cooldown block. This means Dependabot will propose an update to every new pip package release immediately, with no delay. Similarly, the npm and GitHub Actions configurations (at lines 14 and 25 in the original file) lacked cooldown periods.

Why This Is a Supply Chain Attack Vector

In a typical typosquatting or package injection attack, a malicious actor would:

  1. Wait for a legitimate package update (e.g., a new version of a popular npm dependency)
  2. Publish a malicious version with a similar name or compromise an account
  3. Within minutes, Dependabot automatically proposes the malicious version
  4. Without human review delay, maintainers might merge the PR thinking it's a routine security update
  5. The malicious code is now in the library's dependencies and propagates to all downstream consumers

Real-world examples include the eslint-scope package hijacking (2018) and the UAParser.js compromise (2021), where malicious code was published and automatically pulled into projects within hours.

The Real Impact for This Project

Because this is a Node.js library distributed to downstream consumers, the risk is amplified:

  • Every time a dependency publishes a new version, Dependabot instantly proposes the update
  • The library maintainers might merge during off-hours or without careful review
  • The malicious dependency version is now baked into the library's dependency tree
  • When developers install this library, they inherit the compromised dependency
  • One malicious package affects potentially thousands of downstream projects

The 7-day cooldown doesn't eliminate risk, but it provides a critical window for:
- Security researchers to analyze new package releases
- The community to report suspicious behavior
- Package registries to act on reports and remove malicious packages
- Your team to review security advisories before auto-updating

The Fix

What Changed

The fix added a cooldown block with default-days: 7 to each of the three package-ecosystem entries. Here's the before-and-after for the pip ecosystem (lines 5-8):

Before:

  - package-ecosystem: pip
    directory: /
    schedule:
      interval: daily

After:

  - package-ecosystem: pip
    directory: /
    schedule:
      interval: daily
    cooldown:
      default-days: 7

This same pattern was applied to both the npm ecosystem (lines 14-16 in the diff) and the GitHub Actions ecosystem (lines 25-27 in the diff).

How This Solves the Problem

According to GitHub's Dependabot documentation, the cooldown parameter tells Dependabot to wait a specified number of days after a package version is published before proposing an update:

  • 7 days is a security industry standard, balancing protection with timely updates
  • During this window, security tools and the community analyze new releases
  • Malicious packages are typically flagged within days
  • Your team has time to review security advisories (CVEs, GitHub Security Advisories, etc.)
  • Critical patches can still be deployed manually if needed

The fix applies uniformly across all three package ecosystems (pip, npm, and GitHub Actions), ensuring that no dependency system bypasses the cooldown protection.

Prevention & Best Practices

1. Always Configure Cooldown Periods in Dependabot

Every .github/dependabot.yml file should include:

updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      interval: daily
    cooldown:
      default-days: 7  # Minimum recommended: 3-7 days

The 7-day default aligns with NIST and CISA recommendations for supply chain risk management.

2. Implement Additional Safeguards

Beyond cooldown periods, consider:

  • Require Pull Request Review: Set branch protection rules requiring manual approval before merging Dependabot PRs
  • Use Vulnerability Scanning: Tools like npm audit, pip check, and GitHub's Dependency Alert system catch known issues before you merge
  • Group Related Updates: Use Dependabot's groups feature (already present in this PR for dev dependencies) to batch updates and reduce PR fatigue
  • Monitor for Typosquatting: Use tools like Socket.dev or Snyk to detect suspicious packages in your dependency tree

3. Detect This Issue with Static Analysis

Semgrep and other SAST tools can automatically flag missing cooldown blocks:

semgrep --config=p/owasp-dependency-check .github/dependabot.yml

Alternatively, use this pattern to detect the vulnerability:

- id: dependabot-missing-cooldown
  pattern: |
    version: 2
    updates:
      - package-ecosystem: $ECOSYSTEM
        ...
        schedule:
          interval: $INTERVAL
  # Missing cooldown block triggers the rule

4. Apply Defense in Depth

  • Use signed commits and require signature verification for dependency updates
  • Implement Software Bill of Materials (SBOM) generation with tools like CycloneDX
  • Enable GitHub's Secret Scanning to catch leaked credentials in dependencies
  • Consider dependency pinning for critical production environments

Key Takeaways

  • Dependabot configurations without cooldown periods expose Node.js libraries to instant supply chain attacks: A malicious package can be auto-adopted within minutes, compromising all downstream consumers.

  • The .github/dependabot.yml file is production security infrastructure: Missing the cooldown block at line 5 (pip), line 14 (npm), and line 25 (GitHub Actions) created three separate attack vectors.

  • 7-day cooldown periods align with NIST/CISA supply chain security standards: This delay provides the security community time to detect and report malicious packages before your project auto-updates.

  • Dependabot's cooldown configuration requires explicit YAML entry: Unlike some security features that are enabled by default, cooldown periods must be manually configured in each package-ecosystem block.

  • Static analysis tools like Semgrep now detect this vulnerability automatically: Organizations can integrate this check into CI/CD pipelines to prevent future misconfigurations.

How Orbis AppSec Detected This

  • Source: GitHub Actions Dependabot configuration file (.github/dependabot.yml)
  • Sink: package-ecosystem entries lacking a cooldown block (lines 5, 14, 25)
  • Missing Control: No delay buffer between package publication and auto-update proposal
  • CWE: CWE-1104 (Use of Unmaintained Third Party Components) and CWE-494 (Download of Code Without Integrity Check)
  • Fix: Added cooldown: default-days: 7 block to all three package-ecosystem entries under updates

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

The missing Dependabot cooldown period is a high-severity supply chain vulnerability that can turn a routine dependency update into an attack vector. By adding a 7-day cooldown to each package ecosystem, this Node.js library now protects both itself and its downstream consumers from malicious package adoption.

For teams managing open-source libraries or critical infrastructure, configuring Dependabot cooldown periods is as essential as enabling branch protection rules. Combined with code review requirements, vulnerability scanning, and community monitoring, it forms a robust defense against supply chain attacks.

If you maintain a library or depend on hundreds of packages, audit your .github/dependabot.yml configuration today. Your users are counting on you to update safely.


References

Frequently Asked Questions

What is Dependabot Missing Cooldown?

It's a supply chain security misconfiguration where Dependabot proposes updates to packages immediately upon release without a delay buffer, increasing the risk of auto-adopting malicious or broken packages.

How do you prevent Dependabot Missing Cooldown in GitHub?

Add a `cooldown` block with `default-days: 7` (or higher) to each package ecosystem entry in your `.github/dependabot.yml` configuration file to create a safety window.

What CWE is Dependabot Missing Cooldown?

It relates to CWE-1104 (Use of Unmaintained Third Party Components) and CWE-494 (Download of Code Without Integrity Check), as it enables rapid adoption of unvetted third-party code.

Is manual code review enough to prevent malicious packages?

No—malicious packages can be published and auto-adopted within minutes. A cooldown period gives the security community time to detect and report threats before your project updates.

Can static analysis detect missing Dependabot cooldowns?

Yes—Semgrep and other SAST tools can identify missing `cooldown` blocks in `.github/dependabot.yml` by pattern matching the YAML structure.

View the Security Fix

Check out the pull request that fixed this vulnerability

View PR #750

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 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 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.

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.