CVE: CVE-2016-15059
Продукт: Debian
Дата публикации: 22.09.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,17%; процентиль 6,80%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость CVE-2016-15059 затрагивает пакет libnet-idn-encode-perl в Debian. Ошибка возникает при кодировании строки функцией encode_punycode: XS-бэкенд записывает последнюю цифру и нулевой символ без проверки места в буфере, что приводит к переполнению heap. В Debian проблема устранена в версиях 2.303-1 для bookworm, forky, sid и trixie.
Основные характеристики
Риск заключается в повреждении памяти при обработке пользовательской строки через Perl-модуль Net::IDN::Punycode. Переполнение heap может привести к компрометации процесса, который выполняет кодирование.
- Тип ошибки: CWE-122 (Buffer Copy without Checking Size of Input)
- CVSS 3.1:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H— оценка 9.8, критическая
- Вектор атаки: удалённый, без необходимости авторизации и взаимодействия с пользователем
- Факт эксплуатации: не подтверждён в предоставленных источниках
- EPSS: 0,17% (процентиль 6,80%)
Какие продукты и версии затронуты
В Debian затронут пакет libnet-idn-encode-perl, который предоставляет Perl-модуль Net::IDN::Punycode.
Затронуты следующие релизы и версии:
- bookworm: исправлено в версии 2.303-1 (в репозитории bookworm доступна версия 2.500-3)
- forky: исправлено в версии 2.303-1 (в репозитории forky доступна версия 2.500-5)
- sid: исправлено в версии 2.303-1 (в репозитории sid доступна версия 2.500-5)
- trixie: исправлено в версии 2.303-1 (в репозитории trixie доступна версия 2.500-5)
Причина уязвимости
Ошибка находится в XS-бэкенде модуля Net::IDN::Punycode.
При кодировании строки функция encode_punycode формирует результат в буфере скалара, размер которого определяется длиной входных данных. Цикл, выводящий цифры каждого кодового пункта, проверяет доступное место перед каждой записью.
Однако запись последней цифры каждого цикла и завершающего нулевого символа выполняется без проверки места. Если закодированная форма строки полностью заполняет буфер, эти две записи выходят за его пределы и повреждают heap.
Затронуто только использование XS-бэкенда. Чистый Perl-код не подвержен этой ошибке.
Как работает атака
Атакующий передаёт строку, которая при punycode-кодировании создаёт результат, заполняющий буфер скалара.
Первая цифра каждого кодового пункта записывается после проверки места. Последняя цифра и нулевой символ записываются без проверки. При совпадении длины закодированного результата с размером буфера происходит запись в память за пределами буфера.
Повреждение heap может привести к перезаписи соседних объектов памяти, что позволяет изменить состояние процесса или вызвать непредсказуемое поведение.
Для реализации достаточно передать вредоносную строку в функцию encode_punycode через Perl-приложение, которое использует модуль Net::IDN::Punycode с XS-бэкендом.
Условия успешной эксплуатации
Для успешной эксплуатации необходимы следующие условия:
- В системе установлен пакет libnet-idn-encode-perl версии ниже 2.303-1
- Процесс использует Perl-модуль Net::IDN::Punycode с XS-бэкендом
- Атакующий может передать строку для кодирования через приложение или сервис, использующий этот модуль
- Строка должна быть такой, что её punycode-кодирование заполняет буфер без места для последней цифры и нулевого символа
Возможный сценарий атаки
Сценарий предполагает удалённый доступ к Perl-приложению, которое обрабатывает пользовательский ввод через Net::IDN::Punycode.
Атакующий отправляет строку, которая при кодировании создаёт результат максимальной длины. XS-бэкенд проверяет место для большинства цифр, но не для последней цифры и нулевого символа.
Запись за пределы буфера повреждает heap. В зависимости от структуры памяти и поведения процесса это может привести к падению приложения или изменению его состояния.
Поскольку уязвимость затрагивает память процесса, последствия зависят от конкретного приложения: оно может потерять данные, изменить логику работы или предоставить атакующему возможность повлиять на выполнение кода.
Есть ли публичный эксплойт
В предоставленных источниках нет информации о публичном эксплойте.
Отсутствуют сведения о:
- Готовых инструментах эксплуатации
- Рабочих payload для переполнения буфера
- Подтверждённых случаях атаки в реальных системах
- Названиях патчей или конкретных исправлениях вне Debian Security Tracker
Отсутствие данных не означает, что эксплойт невозможен. Механика ошибки описана достаточно подробно для самостоятельной проверки.
Признаки эксплуатации
Специфичных индикаторов компрометации в источниках нет.
Неспецифичные точки контроля:
- Внезапные падения Perl-процессов, использующих Net::IDN::Punycode
- Аномальные записи в логах приложений с обработкой punycode-строки
- Изменение состояния heap или сегменты памяти, не соответствующие ожидаемой структуре
- Повышенная активность процессов, обрабатывающих пользовательский ввод через Perl-модули IDN
Как обнаружить атаку
Для обнаружения атаки можно использовать следующие методы:
- Проверка версий установленного пакета libnet-idn-encode-perl
- Мониторинг логов Perl-приложений на ошибки памяти или segfault при обработке punycode-строки
- Анализ heap-состояния процессов с помощью отладочных инструментов
- Поиск аномальных записей в системных журналах, связанных с Perl-процессами
Конкретные сигнатуры для детектирования не предоставлены в источниках.
Как проверить свою версию
Проверка версии пакета и системы:
Bash:
cat /etc/debian_version
Bash:
cat /etc/os-release
Bash:
apt-cache policy libnet-idn-encode-perl
Bash:
dpkg-query -W -f='${Package} ${Version}\n' libnet-idn-encode-perl
Замените <имя-пакета> на фактическое имя пакета, если проверяется другой компонент. Для Debian пакет называется libnet-idn-encode-perl.
Версии ниже 2.303-1 уязвимы. Версии 2.303-1 и выше исправлены.
Исправление
Исправление доступно в Debian Security Tracker.
Обновите пакет libnet-idn-encode-perl до версии 2.303-1:
Bash:
apt-get update
apt-get upgrade libnet-idn-encode-perl
Для каждого релиза Debian исправление уже доступно в соответствующем репозитории.
После обновления проверьте версию пакета и убедитесь, что все зависимости обновлены до актуальных значений.
Временные меры защиты
Пока обновление не выполнено, можно снизить риск:
- Ограничить доступ к Perl-приложениям, использующим Net::IDN::Punycode с XS-бэкендом
- Фильтровать входные строки на стороне приложения, чтобы исключить слишком длинные punycode-результаты
- Изолировать процессы, обрабатывающие пользовательский ввод через этот модуль
- Отключить использование XS-бэкенда, если приложение поддерживает чистый Perl-код
Эти меры не устраняют уязвимость полностью и требуют дополнительной проверки корректности работы приложения.
Как проверить устранение уязвимости
После обновления проверьте:
Bash:
dpkg-query -W -f='${Package} ${Version}\n' libnet-idn-encode-perl
Убедитесь, что версия не ниже 2.303-1.
Также выполните:
Bash:
apt-cache policy libnet-idn-encode-perl
Проверьте, что пакет установлен из исправленного репозитория и нет устаревших версий в кэше.
Для дополнительной уверенности можно запустить тестовые строки через приложение и убедиться, что ошибки памяти не воспроизводятся.
Вывод
CVE-2016-15059 — критическая уязвимость heap buffer overflow в Perl-модуле Net::IDN::Punycode.
Ошибка возникает из-за отсутствия проверки места при записи последней цифры и нулевого символа в XS-бэкенде. В Debian проблема устранена в версиях 2.303-1 для всех основных релизов.
Администратору необходимо обновить пакет libnet-idn-encode-perl и проверить версии зависимостей. До обновления рекомендуется ограничить доступ к приложениям, использующим этот модуль с XS-бэкендом.
Официальные источники
История обновлений статьи
- 23.09.2026 — Опубликована первая версия материала.
