14 Oct 2026

feedDrupal.org aggregator

Security advisories: Drupal core - Moderately critical - Cross-site scripting - SA-CORE-2026-016

Project:
Project machine name:
drupal
Date:
2026-October-14
Vulnerability:
Cross-site scripting
Affected versions:
>= 10.3.0 < 10.6.19 || >= 11.0.0 < 11.3.19 || >= 11.4.0 < 11.4.10 || >= 12.0.0-alpha1 < 12.0.0-beta2
CVE IDs:
CVE-2026-108514
Description:

The Navigation module doesn't sufficiently sanitize certain attributes, which can lead to a cross-site scripting (XSS) vulnerability.

This vulnerability is mitigated by the fact that an attacker must have a role with permission to enter HTML tags containing specific data attributes, or the administer menu permission.

Solution:

Install the latest version:

Drupal 11

  • If you use Drupal 11.4.x, update to Drupal 11.4.10.
  • If you use Drupal 11.3.x, update to Drupal 11.3.19.
  • Drupal 11.2.x and below are end-of-life and do not receive security coverage.

Drupal 10

  • If you use Drupal 10.6.x, update to Drupal 10.6.19.
  • Drupal 10.5.x and below are end-of-life and do not receive security coverage.

Drupal 8 and Drupal 9 have both reached end-of-life.

Fixed By:
Coordinated By:

14 Oct 2026 5:25pm GMT

Security advisories: Drupal core - Moderately critical - Cross-site scripting - SA-CORE-2026-015

Project:
Project machine name:
drupal
Date:
2026-October-14
Vulnerability:
Cross-site scripting
Affected versions:
>= 8.9.0 < 10.6.19 || >= 11.0.0 < 11.3.19 || >= 11.4.0 < 11.4.10 || >= 12.0.0-alpha1 < 12.0.0-beta2
CVE IDs:
CVE-2026-108515
Description:

The Drupal core Link module provides a field type that can be used for internal and external URLs.

The module does not sufficiently sanitize certain markup in some circumstances, which can lead to cross-site scripting (XSS) vulnerabilities.

Solution:

Install the latest version:

Drupal 11

  • If you use Drupal 11.4.x, update to Drupal 11.4.10.
  • If you use Drupal 11.3.x, update to Drupal 11.3.19.
  • Drupal 11.2.x and below are end-of-life and do not receive security coverage.

Drupal 10

  • If you use Drupal 10.6.x, update to Drupal 10.6.19.
  • Drupal 10.5.x and below are end-of-life and do not receive security coverage.

Drupal 8 and Drupal 9 have both reached end-of-life.

Reported By:
Fixed By:
Coordinated By:

14 Oct 2026 5:25pm GMT

Security advisories: Drupal core - Critical - Remote code execution - SA-CORE-2026-014

Project:
Project machine name:
drupal
Date:
2026-October-14
Vulnerability:
Remote code execution
Affected versions:
>= 8.9.0 < 10.6.19 || >= 11.0.0 < 11.3.19 || >= 11.4.0 < 11.4.10 || >= 12.0.0-alpha1 < 12.0.0-beta2
CVE IDs:
CVE-2026-108097
Description:

A remote code execution vulnerability exists within the Field UI module in Drupal core.

The vulnerability is not directly exploitable with core alone, but multiple serious exploit paths exist with contributed modules. At least one known exploit path does not require authentication. Custom code may also expose the vulnerable functionality.

The vulnerability can be mitigated by uninstalling the core Field UI module (field_ui), which will provide protection while sites are updated.

Drupal Steward protection:

This issue is being protected by Drupal Steward. Sites that use Drupal Steward are already protected from some known attack vectors, but the protection offered will not cover all possible exploits. Sites should upgrade in the near future in case additional attack vectors are discovered.

Solution:

Install the latest version:

Drupal 11

  • If you use Drupal 11.4.x, update to Drupal 11.4.10.
  • If you use Drupal 11.3.x, update to Drupal 11.3.19.
  • Drupal 11.2.x and below are end-of-life and do not receive security coverage.

Drupal 10

  • If you use Drupal 10.6.x, update to Drupal 10.6.19.
  • Drupal 10.5.x and below are end-of-life and do not receive security coverage.

