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-релизах, где пакет установлен.
Официальные источники
История обновлений статьи
- 27.09.2026 — Опубликована первая версия материала.
