Problem/Motivation

A security vulnerability was disclosed for the symfony/polyfill-intl-idn package.
The currently pinned version is vulnerable and cannot be updated because it is pinned by
drupal/core-recommended.


CVE-2026-46644

Steps to reproduce

  1. Install Drupal core using drupal/core-recommended 10.6.9.
  2. Run: composer audit
  3. Observe the vulnerability reported for symfony/polyfill-intl-idn.
  4. Run: composer update symfony/polyfill-intl-idn -W
  5. Observe that Composer cannot resolve dependencies because the vulnerable version is pinned by drupal/core-recommended.

Proposed resolution

Update the pinned symfony/polyfill-intl-idn version in
drupal/core-recommended to a non-vulnerable release:

"symfony/polyfill-intl-idn": "~v1.38.1"

Workarounds

  1. You can temporarily do:

    composer require "symfony/polyfill-intl-idn:1.38.1 as 1.37.0"
    

    ...and then revert once a new core release is available.

  2. You can switch away from core-recommended:

    composer require drupal/core:^[YOUR_VERSION_HERE] --no-update
    composer remove drupal/core-recommended --no-update
    composer update drupal/core* -W
    
  3. If your workflow is not hard-blocked, you can evaluate the polyfill CVE to determine whether your site is even affected (many Drupal sites probably are not), and then wait for the next core patch release if you are not affected.

Remaining tasks

  • Update the pinned dependency version.
  • Verify Composer dependency resolution succeeds.
  • Verify composer audit no longer reports the vulnerability.
  • Run the full Drupal core test suite.
  • Backport to supported branches if applicable.

User interface changes

None.

Introduced terminology

None.

API changes

None.

Data model changes

None.

Release notes snippet

Updated the pinned symfony/polyfill-intl-idn dependency to address
CVE-2026-46644, affecting vulnerable versions prior to 1.38.1.

Issue fork drupal-3592065

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

ahmetburkan created an issue. See original summary.

ahmetburkan’s picture

It looks like all versions are affected.

jan kellermann’s picture

Affects 11.x and main also - no composer update possible without changing the composer.json

julien tekrane’s picture

Confirming this also affects 11.3.10 (latest stable). Any attempt to require symfony/polyfill-intl-idn:^1.38.1 is rejected because drupal/core-recommended 11.3.10 pins ~v1.37.0. For anyone needing an immediate workaround while waiting for the next core release, this works:

1. In composer.json, replace "drupal/core-recommended": "~11.3.1" by "drupal/core": "~11.3.1" (11.3 is my need, adapt it)
2. Add "symfony/polyfill-intl-idn": "^1.38.1" to the root requires.
3. Run composer update drupal/core symfony/polyfill-intl-idn -W

catch’s picture

Version: 10.6.x-dev » main

Moving this to main for now.

dave reid’s picture

Because Symfony doesn't release all components (no release if no code changed), this can result in some components that haven't been updated in a while, suddenly getting a security release with a minor bump. It feels like this could potentially happen more and more.

I ran composer require "symfony/polyfill-intl-idn:1.38.1 as 1.37.0" for the workaround, which I'll have to remove manually again when Drupal core has a new release, I'm just wondering if this does happen more and more. Hopefully not, but I worry about it with more AI-found security releases in older dependencies or things that haven't been updated in a while and those maintainers not being able to release patch versions.

godotislate made their first commit to this issue’s fork.

godotislate’s picture

Status: Active » Needs review

MR against main https://git.drupalcode.org/project/drupal/-/merge_requests/15879 is passing.

I also tested cherry-picking to 11.x, 11.4.x, 11.3.x, and 10.6.x, and it seemed to work fine.

f0ns’s picture

I wanted to spin up a new Drupal install and got the same issue

PKSA-dwsq-ppd2-mb1x is blocking it. https://symfony.com/blog/cve-2026-46644-insecure-equivalence-in-symfony-...

mwebaze’s picture

Enabling the native `intl` extension on your infrastructure will successfully bypass the vulnerable polyfill code at runtime as polyfill checks for it first.

jcandan’s picture

Placing the following as a temporary work around worked for me, including within a DDEV project using the ddev-drupal-contrib add-on:

  "require-dev": {
    "symfony/polyfill-intl-idn": "1.38.1 as 1.37.0"
  }
ulethjay’s picture

Does this mean that anyone hoping to update for SA-CORE-2026-004 is going run into a hurdle for the time being?

godotislate’s picture

You can disable composer security block temporarily using either an ENV or command line option: https://getcomposer.org/doc/03-cli.md#composer-no-blocking

Alternatively, you can add entries to config.policy.advisories in composer.json: https://getcomposer.org/doc/06-config.md#block

