Every CVE Search/ Get API key

CVE-2026-46644

symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload decodes to ASCII-only: insecure equivalence

6.9 MediumFix available

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
Low
Availability
None

Exploit likelihood

0.54%Up 0.4 points since Jun 12, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.9

symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload decodes to ASCII-only: insecure equivalence

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Record
CVE-2026-46644
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
Weakness
CWE-1289
Updated
2026-11-02
EUVDEUVD-2026-44537 6.9

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Record
EUVD-2026-44537
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-2xf4-cg6j-vhgq 2.7

symfony/polyfill-intl-idn: xn-- labels with ASCII-only Punycode payloads are treated as equivalent to their decoded form

Description

symfony/polyfill-intl-idn provides a userland implementation of idn_to_utf8() and idn_to_ascii() for runtimes that lack the intl extension. Its Idn::process() method decodes labels prefixed with xn-- using Punycode but never enforces the validity criterion added in UTS #46 revision 33 Section 4 step 4.1.2: after a successful Punycode decode, the result must contain at least one non-ASCII code point.

As a consequence, xn-- labels whose Punycode payload is empty (xn--) or decodes to a string made of only ASCII code points (e.g. xn--kc1zs4-) are accepted by the polyfill while PHP's native ext-intl rejects them with IDNA_ERROR_INVALID_ACE_LABEL. Originally unequal domain names are therefore regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing and server-side request forgery (similar to CVE-2024-12224).

Example with IDNA_USE_STD3_RULES | IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_ASCII:

| Input | Polyfill output | Native ext-intl output | | --- | --- | --- | | poc.xn--kc1zs4-.com | poc.kc1zs4.com | false (errors=1024) | | poc.kc1zs4.xn-- | poc.kc1zs4. | false (errors=1024) |

Applications using the polyfill to canonicalise or compare hostnames inherit the inconsistency.

Resolution

Idn::process() now records IDNA_ERROR_INVALID_ACE_LABEL when a Punycode payload decodes to an empty string or to a string containing only ASCII code points, matching the native ext-intl behaviour and UTS #46 revision 33.

The patch for this issue is available here for branch 1.x.

Credits

Symfony would like to thank Nazy Mad for reporting the issue and Nicolas Grekas for providing the fix.

Record
GHSA-2xf4-cg6j-vhgq
CVSS 4.0
2.7 LowCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N/E:U
Weakness
CWE-1289
Updated
2026-11-02
NVD 6.9

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Record
CVE-2026-46644
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-1289
Updated
2026-11-02
OSV 6.9

symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload decodes to ASCII-only: insecure equivalence

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Record
CVE-2026-46644
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
Weakness
CWE-1289
Updated
2026-11-02
OSVDEBIAN-CVE-2026-46644 6.9

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Record
DEBIAN-CVE-2026-46644
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Updated
2026-11-02
OSVGHSA-2xf4-cg6j-vhgq 2.7

symfony/polyfill-intl-idn: xn-- labels with ASCII-only Punycode payloads are treated as equivalent to their decoded form

Description

symfony/polyfill-intl-idn provides a userland implementation of idn_to_utf8() and idn_to_ascii() for runtimes that lack the intl extension. Its Idn::process() method decodes labels prefixed with xn-- using Punycode but never enforces the validity criterion added in UTS #46 revision 33 Section 4 step 4.1.2: after a successful Punycode decode, the result must contain at least one non-ASCII code point.

As a consequence, xn-- labels whose Punycode payload is empty (xn--) or decodes to a string made of only ASCII code points (e.g. xn--kc1zs4-) are accepted by the polyfill while PHP's native ext-intl rejects them with IDNA_ERROR_INVALID_ACE_LABEL. Originally unequal domain names are therefore regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing and server-side request forgery (similar to CVE-2024-12224).

Example with IDNA_USE_STD3_RULES | IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_ASCII:

| Input | Polyfill output | Native ext-intl output | | --- | --- | --- | | poc.xn--kc1zs4-.com | poc.kc1zs4.com | false (errors=1024) | | poc.kc1zs4.xn-- | poc.kc1zs4. | false (errors=1024) |

Applications using the polyfill to canonicalise or compare hostnames inherit the inconsistency.

Resolution

Idn::process() now records IDNA_ERROR_INVALID_ACE_LABEL when a Punycode payload decodes to an empty string or to a string containing only ASCII code points, matching the native ext-intl behaviour and UTS #46 revision 33.

The patch for this issue is available here for branch 1.x.

Credits

Symfony would like to thank Nazy Mad for reporting the issue and Nicolas Grekas for providing the fix.

Record
GHSA-2xf4-cg6j-vhgq
CVSS 4.0
2.7 LowCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N/E:U
Weakness
CWE-1289
Updated
2026-11-02
OSVUBUNTU-CVE-2026-46644 6.9

