Back to Blog
high SEVERITY6 min read

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

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

Answer Summary

This vulnerability (CVE-2026-47343, related to CWE-1357 and CWE-284) involves a missing Dependabot cooldown period in a TYPO3 project's `.github/dependabot.yml` file, which could allow malicious or unstable newly-published packages to be automatically proposed as dependency updates — potentially introducing broken access control flaws like TYPO3-CORE-SA-2026-007. The fix adds `cooldown: default-days: 7` to each `package-ecosystem` entry in the Dependabot configuration, creating a 7-day quarantine window before new package versions are suggested.

Vulnerability at a Glance

cweCWE-1357 (Reliance on Insufficiently Trustworthy Component)
fixAdded `cooldown: default-days: 7` to both `composer` and `github-actions` ecosystem entries
riskAutomatic adoption of malicious or unstable newly-published packages leading to broken access control
languageYAML (Dependabot configuration) / PHP (TYPO3 / Composer)
root causeNo cooldown period configured in `.github/dependabot.yml` for package ecosystem entries
vulnerabilitySupply chain dependency poisoning via missing Dependabot cooldown

How Broken Access Control via Supply Chain Dependency Poisoning Happens in TYPO3 with Dependabot and How to Fix It

Introduction

In a TYPO3 project tracked via composer.lock, we discovered a high-severity supply chain vulnerability rooted not in the PHP application code itself, but in the project's .github/dependabot.yml configuration file at line 6. The Dependabot configuration for both the composer and github-actions package ecosystems lacked a cooldown block, meaning newly published package versions — including potentially malicious ones — could be immediately proposed as dependency updates.

This configuration gap is directly relevant to CVE-2026-47343 (TYPO3-CORE-SA-2026-007: Broken Access Control in File Abstraction Layer). Without a cooldown period, a compromised or typo-squatted package version could be proposed and merged before the security community has time to flag it, potentially introducing broken access control vulnerabilities into the File Abstraction Layer or any other TYPO3 component managed through Composer.

The vulnerable configuration looked like this:

updates:
  - package-ecosystem: "composer"
    directory: "/"
    schedule:
      interval: "weekly"

No cooldown block. No quarantine window. Any package published seconds ago could be proposed immediately.

The Vulnerability Explained

What's Actually Happening

GitHub's Dependabot automatically monitors your project's dependencies and opens pull requests when new versions are available. By default, it proposes updates as soon as they're published to the package registry. This creates a dangerous window:

  1. An attacker publishes a malicious version of a package (or a typo-squatted variant)
  2. Dependabot immediately creates a PR proposing the update
  3. If the PR is merged quickly (especially with auto-merge enabled), malicious code enters production

In the context of this TYPO3 project, the composer ecosystem manages PHP dependencies including TYPO3 core packages. The composer.lock file pins exact versions, but Dependabot's job is to update those pins. Without a cooldown, it does so indiscriminately.

The Attack Scenario

Consider this specific attack path against the vulnerable configuration:

  1. An attacker identifies that this project depends on a TYPO3 extension or a transitive dependency
  2. The attacker compromises the package maintainer's account (or publishes a typo-squatted package)
  3. A new version is published containing code that weakens the File Abstraction Layer's access controls
  4. Within minutes, Dependabot opens a PR: "Bump typo3/cms-core from 12.4.x to 12.4.y"
  5. The PR passes CI (the malicious code is subtle — perhaps it modifies file permission checks)
  6. A maintainer merges the PR, introducing CVE-2026-47343-class broken access control

The 7-day cooldown acts as a quarantine: if a malicious package is published, the security community typically identifies and reports it within days. By waiting 7 days, you let the ecosystem's immune system work before exposing your project.

Why This Configuration Matters

The .github/dependabot.yml file isn't just a convenience tool — it's part of your security boundary. It controls what code enters your project through automated means. A misconfigured Dependabot is essentially an automated attack surface that an adversary can trigger by publishing packages.

The Fix

The fix adds a cooldown block with default-days: 7 to both package ecosystem entries in .github/dependabot.yml:

Before:

version: 2
updates:
  - package-ecosystem: "composer"
    directory: "/"
    schedule:
      interval: "weekly"

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
    labels:
      - "dependencies"
      - "github-actions"

After:

version: 2
updates:
  - package-ecosystem: "composer"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
    cooldown:
      default-days: 7
    labels:
      - "dependencies"
      - "github-actions"

Why Both Ecosystems Need the Fix

  • composer ecosystem (line 6): This manages PHP/TYPO3 dependencies via composer.lock. A poisoned Composer package could directly introduce broken access control in the File Abstraction Layer.
  • github-actions ecosystem (line 14): Compromised GitHub Actions can exfiltrate secrets, modify code during CI, or inject malicious artifacts. A cooldown here prevents adoption of newly-published action versions that may contain supply chain attacks.

How the Fix Works

The cooldown.default-days: 7 setting tells Dependabot: "Do not propose updates to any package version that was published less than 7 days ago." This creates a temporal buffer that:

  1. Allows security researchers to analyze new releases
  2. Gives package registries time to detect and remove malicious versions
  3. Lets community reports surface on GitHub Issues, Twitter, or security advisories
  4. Prevents zero-day supply chain attacks from being auto-proposed

Prevention & Best Practices

1. Always Configure Cooldown Periods

