Back to Blog
high SEVERITY8 min read

How missing Dependabot cooldown periods happen in GitHub Actions configuration and how to fix it

A high-severity vulnerability was discovered in `.github/dependabot.yml` where the GitHub Actions package ecosystem lacked a cooldown period for newly published packages. This configuration gap could have allowed malicious or unstable packages to be automatically proposed for integration within minutes of publication, exposing the project and its downstream consumers to supply chain attacks. The fix adds a 7-day cooldown period to wait before accepting updates from newly published package versio

O
By Orbis AppSec
Published July 29, 2026Reviewed July 29, 2026

Answer Summary

Missing Dependabot cooldown periods in GitHub Actions configuration (CWE-1104: Use of Unmaintained Third Party Components) allow newly published—potentially malicious or compromised—packages to be automatically proposed for updates immediately after release. This vulnerability was found in `.github/dependabot.yml` where the `github-actions` package ecosystem had no cooldown block. The fix adds `cooldown: { default-days: 7 }` to enforce a 7-day waiting period before proposing updates to newly published package versions, giving the security community time to identify malicious packages before they enter the dependency chain.

Vulnerability at a Glance

cweCWE-1104 (Use of Unmaintained Third Party Components)
fixAdd `cooldown: { default-days: 7 }` block to wait 7 days before proposing updates
riskAutomatic integration of malicious or unstable newly-published packages
languageGitHub Actions YAML configuration
root causeNo cooldown configuration in `.github/dependabot.yml` for github-actions ecosystem
vulnerabilityMissing Dependabot cooldown period for supply chain protection

Introduction

In this Node.js library's .github/dependabot.yml file at line 6, we discovered a high-severity supply chain security vulnerability: the GitHub Actions package ecosystem was configured without a cooldown period for newly published packages. This seemingly minor configuration omission could have exposed the project—and critically, all downstream consumers who depend on this library—to supply chain attacks through malicious or compromised packages that could be automatically proposed for integration within minutes of their publication.

The vulnerable configuration looked innocent enough:

- package-ecosystem: "github-actions"
  directories:
    - "/"
  groups:
    github-actions:
      patterns:
        - "*"  # Group all Actions updates into a single larger pull request
  schedule:
    interval: weekly

Notice what's missing? There's no cooldown block. This means Dependabot would immediately propose updates to the latest versions of GitHub Actions, even if those versions were published just seconds ago—before the security community had any chance to vet them for malicious code, backdoors, or vulnerabilities.

The Vulnerability Explained

The Attack Vector: Speed as a Weapon

Supply chain attacks have evolved. Sophisticated attackers now exploit the velocity of automated dependency management systems. Here's how this vulnerability could be weaponized:

Attack Scenario for THIS Configuration:

  1. An attacker compromises a popular GitHub Action (or creates a typosquatted variant)
  2. They publish a malicious version at 9:00 AM
  3. Dependabot's weekly schedule runs at 9:15 AM (no cooldown configured)
  4. Within minutes, a pull request is automatically opened proposing the malicious update
  5. A maintainer, seeing what appears to be a routine Dependabot update, merges it
  6. The malicious code now executes in this library's CI/CD pipeline
  7. Critical impact: Since this is a Node.js library, the compromised build artifacts could be published to npm, distributing the malicious code to all downstream consumers

Real-World Context: Why This Matters for Libraries

The PR description explicitly notes: "This is a Node.js library - vulnerabilities affect downstream consumers who use this package." This amplifies the impact exponentially. A supply chain compromise here doesn't just affect one repository—it affects every project that depends on this library, creating a cascade of potential security incidents.

The Specific Code Pattern That Created Risk

The vulnerable pattern in .github/dependabot.yml was:

updates:
  - package-ecosystem: "github-actions"
    directories:
      - "/"
    groups:
      github-actions:
        patterns:
          - "*"
    schedule:
      interval: weekly
    # ❌ NO COOLDOWN BLOCK HERE

Without a cooldown period, the configuration essentially says: "Trust every newly published GitHub Action version immediately." This violates the security principle of "trust but verify"—there's no verification window.

Historical Precedent

This isn't theoretical. The security community has documented numerous supply chain attacks:

  • event-stream incident (2018): Malicious code added to a popular npm package
  • codecov bash uploader (2021): Compromised script exfiltrated credentials
  • ctx npm package (2022): Typosquatting attack with password-stealing code
  • GitHub Actions marketplace attacks (2023): Multiple incidents of compromised or malicious Actions

In each case, time was critical. Malicious packages were often identified within 24-72 hours by security researchers, but automated systems that updated immediately were already compromised.

The Fix

The fix is elegantly simple but powerfully effective. Here's the exact change made to .github/dependabot.yml:

diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index be006de9..9142c861 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -11,3 +11,5 @@ updates:
           - "*"  # Group all Actions updates into a single larger pull request
     schedule:
       interval: weekly
+    cooldown:
+      default-days: 7

Before and After Comparison

Before (Vulnerable):

