Skip to main content
Drupal's May 20 Critical Patch: What Went WrongIncident
5 min readFor Security Engineers

Drupal's May 20 Critical Patch: What Went Wrong

On May 20, 2025, between 17:00 and 21:00 UTC, Drupal administrators worldwide scrambled to apply emergency security patches. The Drupal Security Team had issued a rare advance warning: a critical vulnerability with high exploitation risk required immediate action. For organizations running Drupal 8 or 9—versions that reached end-of-life months earlier—the situation was even more urgent. No official patches would arrive, only hotfix files for versions 9.5 and 8.9.

This wasn't a breach. But it exposed something worse: systematic failures in how organizations manage open-source CMS infrastructure.

What Happened

Drupal announced a critical security update affecting all supported versions (10 and later) with a four-hour remediation window. The vulnerability carried a "high exploitation risk" designation, meaning active exploitation was either occurring or imminent. The Security Team published the advisory days in advance—an unusual move that signaled genuine urgency.

For organizations still running Drupal 8 and 9, the message was blunt: you're on your own. Hotfix files would be available for versions 9.5 and 8.9, but these required manual application with no guarantee of compatibility or support.

Timeline

  • T-minus 5 days: Drupal Security Team issues advance notice of critical update scheduled for May 20, 17:00-21:00 UTC.
  • T-minus 3 days: Security teams begin preparing maintenance windows, coordinating with operations and compliance.
  • May 20, 17:00 UTC: Patches released for supported versions (Drupal 10+). Hotfix files published for 9.5 and 8.9.
  • May 20, 21:00 UTC: Four-hour remediation window closes. Organizations still running unpatched instances enter high-risk territory.
  • T-plus 24 hours: Exploit code likely circulating in attacker communities.

Which Controls Failed or Were Missing

The Drupal incident reveals three specific control failures:

Vulnerability management process breakdown. Organizations running end-of-life software had no formal process for tracking lifecycle dates or planning migrations. PCI DSS v4.0.1 Requirement 6.3.3 mandates maintaining an inventory of all software components, including their lifecycle status. If you don't know when Drupal 8 reached EOL, you can't plan for it.

Change management paralysis. The four-hour window exposed organizations with no pre-approved emergency change procedures. Your change advisory board shouldn't need three days to approve a critical security patch. ISO/IEC 27001:2022 Control 8.32 requires establishing change management procedures, but most organizations interpret this as "slow everything down" rather than "create fast lanes for emergencies."

Configuration management gaps. Teams applying hotfixes to unsupported versions had no way to verify the fixes didn't break custom modules or integrations. NIST 800-53 Rev 5 CM-3 (Configuration Change Control) requires testing changes before production deployment. But if you're running EOL software with custom code, you likely don't have a test environment that mirrors production.

What the Standards Actually Require

PCI DSS v4.0.1 Requirement 6.3.1: You must identify security vulnerabilities using reputable outside sources and assign a risk ranking to vulnerabilities. "Reputable outside sources" includes your CMS vendor's security advisories. If you're not subscribed to Drupal's security mailing list and checking it daily, you're not meeting this requirement.

PCI DSS v4.0.1 Requirement 6.3.2: You must install relevant security patches within one month of release. Critical patches require faster timelines. A four-hour window is aggressive, but "within one month" doesn't mean "eventually." It means you need a process that can execute patches in days, not weeks.

ISO/IEC 27001:2022 Control 5.23 (Information Security for Use of Cloud Services): Even if you're running Drupal on someone else's infrastructure, you're still responsible for application-layer security. Your cloud provider patches the OS; you patch Drupal. This control requires defining and managing security responsibilities across the supply chain.

NIST 800-53 Rev 5 SI-2 (Flaw Remediation): You must install security-relevant software updates within the timeframe specified in your organizational policy. If your policy says "30 days" but Drupal says "4 hours," you need to update your policy with severity-based SLAs. Critical vulnerabilities in internet-facing applications should have a 24-48 hour remediation target.

Lessons and Action Items for Your Team

Build a CMS lifecycle tracking system. Create a spreadsheet or use a tool like Dependency-Track to monitor every open-source component you run. Include current version, latest version, EOL date, and upgrade complexity. Review this monthly. When a component approaches EOL (six months out), start planning the migration. Don't wait until you're reading hotfix instructions on a Friday afternoon.

Establish severity-based patching SLAs. Your policy should have at least three tiers:

  • Critical vulnerabilities in internet-facing systems: 24-48 hours
  • High-severity vulnerabilities: 7 days
  • Medium/Low severity: 30 days

Document these in your vulnerability management policy and get them approved by your change advisory board in advance. When Drupal says "high exploitation risk," you don't want to be arguing about change freeze policies.

Pre-approve emergency change procedures. Write a one-page document that defines what qualifies as an emergency change (vendor-confirmed active exploitation, CVSS 9.0+, etc.) and who can approve it without a full CAB meeting. Get this signed by your CISO and your head of operations. Store it somewhere your on-call engineers can find it at 2 AM.

Test your patching process quarterly. Pick a non-critical update and run it through your full process: monitoring, testing, approval, deployment, verification. Time each step. If the total elapsed time exceeds your critical patch SLA, you have a process problem to fix before you have a real incident.

Build a test environment that actually mirrors production. If you can't test a patch because your staging environment is too different from production, your staging environment is useless. Use infrastructure-as-code to ensure your test and production environments are identical except for data volume.

Subscribe to your vendors' security advisories. Drupal, WordPress, Django, Rails—every framework has a security mailing list. Subscribe with a shared team inbox, not an individual's email. Set up a Slack channel that forwards these emails so your team sees them immediately.

The May 20 Drupal update wasn't a breach. But it was a test—and many organizations failed it. The next critical patch might not come with five days' warning.

Topics:Incident

You Might Also Like