CVE: CVE-2026-90776
Продукт: Ubuntu
Дата публикации: 13.09.2026
Критичность: HIGH
CVSS: 8.7 (4.0)
EPSS: 0,48%; процентиль 40,23%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В библиотеке Nodemailer обнаружена уязвимость, позволяющая атакующему вызвать отказ в обслуживании (DoS) на Node.js-приложениях, использующих парсинг email-адресов. Проблема затрагивает пакет
node-nodemailer в нескольких версиях Ubuntu LTS. Статья описывает механику атаки, уязвимые версии и способы проверки и исправления.Основные характеристики
Уязвимость приводит к отказу в обслуживании приложений, которые обрабатывают email-адреса через компонент
addressparser библиотеки Nodemailer. Атака не требует аутентификации и может быть запущена удаленно через специально сформированные заголовки.- Тип ошибки: CWE-407 (Неконтролируемое потребление ресурсов). Алгоритм парсинга имеет квадратичную сложность, что приводит к чрезмерному потреблению CPU.
- CVSS (v4.0): 8.7 (HIGH). Вектор:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N. Высокая оценка обусловлена удаленным доступом и серьезным влиянием на доступность.
- CVSS (v3.1): 7.5 (HIGH). Вектор:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H.
- EPSS: 0,48% (процентиль 40,23%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, но не нулевая.
- Эксплуатация: Публичные данные о массовой эксплуатации в реальных атаках отсутствуют. Зафиксирован только технический PoC и описание механизма.
Какие продукты и версии затронуты
Уязвимость затрагивает пакет
node-nodemailer в следующих версиях Ubuntu LTS. Версии пакетов в Ubuntu отличаются от версий npm-пакета Nodemailer, поэтому сверка должна проводиться по данным Ubuntu OSV.- Ubuntu 20.04 LTS (focal):
node-nodemailerверсии6.4.5-1.
- Ubuntu 22.04 LTS (jammy):
node-nodemailerверсии6.7.1+~6.4.4-1.
- Ubuntu 24.04 LTS (noble):
node-nodemailerверсии6.9.4+~6.4.9-4.
- Ubuntu 26.04 LTS (resolute):
node-nodemailerверсии8.0.4+~7.0.11-1.
Все перечисленные версии считаются уязвимыми, так как содержат компонент
addressparser с квадратичной сложностью обработки комментариев RFC 5322. Исправление в экосистеме npm вышло в версии 10.0.5, что означает, что все перечисленные выше сборки Ubuntu требуют обновления.Причина уязвимости
Причина уязвимости кроется в реализации парсинга email-адресов в компоненте
addressparser библиотеки Nodemailer. При обработке адресов, содержащих комментарии в соответствии со стандартом RFC 5322, алгоритм выполняет вложенные циклы, что приводит к квадратичной временной сложности (O(n²)).Атакующий может сформировать заголовок письма, в котором атомы (символы) разделены комментариями. При парсинге такого заголовка количество операций растет квадратично относительно длины входных данных. Это приводит к чрезмерному потреблению процессорного времени и блокировке event loop в Node.js на несколько секунд, что делает приложение недоступным для обработки других запросов.
Как работает атака
Атака реализуется через отправку специально сформированного email-адреса или заголовка в приложение, использующее Nodemailer для парсинга. Атакующий не нуждается в аутентификации, если приложение принимает входящие данные (например, через API или форму обратной связи) и передает их в уязвимый парсер.
Механика атаки заключается в создании строки, где каждый символ или группа символов отделена комментариями. При обработке такой строки парсер выполняет избыточное количество операций. В результате процессорное время тратится на парсинг одного запроса, что блокирует event loop.
Для Node.js-приложений, работающих в одном процессе, это означает, что все остальные запросы в этот момент будут ждать, пока не завершится обработка «зависшего» запроса, что приводит к отказу в обслуживании.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо соблюдение следующих условий:
- Использование уязвимой версии: Приложение должно использовать версию Nodemailer в диапазоне от 9.1.0 до 10.0.4 (или соответствующие сборки Ubuntu, перечисленные выше).
- Доступ к парсеру: Атакующий должен иметь возможность передать специально сформированную строку в функцию парсинга адресов. Это может быть через входящий email, API-запрос или любой другой канал, где данные обрабатываются Nodemailer.
- Отсутствие ограничений на длину: Если приложение не ограничивает длину входных данных или количество комментариев, атакующему проще вызвать блокировку. Однако даже при ограничениях, если они не учитывают квадратичную сложность, атака возможна.
Возможный сценарий атаки
Типичный сценарий атаки выглядит следующим образом. Атакующий отправляет запрос в веб-приложение, которое использует Nodemailer для обработки email-адресов (например, для отправки уведомлений или валидации). В теле запроса или заголовках передается специально сформированная строка, содержащая множество комментариев, разделенных атомами.
Приложение передает эту строку в
addressparser. Парсер начинает обработку, и из-за квадратичной сложности количество операций резко возрастает. Event loop Node.js блокируется на несколько секунд.В течение этого времени приложение не может обрабатывать другие запросы. Если атакующий отправляет несколько таких запросов параллельно, нагрузка на процессор увеличивается, что может привести к полному отказу в обслуживании или даже к перезапуску процесса, если сработают механизмы мониторинга (health checks).
Есть ли публичный эксплойт
На момент публикации статьи публичные данные о массовой эксплуатации CVE-2026-90776 в реальных атаках отсутствуют. В каталоге CISA KEV уязвимость не фигурирует.
Однако существует техническое описание и PoC, опубликованные в рамках раскрытия уязвимости. Это означает, что атакующие знают о проблеме и могут использовать ее, но широкомасштабных инцидентов пока не зафиксировано.
Отсутствие сведений о массовой эксплуатации не гарантирует, что атаки не происходят, особенно в закрытых корпоративных средах.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы. Однако можно использовать общие признаки, которые указывают на возможную попытку DoS-атаки через парсинг email-адресов. Эти признаки неспецифичны и могут быть вызваны иными причинами.
- Высокая загрузка CPU: Резкий рост потребления процессора в процессах Node.js, использующих Nodemailer.
- Задержки в обработке запросов: Увеличение времени отклика API или веб-интерфейса, особенно при обработке запросов, связанных с email.
- Аномальные заголовки: Наличие в логах входящих запросов строк с большим количеством комментариев в email-адресах (например,
a(b)c(d)eи т.п.).
- Перезапуски процессов: Частые перезапуски Node.js-процессов, если они блокируются и убиваются мониторингом.
Как обнаружить атаку
Для обнаружения попытки эксплуатации уязвимости рекомендуется настроить мониторинг следующих параметров:
- Мониторинг CPU и задержек: Настройте алерты на превышение пороговых значений CPU для Node.js-процессов и на увеличение времени отклика API.
- Анализ логов: Просматривайте логи входящих запросов на наличие аномальных email-адресов с большим количеством комментариев. Используйте регулярные выражения для поиска паттернов, похожих на
.*\(.*\).*\(.*\).*.
- Мониторинг событий: Следите за событиями перезапуска процессов и ошибками в логах Node.js, которые могут указывать на блокировку event loop.
- Сканирование зависимостей: Регулярно сканируйте зависимости проекта на наличие уязвимых версий Nodemailer с помощью инструментов, таких как
npm auditилиtrivy.
Как проверить свою версию
Для проверки версии пакета
node-nodemailer в Ubuntu используйте следующие команды. Замените <имя-пакета> на node-nodemailer.
Bash:
# Проверка версии Ubuntu
cat /etc/os-release
# Проверка версии ядра
uname -r
# Проверка версии пакета node-nodemailer
apt-cache policy node-nodemailer
# Проверка статуса безопасности Ubuntu
ubuntu-security-status
В выводе
apt-cache policy node-nodemailer обратите внимание на установленную версию. Если она совпадает с одной из уязвимых версий, перечисленных в разделе «Какие продукты и версии затронуты», система требует обновления.Исправление
Основным способом устранения уязвимости является обновление пакета
node-nodemailer до исправленной версии. В экосистеме npm исправление вышло в версии 10.0.5. Для Ubuntu необходимо дождаться выпуска обновленного пакета в репозиториях безопасности.- Обновление через apt: Выполните
sudo apt update && sudo apt upgrade node-nodemailer, когда исправленный пакет станет доступен в репозиториях Ubuntu.
- Обновление через npm (для локальных проектов): Если вы используете Nodemailer напрямую через npm, обновите пакет до версии 10.0.5 или выше:
npm update nodemailer.
- Проверка зависимостей: Убедитесь, что все зависимости проекта используют исправленную версию Nodemailer. Используйте
npm ls nodemailerдля проверки.
Временные меры защиты
Пока исправленный пакет не стал доступен, можно применить следующие временные меры для снижения риска:
- Ограничение длины входных данных: Настройте приложение так, чтобы оно отклоняло email-адреса, превышающие разумную длину (например, 254 символа, как в RFC 5321).
- Ограничение количества комментариев: Если возможно, модифицируйте парсинг или добавьте предобработку, которая удаляет или ограничивает количество комментариев в email-адресах.
- Использование worker threads: Перенесите парсинг email-адресов в отдельные worker threads, чтобы блокировка event loop основного процесса не влияла на обработку других запросов.
- Rate limiting: Ограничьте частоту запросов к API, которые обрабатывают email-адреса, чтобы снизить вероятность одновременной отправки множества атакующих запросов.
Как проверить устранение уязвимости
После обновления пакета необходимо убедиться, что уязвимость устранена. Для этого можно выполнить следующие шаги:
- Проверка версии: Убедитесь, что установленная версия
node-nodemailerсоответствует исправленной версии (10.0.5 или выше для npm, или соответствующая версия для Ubuntu).
- Функциональное тестирование: Проведите тестирование приложения, отправив специально сформированные email-адреса с комментариями. Убедитесь, что приложение обрабатывает их без блокировки event loop.
- Наблюдение за нагрузкой: После обновления наблюдайте за загрузкой CPU и временем отклика. Если аномалии исчезли, это косвенно подтверждает, что уязвимость устранена.
- Сканирование зависимостей: Повторно выполните сканирование зависимостей, чтобы убедиться, что уязвимые версии Nodemailer отсутствуют в проекте.
Вывод
CVE-2026-90776 представляет собой серьезную угрозу для Node.js-приложений, использующих Nodemailer для парсинга email-адресов. Хотя вероятность массовой эксплуатации пока низкая, атакующие могут использовать эту уязвимость для отказа в обслуживании.
Администраторам Ubuntu и разработчикам рекомендуется проверить версии используемых пакетов, обновить их до исправленных версий и применить временные меры защиты, пока обновление не станет доступно.
Регулярный мониторинг и сканирование зависимостей помогут своевременно выявлять и устранять подобные уязвимости.
Официальные источники
История обновлений статьи
- 17.09.2026 — Опубликована первая версия материала.
- 18.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