Symfony Polyfill backports PHP features and provides compatibility layers for extensions and functions. From 1.17.1 until 1.38.1, symfony/polyfill-intl-idn accepts xn-- labels whose Punycode payload is empty or decodes to ASCII-only code points because Idn::process() does not enforce the UTS #46 revision 33 requirement that decoded ACE labels contain at least one non-ASCII code point. Originally unequal domain names can be regarded as equal, which can lead to blacklist bypassing, inconsistent URL parsing, and server-side request forgery in applications using the polyfill to canonicalise or compare hostnames. This issue is fixed in version 1.38.1.

Record
UBUNTU-CVE-2026-46644
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
Updated
2026-11-02
OSVCLSA-2026-1788334122 No score

TuxCare security update for symfony/polyfill-intl-idn (1 CVE)

TuxCare rebuilt symfony/polyfill-intl-idn to address 1 CVE. Fixed in v1.30.0-p1+tuxcare.

Record
CLSA-2026-1788334122
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
symfony/polyfill
Packagist
1.17.1 up to 1.38.1
1.38.1
symfony/polyfill-intl-idn
Packagist
1.17.1 up to 1.38.1
1.38.1
symfony/polyfill-intl-idn
TuxCare:Packagist
v1.30.0 up to v1.30.0-p1+tuxcare
v1.30.0-p1+tuxcare
php-symfony-polyfill
Debian:12
All versions, plus listed versions
1.27.0-21.28.0-11.29.0-11.29.0-21.29.0-3
Show 22 moreShow less
1.30.0-11.31.0-11.31.0-21.31.0-31.31.0-41.31.0-51.32.0-11.33.0-11.33.0-21.33.0-31.33.0-41.33.0-51.33.0-61.36.0-11.37.0-11.38.1-11.40.0-11.40.0-21.41.0-11.41.0-21.42.0-11.42.0-2
None known
php-symfony-polyfill
Debian:14
before 1.38.1-1, plus listed versions
1.1.0-11.1.1-11.17.0-11.17.0-21.17.1-1
Show 45 moreShow less
1.18.0-11.18.1-11.2.0-11.21.0-11.21.0-21.22.0-11.22.0-1~exp11.22.0-21.22.0-31.22.1-11.23.0-11.23.1-11.23.1-21.24.0-11.25.0-11.25.0-21.25.0-31.25.0-41.26.0-11.26.0-21.26.0-31.27.0-11.27.0-1~new1.27.0-21.28.0-11.29.0-11.29.0-21.29.0-31.30.0-11.31.0-11.31.0-21.31.0-31.31.0-41.31.0-51.32.0-11.33.0-11.33.0-21.33.0-31.33.0-41.33.0-51.33.0-61.36.0-11.37.0-11.5.0-11.6.0-1
1.38.1-1
symfony/polyfill
Packagist
1.17.1 up to 1.38.1, plus listed versions
v1.17.1v1.18.0v1.18.1v1.19.0v1.20.0
Show 19 moreShow less
v1.22.0v1.22.1v1.23.0v1.23.1v1.24.0v1.25.0v1.26.0v1.27.0v1.28.0v1.29.0v1.30.0v1.31.0v1.32.0v1.33.0v1.34.0v1.35.0v1.36.0v1.37.0v1.38.0
1.38.1
symfony/polyfill-intl-idn
Packagist
1.17.1 up to 1.38.1, plus listed versions
v1.17.1v1.18.0v1.18.1v1.19.0v1.20.0
Show 17 moreShow less
v1.22.0v1.22.1v1.23.0v1.24.0v1.25.0v1.26.0v1.27.0v1.28.0v1.29.0v1.30.0v1.31.0v1.32.0v1.33.0v1.34.0v1.35.0v1.36.0v1.37.0
1.38.1
php-symfony-polyfill
Ubuntu:18.04:LTS
All versions, plus listed versions
1.2.0-1ubuntu11.6.0-11.6.0-2
None known
php-symfony-polyfill
Ubuntu:22.04:LTS
All versions, plus listed versions
1.22.1-11.23.1-11.24.0-1ubuntu11.24.0-1ubuntu2
None known
php-symfony-polyfill
Ubuntu:24.04:LTS
All versions, plus listed versions
1.27.0-21.28.0-1
None known
php-symfony-polyfill
Ubuntu:25.10
All versions, plus listed versions
1.31.0-4ubuntu11.31.0-5ubuntu1
None known
php-symfony-polyfill
Ubuntu:26.10
All versions, plus listed versions
1.33.0-6ubuntu11.37.0-1ubuntu11.40.0-21.41.0-2
None known
php-symfony-polyfill
Ubuntu:26.04:LTS
All versions, plus listed versions
1.31.0-5ubuntu11.33.0-4ubuntu11.33.0-5ubuntu11.33.0-6ubuntu1
None known

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-46644 is a medium vulnerability (CVSS 6.9) in Symfony Polyfill, published May 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.54%, the 45th percentile. Fixed in symfony/polyfill 1.38.1.

References

Show 8 moreShow less
This page doesn't list everything

Left out here: 4 versions. The JSON record has them.

MoveEnter Open