CVE-2026-87080 в Ubuntu: расхождение декодирования Punycode и практическая проверка пакетов

CVE: CVE-2026-87080
Продукт: Ubuntu
Дата публикации: 22.09.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,63%; процентиль 48,20%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В Ubuntu затронут пакет libnet-idn-encode-perl, который использует чистоперловый модуль Net::IDN::Punycode::PP. До версии 2.590 чистоперловый декодер decode_punycode обрабатывает обрезанный label так, что получает дополнительный символ и позицию, которых не было в исходной Punycode-строке.

XS-бэкенд тот же label отклоняет, поэтому две установки могут давать разные результаты для одного и того же имени. В Ubuntu это влияет на все LTS-релизы с пакетом libnet-idn-encode-perl: 16.04, 18.04, 20.04, 22.04, 24.04 и 26.04.

Основные характеристики​


Риск связан с некорректным чистоперловым декодированием Punycode-имён в Perl-библиотеке Net::IDN::Encode. Ошибка позволяет получить детерминированное имя, которое не соответствует закодированному label, и использовать это расхождение между чистоперловой и XS-реализациями.

  • CVSS 3.1: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H, оценка 9.1, критическая.
  • CWE: CWE-1286 — ошибка декодирования или интерпретации входных данных.
  • EPSS: 0,63%, процентиль 48,19%.
  • Статус CVE: Deferred.
  • Пакет Ubuntu: libnet-idn-encode-perl.
  • Версия исправления upstream: Net-IDN-Encode 2.590.

Какие продукты и версии затронуты​


В Ubuntu затронут пакет libnet-idn-encode-perl во всех перечисленных LTS-релизах.

  • Ubuntu 16.04 LTS — версия пакета 2.300-1build1
  • Ubuntu 18.04 LTS — версия пакета 2.400-1build1
  • Ubuntu 20.04 LTS — версия пакета 2.500-1build1
  • Ubuntu 22.04 LTS — версия пакета 2.500-2build1
  • Ubuntu 24.04 LTS — версия пакета 2.500-5
  • Ubuntu 26.04 LTS — версия пакета 2.500-5build1

Причина уязвимости​


Чистоперловый декодер decode_punycode читает цифры label по одной через four-argument substr и проверяет результат через defined, чтобы обнаружить конец входных данных.

Для исчерпанной строки substr возвращает пустую строку, а не undef, поэтому цикл продолжается за пределы входа. Пустая строка преобразуется в цифровое значение вне диапазона, уменьшает аккумулятор, и декодер выводит один дополнительный code point и его позицию.

Как работает атака​


Атакующий может подобрать label, который чистоперловый декодер расшифрует в имя с лишним символом, а XS-бэкенд отклонит. Если две стороны используют разные бэкенды или разные версии пакета, одно и то же Punycode-имя может разрешаться в разные значения.

Это нарушает ожидаемую однозначность IDN-разрешения. Результат детерминирован: один и тот же label всегда даёт одинаковое расхождение между реализациями.

Условия успешной эксплуатации​


Для наблюдения эффекта достаточно иметь доступ к Perl-окружению с установленным libnet-idn-encode-perl до исправления и возможность передать label декодеру.

Для практического использования расхождения нужны две стороны, где одна использует чистоперловый модуль, а другая — XS-бэкенд или другую реализацию.

Возможный сценарий атаки​


Сценарий строится вокруг обмена именами между системами с разными бэкендами декодирования. Отправитель посылает Punycode-label, который в одной установке приводит к имени с дополнительным символом, а в другой — отклоняется или обрабатывается иначе.

Если приложение принимает результат декодирования как доверенный идентификатор ресурса, это может привести к несовпадению ожиданий между сторонами.

Есть ли публичный эксплойт​


В предоставленных источниках есть ссылка на patch и описание изменения в Net-IDN-Encode 2.590-TRIAL.

Публичный эксплойт как отдельный рабочий артефакт в данных пакетах не указан. Наличие технического описания механизма и ссылки на patch не подтверждает наличие готового exploit, PoC или реальной эксплуатации.

Признаки эксплуатации​


Специфичных IOC для CVE-2026-87080 в предоставленных источниках нет.

Можно использовать общие точки контроля:

  • неожиданные изменения разрешённых имён
  • расхождения между результатами декодирования на разных хостах
  • вызовы Perl-модулей IDN в нестандартных процессах

Как обнаружить атаку​


Для обнаружения можно отслеживать результаты работы Net::IDN::Punycode::PP в Perl-приложениях, особенно там, где label приходит из внешнего источника.

Полезно сравнивать версии libnet-idn-encode-perl на всех хостах и фиксировать случаи, когда одно и то же имя обрабатывается по-разному.

Как проверить свою версию​


Для проверки Ubuntu-окружения можно использовать команды из пакета доказательств. Замените <имя-пакета> на libnet-idn-encode-perl при проверке версии через apt-cache policy.

Bash:
cat /etc/os-release
uname -r
apt-cache policy libnet-idn-encode-perl
ubuntu-security-status

Исправление​


Обновите пакет libnet-idn-encode-perl до исправленной версии, которая соответствует Net-IDN-Encode 2.590 или выше. В Ubuntu это делается через стандартный механизм обновления пакетов.

Bash:
apt-get update
apt-get upgrade libnet-idn-encode-perl

Временные меры защиты​


Пока обновление не выполнено, можно ограничить входные label для Perl-приложений, которые вызывают decode_punycode. Если приложение использует IDN-имена из внешних источников, стоит добавить проверку результата декодирования на соответствие ожидаемому диапазону символов и длине.

Как проверить устранение уязвимости​


После обновления проверьте версию пакета и статус безопасности Ubuntu.

Bash:
apt-cache policy libnet-idn-encode-perl
ubuntu-security-status

Вывод​


CVE-2026-87080 затрагивает чистоперловый декодер Punycode в Net::IDN::Encode и приводит к детерминированному расхождению между бэкендами. В Ubuntu это означает необходимость обновления libnet-idn-encode-perl во всех LTS-релизах, где пакет установлен.

Официальные источники​


  1. NVD — CVE-2026-87080
  2. Ubuntu OSV — CVE-2026-87080
  3. FIRST EPSS — CVE-2026-87080

История обновлений статьи​


  • 27.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