CVE: CVE-2017-20285
Продукт: Ubuntu
Дата публикации: 05.10.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,18%; процентиль 7,25%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
CVE-2017-20285 — уязвимость Perl-модуля YAML версий до 1.30: загруженный YAML-документ может инициировать вызов метода
DESTROY произвольных классов.В Ubuntu затронут пакет
libyaml-perl в нескольких LTS-релизах, включая 16.04 LTS, 18.04 LTS, 20.04 LTS, 22.04 LTS, 24.04 LTS и 26.04 LTS.Оценки различаются: Ubuntu присваивает проблеме уровень medium, тогда как CVSS 3.1 от NVD даёт 9.1 (CRITICAL). Ниже разобраны механика, условия эксплуатации и порядок обновления.
Основные характеристики
Суть риска: приложение, загружающее недоверенный YAML-документ через уязвимую версию Perl-модуля YAML, позволяет самому документу влиять на поведение объектов Perl — вплоть до удаления каталогов на диске через деструкторы уже загруженных классов.
Ключевые параметры:
- Тип ошибки: CWE-470 (использование внешнего ввода для выбора класса/поведения) и CWE-502 (небезопасная десериализация).
- CVSS 3.1: 9.1, CRITICAL, вектор
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N— атака по сети, без привилегий и без участия пользователя.
- Оценка Ubuntu: medium — вендор оценивает практический риск для дистрибутива ниже базовой метрики NVD.
- EPSS: 0,18% (0.00184) — низкая расчётная вероятность эксплуатации в ближайшие 30 дней; процентиль 7,25%.
- CISA KEV: в каталоге известных эксплуатируемых уязвимостей подтверждения нет.
- Статус CVE: Deferred, опубликовано 2026-10-05.
Какие продукты и версии затронуты
Затронут компонент — Perl-модуль YAML версий до 1.30. В Ubuntu уязвимость отслеживается для исходного пакета
libyaml-perl (запись UBUNTU-CVE-2017-20285, опубликована 2026-10-05).По данным Ubuntu OSV затронуты следующие релизы и версии пакета:
- Ubuntu 16.04 LTS —
libyaml-perl1.15-1 (xenial);
- Ubuntu 18.04 LTS —
libyaml-perl1.24-1 (bionic);
- Ubuntu 20.04 LTS —
libyaml-perl1.30-1 (focal);
- Ubuntu 22.04 LTS —
libyaml-perl1.30-1 (jammy);
- Ubuntu 24.04 LTS —
libyaml-perl1.31-1 (noble);
- Ubuntu 26.04 LTS —
libyaml-perl1.31-1 (resolute).
Для всех перечисленных релизов диапазон указан как «introduced: 0», то есть уязвимость считается присутствующей с начала истории пакета в дистрибутиве. Поле availability в записи не заполнено, поэтому сведения о доступности исправленных сборок для конкретных релизов из переданного пакета доказательств однозначно не следуют — точный состав исправленных версий проверяйте на странице Ubuntu Security.
Причина уязвимости
Причина — в поведении загрузчика YAML при обработке тега
perl/hash:Class. Такой тег указывает загрузчику создать хеш и «bless» его в класс, имя которого задано самим документом. Поля объекта также берутся из документа.Дальше работает семантика Perl: когда объект выходит из области видимости, интерпретатор автоматически вызывает его деструктор
DESTROY. Поскольку класс объекта выбрал атакующий, вызывается DESTROY произвольного класса, уже загруженного в процессе.Что именно произойдёт, зависит от набора классов в памяти приложения. В описании CVE приведён пример: при наличии в процессе класса
File::Temp::Dir из ядра Perl вызов его деструктора приводит к удалению дерева каталогов, путь к которому задан в документе. Это нарушение границы доверия — данными документа управляет исполнение кода классов, которое должно контролироваться только приложением.Как работает атака
Путь данных выглядит так: недоверенный YAML-документ поступает в приложение (например, из файла, сетевого ответа или конфигурации) и передаётся функции загрузки модуля YAML уязвимой версии.
При разборе документа тег
perl/hash:Class заставляет загрузчик создать объект указанного класса с полями из документа. Атакующий выбирает класс и содержимое объекта, не исполняя произвольный код напрямую.Когда объект покидает область видимости, Perl вызывает его метод
DESTROY. Если выбранный класс имеет деструктор с побочными эффектами, эти эффекты выполняются в контексте и с привилегиями приложения. В подтверждённом примере деструктор File::Temp::Dir удаляет дерево каталогов, имя которого контролирует документ.Итоговый эффект зависит от окружения: от отсутствия последствий (если подходящих классов нет) до разрушения данных на диске. Вектор CVSS предполагает сетевой вектор атаки без привилегий и взаимодействия с пользователем, однако конкретные последствия определяются классами, загруженными в целевом процессе.
Условия успешной эксплуатации
Из описания CVE и метрики CVSS следуют такие условия:
- приложение использует Perl-модуль YAML версии до 1.30;
- приложение загружает YAML-документ, контролируемый атакующим;
- в процессе уже загружен класс, чей метод
DESTROYвыполняет опасные действия (например,File::Temp::Dirиз ядра Perl);
- по вектору CVSS атака сетевая (
AV:N), без привилегий (PR:N) и без участия пользователя (UI:N) — достаточно возможности доставить документ в уязвимый загрузчик.
Наличие подходящего загруженного класса — ключевое ограничение: без него документ может лишь создать объект безвредного класса.
Возможный сценарий атаки
Разумный сценарий (вывод на основе описанной механики, а не зафиксированный инцидент): сервис на Perl принимает YAML-документы от пользователей или из внешнего источника — например, конфигурации, задания или данные API.
Атакующий формирует документ с тегом
perl/hash:Class, указывающим на класс с «опасным» деструктором, и передаёт его сервису. При загрузке документа создаётся объект выбранного класса с заданными полями.Когда объект уничтожается сборщиком мусора Perl, вызывается
DESTROY, и деструктор выполняет заложенное документом действие — в описанном примере удаляет дерево каталогов. Это приводит к разрушению данных или отказу в обслуживании с привилегиями уязвимого приложения. Иные последствия возможны при наличии других классов с деструкторами, но конкретные сценарии кроме удаления каталогов источниками не подтверждены.Есть ли публичный эксплойт
В переданном пакете доказательств нет сведений о публичном PoC-коде, готовом эксплойте или подтверждённых случаях эксплуатации в реальных атаках. Запись отсутствует в каталоге CISA KEV, а EPSS низкий (0,18%).
При этом в ссылках CVE присутствуют патчи в репозитории yaml-pm, обсуждение issue и публикация в списке oss-security — это указывает на публичное техническое описание проблемы, но не подтверждает наличие рабочего эксплойта. Отсутствие сведений об эксплойте не означает его отсутствия: обновление не следует откладывать из-за низкой видимости.
Признаки эксплуатации
Специфичные IOC для этой уязвимости в доступных источниках не опубликованы. Признаки эксплуатации приходится искать по общим, неспецифичным точкам контроля:
- неожиданные удаления файлов или каталогов в журналах файловой системы и системах мониторинга, особенно если процесс на Perl обслуживает YAML-документы;
- журналы приложений на Perl с записями о загрузке YAML-документов, содержащих теги вида
perl/hash:...;
- аномальные ошибки или аварийные завершения Perl-процессов после приёма внешних YAML-документов.
Эти признаки не являются подтверждёнными индикаторами компрометации — они лишь указывают направления проверки.
Как обнаружить атаку
Обнаружение строится на двух уровнях: поиск уязвимых версий и поиск следов аномального поведения.
Для инвентаризации проверьте, какие системы используют пакет
libyaml-perl, и сопоставьте версии с разделом «Какие продукты и версии затронуты». Команды проверки приведены ниже.Для поведенческого контроля:
- аудит журналов Perl-приложений, обрабатывающих внешние YAML, на теги
perl/hash:Classи подобные;
- мониторинг массовых удалений каталогов процессами на Perl;
- сверка времени инцидентов удаления данных с моментами приёма YAML-документов.
Специфичных сигнатур и IOC источники не предоставляют, поэтому результаты таких проверок следует трактовать осторожно.
Как проверить свою версию
Проверьте версию дистрибутива и пакета:
bash
cat /etc/os-release
uname -r
apt-cache policy libyaml-perl
ubuntu-security-status
apt-cache policy libyaml-perl покажет установленную и доступную версии пакета. ubuntu-security-status поможет оценить статус безопасности пакетов в системе. Дополнительно версию самого модуля можно узнать командой Perl, например perl -MYAML -e 'print $YAML::VERSION' — это общепринятый способ, не специфичный для Ubuntu.Исправление
Основная мера — обновить пакет
libyaml-perl до версии, в которой проблема устранена. Уязвимость исправлена в YAML 1.30 для Perl; в Ubuntu для части релизов в записи OSV указаны версии 1.30-1 и 1.31-1, при этом все перечисленные релизы помечены как затронутые с «introduced: 0».Порядок действий:
- обновите список пакетов:
sudo apt update;
- установите обновление:
sudo apt install --only-upgrade libyaml-perl(илиsudo apt upgrade libyaml-perl);
- перезапустите Perl-приложения, использующие модуль YAML, чтобы в памяти не оставался старый код.
Точный состав исправленных пакетов по релизам проверяйте на странице Ubuntu Security CVE-2017-20285 — в переданных данных поле availability не заполнено, и утверждать наличие опубликованных исправлений для каждого релиза из них нельзя.
Временные меры защиты
Если обновление сразу недоступно, снизить риск можно организационными и архитектурными мерами. Это защитные выводы, а не подтверждённые рекомендации вендора:
- не загружать YAML-документы из недоверенных источников уязвимой версией модуля;
- по возможности перейти на безопасный формат обмена для внешних данных, например YAML без Perl-тегов;
- ограничить привилегии Perl-процессов, обрабатывающих YAML, чтобы деструкторы не могли разрушать важные данные;
- фильтровать входные документы на наличие тегов
perl/hash:...до передачи загрузчику.
Эффективность таких мер зависит от приложения; полной защитой остаётся обновление.
Как проверить устранение уязвимости
После обновления убедитесь, что уязвимая версия заменена:
bash
apt-cache policy libyaml-perl
perl -MYAML -e 'print $YAML::VERSION'
Версия модуля должна быть не ниже 1.30. Также проверьте:
- что
ubuntu-security-statusне помечаетlibyaml-perlкак уязвимый;
- что Perl-приложения, использующие YAML, перезапущены и работают с новой библиотекой;
- что в журналах после обновления нет новых инцидентов неожиданного удаления каталогов.
Если версия модуля в системе ниже 1.30, обновление не завершено.
Вывод
CVE-2017-20285 показывает, как особенность семантики Perl — автоматический вызов
DESTROY — превращает безобидную на вид десериализацию YAML в инструмент разрушения данных. Для Ubuntu затронут пакет libyaml-perl во всех актуальных LTS-релизах, включая 16.04 LTS и новее.Оценка Ubuntu (medium) ниже базовой CVSS 9.1, а EPSS составляет 0,18%, однако это не основание откладывать обновление: последствия зависят от классов, загруженных в конкретном приложении, и могут включать удаление деревьев каталогов. Проверьте версию
libyaml-perl, установите исправление и перезапустите зависимые сервисы; актуальные данные — на Ubuntu Security и NVD.Официальные источники
История обновлений статьи
- 07.10.2026 — Опубликована первая версия материала.