- package-ecosystem: "github-actions"
  directories:
    - "/"
  groups:
    github-actions:
      patterns:
        - "*"
  schedule:
    interval: weekly
  # Immediate updates to newly published packages ❌

After (Secure):

- package-ecosystem: "github-actions"
  directories:
    - "/"
  groups:
    github-actions:
      patterns:
        - "*"
  schedule:
    interval: weekly
  cooldown:
    default-days: 7  # Wait 7 days before proposing updates ✅

How This Specific Change Solves the Problem

The cooldown block with default-days: 7 creates a mandatory waiting period. Now, when a new version of a GitHub Action is published:

  1. Day 0: New version published
  2. Days 1-7: Cooldown period (Dependabot ignores this version)
    - Security researchers analyze the new version
    - The community reports any malicious behavior
    - GitHub Security Lab can review and potentially remove malicious Actions
  3. Day 8+: If the version is still available and no issues reported, Dependabot proposes the update

This 7-day window is based on industry research showing that most malicious packages are identified and reported within 3-5 days of publication. The 7-day cooldown provides a safety buffer.

The Security Improvement

This change implements defense-in-depth for supply chain security:

  • Layer 1: GitHub's marketplace vetting (pre-publication)
  • Layer 2: Community security analysis (0-7 days post-publication)
  • Layer 3: This cooldown period (7-day verification window)
  • Layer 4: Code review of Dependabot PRs (human verification)

Without the cooldown, Layer 2 was effectively bypassed. Now, the configuration gives the security community time to act as a distributed security scanner before updates reach this codebase.

Prevention & Best Practices

1. Always Configure Cooldowns in Dependabot

For every package ecosystem in your dependabot.yml, add a cooldown block:

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    cooldown:
      default-days: 7  # ✅ Add this

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7  # ✅ Add this

2. Adjust Cooldown Periods Based on Risk

Not all ecosystems carry equal risk. Consider:

  • High-risk ecosystems (npm, PyPI, GitHub Actions): 7-14 days
  • Medium-risk ecosystems (Go modules with checksum database): 3-7 days
  • Lower-risk ecosystems (Docker images from official registries): 3-5 days

3. Implement Automated Configuration Validation

Use static analysis to enforce cooldown policies. The regression test included in the PR demonstrates this:

describe("Dependabot configuration must contain cooldown periods", () => {
  it("validates the actual .github/dependabot.yml file", () => {
    const dependabotPath = path.join(__dirname, '..', '..', '.github', 'dependabot.yml');
    const fileContent = fs.readFileSync(dependabotPath, 'utf8');
    const config = yaml.load(fileContent);

    config.updates.forEach(update => {
      expect(update.cooldown).to.exist;
      expect(update.cooldown['default-days']).to.be.at.least(7);
    });
  });
});

This test ensures that future configuration changes don't accidentally remove the cooldown protection.

4. Layer Additional Supply Chain Protections

Cooldowns are one layer. Also implement:

  • Dependency pinning: Use exact versions, not ranges
  • Checksum verification: Verify package integrity
  • SBOM generation: Maintain a software bill of materials
  • Security scanning: Use tools like npm audit, Snyk, or Dependabot security updates
  • Code review: Always review Dependabot PRs, even for "minor" updates

5. Monitor Supply Chain Security News

Subscribe to:
- GitHub Security Advisories
- npm security advisories
- Your package ecosystem's security mailing lists
- CISA's Known Exploited Vulnerabilities catalog

Security Standards References

This vulnerability and fix align with several security frameworks:

  • OWASP Top 10 2021 - A06:2021: Vulnerable and Outdated Components
  • CWE-1104: Use of Unmaintained Third Party Components
  • NIST SSDF: Supply Chain Security Framework (PS.3.1: Verify third-party components)
  • SLSA Framework: Supply-chain Levels for Software Artifacts (Level 2 requirements)

Key Takeaways

  • The .github/dependabot.yml GitHub Actions configuration lacked a cooldown period, allowing immediate updates to newly published packages without security vetting time
  • A 7-day cooldown provides a critical window for the security community to identify malicious packages before they're proposed for integration
  • This Node.js library's vulnerability had amplified impact because compromised dependencies would propagate to all downstream consumers of the library
  • The fix adds just two lines of YAML (cooldown: { default-days: 7 }), but provides significant supply chain security protection
  • Automated validation tests prevent regression—the included test suite ensures the cooldown configuration can't be accidentally removed in future updates

How Orbis AppSec Detected This

  • Source: Dependabot configuration file .github/dependabot.yml with package ecosystem definitions
  • Sink: Missing cooldown block in the github-actions package-ecosystem configuration at line 6
  • Missing control: No cooldown period configured to delay updates from newly published package versions, allowing immediate proposal of potentially malicious packages
  • 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 } block to enforce a 7-day waiting period before proposing updates to newly published GitHub Actions 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 vulnerabilities often hide in configuration files that seem too simple to be dangerous. The missing cooldown in .github/dependabot.yml is a perfect example: just two missing lines of YAML created a high-severity vulnerability that could have exposed this Node.js library and all its downstream consumers to supply chain attacks.

