Vulnerability GHSA-539f-xcgw-2gjg

Low Risk
LOW RISK
CVSS Score: 3.1
Score Range: < 4.0
Low severity vulnerabilities (CVSS < 4.0). Hygiene issues that can accumulate but pose lower immediate risk.
17 hours ago
November 12, 2026 at 10:44 PM UTC
Addressable display_uri can show misleading hosts containing bidi and invisible characters
2.0.0 - 2.2.8 and 2.3.2 - 2.9.0
2.0.0 - 2.2.8 and 2.3.2 - 2.9.0

Summary

Addressable display_uri can show misleading hosts containing bidi and invisible characters

Details

Impact

Addressable::IDNA.to_unicode decodes Punycode labels (labels beginning with xn--) that contain characters which change how text is displayed without being visible themselves. These include bidirectional controls such as U+202E RIGHT-TO-LEFT OVERRIDE and U+2066–U+2069, zero-width characters, and other invisible format characters. Addressable::URI#display_uri uses to_unicode, so it can display a host whose characters appear reordered or which looks identical to a different host. For example, the host of http://xn--abcmoc-dm0c.com/ is displayed as abc, U+202E, moc.com, and the override makes everything after abc render right to left.

Parsing, host, normalized_host and any connection made from the URI are not affected. Only the displayed form is. Applications that show display_uri to users (link previews, chat and email clients, admin interfaces) can be used to make a malicious domain look like a trusted one.

  • In the pure-Ruby IDNA implementation, all such characters are decoded, including those that IDNA's nameprep profile prohibits.
  • In the native IDNA implementation, used when libidn and the idn-ruby gem are installed, libidn rejects most of them, but not characters added to Unicode after version 3.2, such as U+061C and U+2066–U+2069.

Affected Versions

The pure-Ruby IDNA implementation is affected in Addressable >= 2.0.0. The native IDNA implementation is affected in Addressable >= 2.5.2, when to_unicode began accepting characters unassigned in Unicode 3.2. It is fixed in 2.9.1 for both implementations, where such labels are returned unchanged.

Workarounds

  • Install libidn and the idn-ruby gem, so that Addressable uses the native IDNA implementation. This reduces the affected characters to those added since Unicode 3.2.
  • Check displayed hosts for bidirectional and invisible characters (e.g., /[\p{Cc}\p{Cf}\p{Default_Ignorable_Code_Point}]/) and fall back to normalized_host when one is present.

Credits

Reported by @andrewstellman.

For more information

If there are any questions or comments about this advisory:

Impacted packages

Timeline

Published
17 hours ago
November 12, 2026 at 10:44 PM UTC
Fixed (2.9.1)
14 days ago
October 30, 2026 at 08:03 AM UTC
Last Modified
17 hours ago
November 12, 2026 at 11:00 PM UTC