Every package-ecosystem entry in your Dependabot configuration should include:

cooldown:
  default-days: 7

For high-security environments, consider default-days: 14 or higher.

2. Avoid Auto-Merge on Dependency Updates

Even with cooldown periods, never auto-merge Dependabot PRs without human review. Use branch protection rules requiring approval.

3. Use Dependency Review Actions

Add actions/dependency-review-action to your CI pipeline to block PRs that introduce known vulnerabilities:

- uses: actions/dependency-review-action@v3
  with:
    fail-on-severity: high

4. Monitor composer.lock Changes

Any change to composer.lock should trigger enhanced review. Consider requiring CODEOWNERS approval for lock file modifications.

5. Pin GitHub Actions by SHA

Instead of version tags (which can be moved), pin actions by commit SHA:

- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6

6. Scan with Semgrep

Use the Semgrep rule package_managers.dependabot.dependabot-missing-cooldown.dependabot-missing-cooldown in your CI pipeline to catch this misconfiguration automatically.

Key Takeaways

  • A missing cooldown block in .github/dependabot.yml is not just a best-practice gap — it's an exploitable supply chain attack vector, especially for projects managing security-critical dependencies like TYPO3 core packages.
  • The composer ecosystem entry at line 6 was the primary risk, as it controls PHP dependency updates that directly affect the TYPO3 File Abstraction Layer where CVE-2026-47343 manifests.
  • 7 days is the minimum recommended cooldown — it aligns with the typical window in which the security community identifies and reports malicious package publications.
  • Both composer and github-actions ecosystems needed the fix because supply chain attacks can enter through either dependency management path.
  • Static analysis tools like Semgrep can detect configuration-level security gaps that traditional code scanners miss, making them essential for comprehensive security coverage.

How Orbis AppSec Detected This

  • Source: Newly published package versions on Packagist (Composer) and GitHub Marketplace (Actions) — untrusted external input entering the dependency graph
  • Sink: The updates entries in .github/dependabot.yml:6 and .github/dependabot.yml:14 that trigger automatic pull request creation without temporal validation
  • Missing control: No cooldown block to enforce a quarantine period before proposing newly-published package versions
  • CWE: CWE-1357 (Reliance on Insufficiently Trustworthy Component)
  • Fix: Added cooldown: default-days: 7 to both the composer and github-actions package ecosystem entries, establishing a 7-day quarantine window

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 isn't just about scanning your code for vulnerabilities — it's about controlling how new code enters your project. A two-line YAML addition (cooldown: default-days: 7) creates a critical temporal defense layer that prevents the automatic adoption of malicious or unstable packages. In the context of CVE-2026-47343 and TYPO3's File Abstraction Layer, this cooldown could be the difference between catching a compromised dependency before it's proposed and discovering broken access control in production. Review your Dependabot configurations today — the fix takes seconds, but the protection is substantial.

References

Frequently Asked Questions

What is a Dependabot cooldown period?

A cooldown period is a configurable delay (in days) that tells Dependabot to wait before proposing updates to newly published package versions, giving the community time to identify malicious or unstable releases.

How do you prevent supply chain attacks via Dependabot in TYPO3/Composer projects?

Add a `cooldown` block with `default-days: 7` (or more) to each `package-ecosystem` entry in your `.github/dependabot.yml`, and review all dependency updates before merging.

What CWE is supply chain dependency poisoning?

CWE-1357 (Reliance on Insufficiently Trustworthy Component) covers scenarios where software depends on components that haven't been sufficiently vetted for security.

Is pinning dependency versions enough to prevent supply chain attacks?

No — version pinning helps but doesn't protect against scenarios where Dependabot automatically proposes updates to newly published (potentially malicious) versions. A cooldown period adds an essential time-based defense layer.

Can static analysis detect missing Dependabot cooldown configurations?

Yes — tools like Semgrep can detect this pattern using rules like `package_managers.dependabot.dependabot-missing-cooldown.dependabot-missing-cooldown` which flag Dependabot configurations lacking cooldown blocks.

View the Security Fix

Check out the pull request that fixed this vulnerability

View PR #2062

Related Articles

high

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

A high-severity vulnerability was discovered in a repository's `.github/dependabot.yml` configuration file that lacked a cooldown period for dependency updates. Without this protection, Dependabot could immediately propose updates to newly published packages, potentially introducing malicious or unstable code into the project before the security community has time to identify threats.

high

How DNS rebinding happens in Node.js MCP TypeScript SDK and how to fix it

The `@modelcontextprotocol/sdk` package (version 0.5.0) shipped without DNS rebinding protection enabled by default, leaving any Node.js application that hosts an MCP server exposed to cross-origin attacks from malicious websites. Upgrading to version 1.24.0 enables host-header validation and brings a suite of new security dependencies—including `cors`, `express-rate-limit`, and `jose`—that collectively close the attack surface. This fix was identified and patched automatically by Orbis AppSec b

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 HTTP Transport Hijacking via Prototype Pollution happens in Node.js axios and how to fix it

CVE-2026-42033 is a high-severity prototype pollution vulnerability in axios versions prior to 1.15.1 that could allow attackers to hijack HTTP transport configuration through malicious input. This vulnerability affects any Node.js application using vulnerable axios versions to make HTTP requests. The fix involves upgrading axios to version 1.15.1, which patches the prototype pollution flaw and prevents transport layer attacks.