godotislate changed the visibility of the branch 3592065-drupal-core-recommended-pins to hidden.

godotislate’s picture

Hid https://git.drupalcode.org/project/drupal/-/merge_requests/15877 because the tests weren't passing and it was targeted against 10.6.x.

seworthi’s picture

You can also add this to config section of composer.json

"audit": {
    "ignore": ["PKSA-dwsq-ppd2-mb1x"]
}

znerol changed the visibility of the branch 3592065-drupal-core-recommended-pins to hidden.

znerol’s picture

Status: Needs review » Reviewed & tested by the community

Tested the MR plus cherry-picks to all the branches mentioned in #10.

composer install and composer audit lead to the desired result.

maxdmayhew’s picture

#7 worked for me. Thank you!

mark_fullmer’s picture

Given the timing of this with the recent Drupal core security release, should the community expect an immediate follow-up release, or will that arrive during the next scheduled security window?

prudloff’s picture

  • catch committed fb9b135a on 10.5.x
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...

  • catch committed c7a2026f on 10.6.x
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...

  • catch committed 38815907 on 11.2.x
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...

  • catch committed a84341d8 on 11.3.x
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...

  • catch committed 7c848d01 on 11.4.x
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...

  • catch committed 1eab8aee on 11.x
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...

  • catch committed 56aee63b on main
    task: #3592065 Drupal core-recommended pins vulnerable symfony/polyfill-...
catch’s picture

Version: main » 10.5.x-dev
Status: Reviewed & tested by the community » Fixed

Opened https://github.com/symfony/polyfill/issues/621 upstream. Even if it's only us that ran into this problem, still feels unnecessary.

Committed/pushed to main, 11.x, 11.4.x, 11.3.x, 11.2.x, 10.6.x and 10.5.x, thanks!

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

xmacinfo’s picture

Please issue a new release as many will not know exactly what is happening and may end up being confused about what is the best approach to use.

xjm’s picture

Issue summary: View changes

Going to add the two workarounds to the summary. Basically, if your workflow is hard-blocked on this issue (which is likely not exploitable in core), best to use one of the workarounds until a new core release is tagged. However. if you're not hard-blocked in your workflow, you can evaluate the CVE itself, potentially ignore your security scanner output, and choose to just wait for the next core patch release.

xjm’s picture

Priority: Normal » Critical

Bumping to critical retroactively on account of the fact that this is interfering with the Drupal CMS installer.

ressa’s picture

Issue summary: View changes

Adding missing quote at the end of composer require "symfony/polyfill-intl-idn:1.38.1 as 1.37.0" workaround in Issue Summary.

Will deleting the line and updating to Drupal core (10.6.10?) take care of reverting it, when the time comes? I tried deleting the line in composer.json, and running composer update --lock but it did nothing.

jan kellermann’s picture

There are also security updates for symfony/routing and symfony/http-foundation.

When do you plan the release of the fixed Drupal version? We would like to update Drupal and symfony at once...

thatipudir’s picture

twig need update too ..
| Package | twig/twig |
| Severity | |
| Advisory ID | PKSA-fbvq-z33h-r2np |
| CVE | CVE-2026-48808 |
| Title | Sandbox property allowlist bypass via the `column` filter under |
| | `SourcePolicyInterface` |
| URL | https://symfony.com/blog/cve-2026-48808-sandbox-property-allowlist-bypas... |
| | e-column-filter-under-sourcepolicyinterface |
| Affected versions | >=1.0.0,<2.0.0|>=2.0.0,<3.0.0|>=3.0.0,<3.27.0 |
| Reported at | 2026-05-27T15:00:00+00:00

solideogloria’s picture

It's already fixed in dev.

solideogloria’s picture

Issue tags: +Security
uccio’s picture

Version: 10.5.x-dev » 11.3.x-dev

The problem is also on the Drupal 11.3.x branch and by launching
composer require drupal/core-recommended:11.3.10 drupal/core-composer-scaffold:11.3.10 drupal/core-project-message:11.3.10 --update-with-all-dependencies

the result is this:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires drupal/core-recommended 11.3.10 -> satisfiable by drupal/core-recommended[11.3.10].
    - drupal/core-recommended 11.3.10 requires symfony/polyfill-intl-idn ~v1.37.0 -> found symfony/polyfill-intl-idn[v1.37.0] but these were not loaded, because they are affected by security advisories ("PKSA-dwsq-ppd2-mb1x"). Go to https://packagist.org/security-advisories/ to find advisory details. To ignore the advisories, add them to the audit "ignore" config. To turn the feature off entirely, you can set "block-insecure" to false in your "audit" config.

solideogloria’s picture

I reiterate: it's fixed in dev.