CVE-2016-15059 в Debian: heap buffer overflow в Net::IDN::Punycode и исправление

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-бэкендом.

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


  1. NVD — CVE-2016-15059
  2. Debian Security Tracker — CVE-2016-15059
  3. FIRST EPSS — CVE-2016-15059

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


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