Drupal 8 and Drupal 9 have both reached end-of-life.

Release packaging may still be in progress for this security announcement. If you are unable to access a release, wait 30-45 minutes and then check again.

Reported By:
Fixed By:
Coordinated By:

14 Oct 2026 4:10pm GMT

The Drop Times: LocalGov Drupal Recognised as a Digital Public Good

A council-developed publishing platform has completed an international standards review. Two initially unmet requirements reveal what the assessment demanded.

14 Oct 2026 2:03pm GMT

Dynamosys Insights: Drupal 11.4.9: A Steadier Sidebar and Better CKEditor Setup

Drupal 11.4.9 addresses a shifting navigation sidebar, updates CKEditor 5, and makes editor toolbar configuration more flexible through recipes. Here's what the release means for content teams, developers, and site owners.

14 Oct 2026 1:17pm GMT

Gspikes: Website Migration Timeline: How Long 29 Real Drupal Migrations Took

We read all 462 case studies on drupal.org and coded every migration that says how long it took. Median: 7.5 months from kickoff to launch. Small relaunches took weeks; multi-site platforms took a year or more.

14 Oct 2026 8:39am GMT

Gábor Hojtsy: Released Translation Template Extractor 3, a tool for the modern Drupal age

Released Translation Template Extractor 3, a tool for the modern Drupal age

If you ever translated Drupal software, you used the Translation Template Extractor (potx) at least indirectly, even if you never heard of it. It reads the source code of Drupal core and contributed projects, and collects the translatable strings. Every string translated on localize.drupal.org was extracted by potx. Developers and translators also use it to extract strings of their own modules and themes, on a web UI or with Drush.

Gábor Hojtsy

14 Oct 2026 7:17am GMT

13 Oct 2026

feedDrupal.org aggregator

Aten Design Group: Extending Editoria11y with Custom Content Checks in Drupal

Extending Editoria11y with Custom Content Checks in Drupal Joel Steidl Drupal

An editor copies a link from an email, adds it to a page, and publishes. The link text looks right. The destination opens. Nothing about the normal authoring workflow suggests a problem.

But the saved URL may not be the destination the editor intended to publish. Microsoft Safe Links can wrap an address in a long, encoded URL that sends visitors through a security-checking redirect service.

On of our client's websites, a custom Editoria11y check helps editors recognize these links and replace them with the original destination. It adds site-specific guidance to a tool already used for accessibility feedback.

A Content Problem Worth Flagging

Microsoft Safe Links is a legitimate security feature, not evidence that a link is spam or malicious. The problem here was context: a URL copied from an email was becoming a public website link.

A simplified example looks like this:

<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fexample.com%2Fmeeting>

The intended destination is https://example.com/meeting. Publishing the wrapper makes that destination harder to inspect and introduces dependence on another redirect service. The addresses can also be difficult to read and maintain.

Those are good reasons for an editorial warning. They are not proof that every Safe Link violates WCAG or cannot be used with a screen reader.

The useful question was narrower: could the website identify this recurring content pattern and give editors a practical next step?

Discovering an Existing Extension Point

Editoria11y brings accessibility feedback into the page context. Its custom-test capability lets developers add checks beyond the standard set without building a separate reporting interface.

Princeton's documentation includes an example for email-obfuscated URLs, providing a starting point for both detection and integration. The extension builds on that existing capability rather than introducing a separate checking system.

A Small Drupal Integration

The custom module, custom_editoria11y, handles the Drupal integration. Its metadata declares a dependency on Editoria11y. A library definition registers the custom JavaScript and depends on the contrib module's library.

The PHP attachment hook checks for the view editoria11y checker permission before attaching that library. This keeps the extra script scoped to users authorized to use the checker rather than delivering it to public visitors.

JavaScript handles detection and feedback. Although we might informally call this a custom rule or plugin, it is not a Drupal PHP Plugin API class. It is an event-driven JavaScript test delivered through a Drupal module.

That division keeps the implementation small: Drupal controls availability, the custom script identifies the content pattern, and Editoria11y provides the warning interface.

How the Custom Test Runs

Editoria11y's custom-test lifecycle has four steps: register the expected callbacks, listen for ed11yRunCustomTests, add results, and dispatch ed11yResume when finished.