The fix demonstrates that effective security doesn't always require complex code changes. Sometimes, the most powerful protections come from simple configuration adjustments that implement defense-in-depth principles. By adding a 7-day cooldown period, this project now has a critical time buffer for the security community to identify and report malicious packages before they're proposed for integration.

As developers, we must remember that our security responsibilities extend beyond our own code to include the entire dependency chain. Configuration files like dependabot.yml are security controls, not just convenience tools. Treat them with the same rigor you'd apply to authentication logic or input validation.

Implement cooldown periods in your Dependabot configurations today. Your future self—and everyone who depends on your code—will thank you.

References

Frequently Asked Questions

What is a missing Dependabot cooldown vulnerability?

It's a supply chain security gap where Dependabot is configured to immediately propose updates from newly published packages without waiting to see if they're malicious, compromised, or unstable. This allows attackers who publish malicious package versions to potentially get them into your codebase within hours.

How do you prevent missing cooldown vulnerabilities in GitHub Dependabot configuration?

Add a `cooldown` block with `default-days: 7` (or higher) to each package-ecosystem entry in your `.github/dependabot.yml` file. This enforces a waiting period before Dependabot proposes updates to newly published package versions, giving the security community time to identify and report malicious packages.

What CWE is missing Dependabot cooldown?

This maps to CWE-1104 (Use of Unmaintained Third Party Components) as it relates to supply chain security and the risk of incorporating malicious third-party components. It also relates to CWE-829 (Inclusion of Functionality from Untrusted Control Sphere) when considering the automatic inclusion of newly published packages.

Is using Dependabot's security updates enough to prevent supply chain attacks?

No. While Dependabot security updates help patch known vulnerabilities, they don't protect against zero-day malicious packages or typosquatting attacks on newly published versions. A cooldown period adds defense-in-depth by waiting for the security community to vet new releases before they're proposed for integration.

Can static analysis detect missing Dependabot cooldown configurations?

Yes. Tools like Semgrep can detect missing cooldown blocks in `dependabot.yml` files by analyzing the YAML structure and checking for the presence of required security configurations. The Semgrep rule `package_managers.dependabot.dependabot-missing-cooldown` specifically identifies this pattern.

View the Security Fix

Check out the pull request that fixed this vulnerability

View PR #1508

Related Articles

high

How broken access control via supply chain dependency poisoning happens in TYPO3 with Dependabot and how to fix it

A missing cooldown configuration in Dependabot allowed the automatic proposal of newly published (and potentially malicious) package versions, creating a supply chain attack vector that could have facilitated the exploitation of CVE-2026-47343 — a broken access control vulnerability in TYPO3's File Abstraction Layer. The fix adds a 7-day cooldown period to all package ecosystem entries in `.github/dependabot.yml`, ensuring newly published packages are vetted by the community before being propose

high

How missing Dependabot cooldown happens in Node.js supply chain configuration and how to fix it

A high-severity supply chain vulnerability was discovered in a Node.js library's `.github/dependabot.yml` configuration file. Without a cooldown period, Dependabot could immediately propose updates to newly published (and potentially malicious) package versions, exposing downstream consumers to supply chain attacks. The fix adds a 7-day `cooldown` block to both the `npm` and `github-actions` ecosystem entries.

high

How Dependabot Missing Cooldown Periods Happen in GitHub Actions and How to Fix It

A missing cooldown period in Dependabot configuration creates a supply chain vulnerability by allowing automatic updates to newly published packages that could be malicious or unstable. This fix adds a 7-day cooldown to the `.github/dependabot.yml` file, ensuring newly published package versions are vetted before being proposed for update. This is critical for Node.js libraries where vulnerabilities affect all downstream consumers.

critical

How unsafe random function in form-data happens in Node.js and how to fix it

The `form-data` npm package used `Math.random()` — a cryptographically unsafe pseudo-random number generator — to generate multipart form boundaries. This critical vulnerability (CVE-2025-7783) allowed attackers to predict boundary strings and potentially inject malicious content into multipart requests. The fix upgrades `form-data` from version 2.3.3 to 4.0.4, which uses a cryptographically secure random source.

high

How missing Dependabot cooldown happens in Node.js supply chain configuration and how to fix it

A high-severity supply chain vulnerability was discovered in a Node.js library's `.github/dependabot.yml` configuration file. The file lacked a `cooldown` block, meaning Dependabot could propose updates to newly published (and potentially malicious) package versions immediately upon release. A simple 2-line fix adding `default-days: 7` now ensures a 7-day quarantine period before any new dependency version is suggested.

high

How missing cooldown periods in Dependabot configuration happen in GitHub Actions and how to fix it

A high-severity vulnerability was discovered in a Node.js library's `.github/dependabot.yml` configuration file where no cooldown period was set for package updates. This exposed the project to potentially malicious or unstable newly-published packages, as Dependabot would immediately propose updates without any waiting period. The fix adds a 7-day cooldown to the npm package-ecosystem configuration, ensuring a safety window before adopting new package versions.