Our script increments options.customTests through the Drupal integration's options override. That tells the checker to wait for one additional completion event before drawing its tooltips.

The count represents completing test callbacks, not matching links. A callback that finds ten links still sends one completion event. A callback that finds none must finish too.

The rule searches for anchors using a[href*="safelinks.protection.outlook.com"]. This catches different Safe Links subdomains without maintaining a list of regional prefixes. It is substring matching, however, not comprehensive URL-host validation; the same text elsewhere in an address could also match.

The following excerpt shows the site's v3 integration. It assumes the options override and tooltip helper are already defined:

document.addEventListener('ed11yRunCustomTests', function () {
  Drupal.Ed11y.findElements(
    'customSafeLinks',
    'a[href*="safelinks.protection.outlook.com"]'
  );
 
  Drupal.Ed11y.elements.customSafeLinks?.forEach(function (element) {
    Drupal.Ed11y.State.results.push({
      element,
      test: 'customSafeLink',
      type: 'warning',
      content: customSafeLinkContent(element.getAttribute('href')),
      position: 'beforebegin',
      dismiss: false,
    });
  });
 
  document.dispatchEvent(new CustomEvent('ed11yResume'));
});

Using findElements keeps the search within the configured content roots and respects selector-based exclusions. Results enter the existing checker workflow rather than a separate alert system.

The tooltip names the issue, displays the encoded address, and asks the editor to replace it with the original URL. When available, new URL(href).searchParams.get('url') extracts the destination as an additional hint. If parsing fails or the parameter is missing, that hint is omitted.

Displayed URL strings are sanitized with Drupal.Ed11y.sanitizeHTML. In this v3 implementation, tooltip content is a DOM element, with a .title child supplying its heading.

The rule does not rewrite content or block publication. The editor remains responsible for checking and replacing the link.

Maintaining the Rule Through an Upgrade

An upgrade from Editoria11y 2.2.6 to 3.0.2 required migrating the custom module to the v3 API.

The migration changed more than a version constraint. The custom code moved from older Ed11y references to Drupal.Ed11y, changed the sanitization helper, and pushed results into Drupal.Ed11y.State.results. Tooltip construction moved from the older message-registration approach and HTML strings to DOM-element content. Result properties also changed, including explicit warning severity and the dismissal setting.

The lesson is practical: extending a supported tool avoids owning an entire checker, but the extension still has an API contract. Major upgrades require reviewing that contract and testing the custom feedback, not just confirming that the base module loads.

Testing and Extending Thoughtfully

For ongoing maintenance, a focused regression checklist should cover matching and ordinary links, missing destination parameters, configured exclusions, permission boundaries, safe tooltip rendering, and completion events when no matches exist.

Additional checks could flag obsolete internal domains or temporary campaign URLs. Those are possibilities, not features delivered in this project. Each proposed rule should have a recognizable problem, a clear correction, and a manageable risk of false positives.

Multiple extensions also need to coordinate the shared options override rather than replace one another's callbacks. The expected completion count must stay aligned with the listeners actually running.

Princeton's custom-test documentation is a useful starting point. Check examples against the installed version, especially when maintaining an older integration.

Give Editors an Actionable Next Step

The value of this extension is specific feedback at the point where someone can act on it. Instead of asking editors to remember every problematic URL pattern, the website identifies one and explains what to change.

Custom tests can support content standards alongside accessibility checks. They do not replace human review or establish accessibility compliance. They make the existing editorial workflow more useful, one well-defined problem at a time.

Philip Stier

13 Oct 2026 8:53pm GMT

Freelock Blog: Drupal Meets Matrix 03 - Better Conversations with Advanced Comment Threads

Drupal Meets Matrix 03 - Better Conversations with Advanced Comment Threads

Drupal Meets Matrix 03

John Locke

Commenting in Drupal hasn't noticeably changed in 15 years. That changes now.

dev corner icon
Dev Corner

13 Oct 2026 5:00pm GMT

Omega8.cc: One Garage, Many Engines

In March 2012 a developer asked us for a PHP version per platform, a per-site override on top, and a way to tell Drush which PHP to use, and I turned the Provision half down myself, because the Ægir backend's command-line PHP was hard-wired into the Drush wrapper and had to be running before any task could change it. Fourteen years and a few small text files later, BOA-5.88.866 closes that gap: one line in cli-per-platform.info gives a platform its own command-line PHP, so a Drupal 7 codebase keeps its drush on PHP 7.4 while the Drupal 11 build beside it gets 8.5, in the same account, with no ticket to anyone, and a task which would run a site's code on a PHP its core cannot handle is refused before PHP even starts, with the line that fixes it printed in the message. It works because every command in your shell and every Ægir task for your account now passes through BOA's shell wrapper, which picks the version before any PHP is running at all.

13 Oct 2026 2:16pm GMT

Specbee: Need better image galleries in Drupal? The Media Scroller module adds a large main image, synced thumbnail navigation, and simple configuration without custom templates.

Need better image galleries in Drupal? The Media Scroller module adds a large main image, synced thumbnail navigation, and simple configuration without custom templates.

13 Oct 2026 11:08am GMT

rachel_norfolk: I’m always blown away by the Driesnote slides

I'm always blown away by the Driesnote slides

The background image from the Driesnote slides. Looks like a very colourful version of an X-ray photo

I've watched a lot of Driesnotes. A lot. Goodness me, I don't even know how many.

Over the last few years, and I promise to find out exactly how many, Dries has had a lot of help with the design of them from an awesome designer at Acquia who I just have to shout about - ASH.

(yes, absolutely go give the shout outs!!)

Rachel

Tags

13 Oct 2026 10:49am GMT

12 Oct 2026

feedDrupal.org aggregator

Droptica: Drupal security updates in the AI era: why “we’ll patch next sprint” no longer works

ai-generated-2026-10-12-175026.webp Most Drupal site owners I talk to handle Drupal security updates the same way. These are the fixes the Drupal Security Team publishes for core and contributed modules. A developer sees the security advisory. A ticket goes into the next sprint. The patch goes live a few days later, sometimes two weeks later.

12 Oct 2026 5:45pm GMT

Dynamosys Insights: Playwright for Drupal: A Practical Guide to Test Automation

A Drupal update should come with confidence that your important workflows still work. Learn how to introduce Playwright, build useful browser tests, and make automation part of your release process.

12 Oct 2026 4:43pm GMT

Security public service announcements: Upcoming critical Drupal core release on October 14, 2026 - PSA-2026-10-12

Date:
2026-October-12
Description:

There will be a Drupal core security release for all supported branches on October 14, 2026 between 16:00 and 21:00 UTC. (To see this in your local timezone, refer to the Drupal Core Calendar.) Based on our analysis this vulnerability rates at 19/25 on our risk calculator.

The Drupal Security Team urges you to reserve time for core updates at that time because exploits might be developed within hours or days.

We recommend updating to the latest supported patch (bugfix) release for your site's version of Drupal before October 14, so that you can address any other upgrade issues before the security window.

This issue is being protected by Drupal Steward. Sites that use Drupal Steward are already protected from some known attack vectors, but the protection offered will not cover all possible exploits. Sites should upgrade in the near future in case additional attack vectors are discovered.

Affected versions

All currently supported versions of Drupal core are affected, including:

  • Drupal 11.4.x
  • Drupal 11.3.x
  • Drupal 10.6.x

Drupal 12.0.0-beta1 is also affected. New beta releases will be provided following the security updates for the supported branches.

All versions of Drupal prior to 10.6.x, as well as all versions of Drupal 11 prior to 11.3.x, are end-of-life and no longer supported. Sites on those versions should update as soon as possible to avoid this and other publicly disclosed vulnerabilities.

Disclosure policy

Neither the Security Team nor any other party is able to release any more information about this vulnerability until the announcement is made. Security release announcements will appear on the Drupal.org security advisory page, which has RSS feeds. The announcement will also be made public on:

Coordinated By:

12 Oct 2026 4:10pm GMT

Gspikes: Cleaning a Decade of Drupal Database Cruft Before You Migrate

The eight-step Drupal 7 database cleanup we run before every migration: caches and logs, revisions, deleted fields, files, spam accounts, content you will not bring, and the module data you leave behind, in the order that costs least and saves most.

12 Oct 2026 3:48pm GMT