23 октября 2026 года Salvatore Bonaccorso отправил в рассылку debian-security-announce письмо DSA-6579-1. Пакет один: roundcube, веб-почта для IMAP. Для стабильного выпуска, это trixie, то есть Debian 13, исправление названо прямо: 1.6.20+dfsg-0+deb13u1. В письме двадцать CVE, от CVE-2026-113386 до CVE-2026-114732, и баг Debian 1151279. Рядом в текстах карточек названа ветка 1.7 до 1.7.5. В trixie Debian везёт линейку 1.6, не 1.7.
Пакет 1.6.20 для trixie
На странице roundcube в трекере до этого security-обновления у trixie стоит 1.6.18+dfsg-0+deb13u1, статус vulnerable. Закрытая сборка лежит в trixie-security. Sid и forky уже на 1.6.20+dfsg-1: это другая ревизия Debian, не строка deb13u1 из бюллетеня. Совпадает апстрим 1.6.20, не номер пакета.
Исходник roundcube в Debian 13 собирается в несколько бинарных пакетов. Код интерфейса в roundcube-core, дополнения в roundcube-plugins. Имена roundcube, roundcube-mysql, roundcube-pgsql и roundcube-sqlite3 это метапакеты. Первый тянет веб-почту целиком. Остальные приносят библиотеки под выбранную базу, не новую версию сервера MariaDB или MySQL. Схему бюллетень не меняет, mysql_upgrade из-за него не запускают.
Сайт на WordPress этот пакет не обновляет. Общее на VPS, где почта и сайт живут рядом, только nginx и PHP. В зависимостях сборки для trixie указан PHP 8.4. Конфиг nginx бюллетень не трогает, nginx -t и restart здесь ни при чём.
Команды IMAP и заголовки исходящего
Две карточки про человека, у которого уже есть ящик. CVE-2026-113386: в параметр _uid действий mail/headers и mail/viewsource можно положить перевод строки и дописать свою команду IMAP (IMAP command injection). CVE-2026-114720 делает то же через параметр _flag действия mail/mark. Без входа в ящик эти два вектора не стартуют. На хосте, где ящики раздают клиентам, свой логин есть у каждого.
Дальше исходящее письмо. CVE-2026-114716: тип картинки из data-адреса попадает в заголовки MIME-части без проверки, и перевод строки из этого типа становится новым заголовком. CVE-2026-114717: тема письма, которое пересылают вложением, берётся как имя вложения как есть. Перевод строки из темы уезжает в заголовки нового сообщения. CVE-2026-114725: поля References, In-Reply-To, Message-ID и From из запроса не чистили, хотя Subject и Organization чистили. CVE-2026-114726: действие Bounce. Отображаемое имя From из уже полученного письма тоже протаскивает перевод строки в то, что уходит наружу.
Для админа это один сюжет. Пользователь с ящиком или письмо, которое он пересылает, добавляет в исходящее свои заголовки: адресата, ссылки на цепочку, служебные поля. Почта при этом стоит на том же VPS, что и сайт, и лишняя строка уходит вместе с обычной корреспонденцией. Пакет 1.6.20 перестаёт пропускать перевод строки в этих полях.
Письмо, прокси стилей и адрес метаданных
Часть карточек открывается, когда кто-то читает HTML-письмо, логин атакующего не нужен.
CVE-2026-114722: стили письма не запирались внутри тела. Конструкция вроде @layer и селекторы, которые начинаются с ::, применялись ко всему окну Roundcube. Письмо может перекрасить кнопки и подменить то, куда человек нажимает.
CVE-2026-114728 и CVE-2026-114729 про блокировку внешней загрузки. Первая пропускает адрес, если его записали CSS-экранированием, а не обычным url(). Вторая не смотрела атрибут by у SVG-анимации. Картинка или запрос уходят без согласия, наружу светится IP того, кто открыл письмо, и сам факт открытия. Это браузер получателя, не nginx.
CVE-2026-114731 уже про процесс на сервере. CSS-прокси, действие utils/modcss, читал чужой stylesheet в память целиком, без потолка размера и без таймаута чтения. Ссылкой на свой хост можно забить память PHP. В 1.6.20 ответ режут на 5 МБ, читают потоком и ставят таймаут на чтение.
Диапазон у CVE-2026-114730 короче остальных. В карточке названы ветки 1.6.14 до 1.6.20 и 1.7.0 до 1.7.5. Пакет trixie 1.6.18+dfsg-0+deb13u1 внутри. Фильтр is_local_url() не считал локальными префиксы NAT64 64:ff9b::/96 и 64:ff9b:1::/48 и адрес ::/128. Запрос, который Roundcube делает сам, мог попасть на loopback, link-local и адрес метаданных облака. На VPS, где по этому адресу отдают данные инстанса, запрос доходит до облачной метадаты.
Рядом две карточки про картинки. CVE-2026-114723: если ImageMagick не взял файл и Roundcube переключается на GD, проверка свободной памяти раньше была только для Windows. На Linux большая картинка для превью могла съесть память процесса. CVE-2026-114727: в фото контакта принимались SVG и EPS, оба уходили в ImageMagick. Эти форматы тянут внешние ресурсы и зовут делегаты ImageMagick. В 1.6.20 их убрали из типов для такой обработки.
CVE-2026-114724 про сессию. Ключ с префиксом ! ломал разбор сохранённых данных, и хвост сессии читался как сериализованное значение PHP. Это заготовка для подстановки объекта тому, кто уже может писать в хранилище сессий. Форма логина сама по себе этот ключ не выдаёт. CVE-2026-114721 про настройку disabled_actions: сравнивалось имя действия из запроса, старый псевдоним того же действия проходил. После пакета проверка смотрит уже настоящее имя.
Плагины и несколько IMAP-хостов
Четыре карточки живут в плагинах. Нет плагина в списке включённых, сценарий не собирается. Код плагинов в Debian лежит в roundcube-plugins, поэтому обновлять один roundcube-core мало.
CVE-2026-114714: плагин squirrelmail_usercopy и файловый бэкенд. Логин со слэшем попадал в путь импорта, и читались файлы вне каталога squirrelmail_data_dir. CVE-2026-114715: драйвер Modoboa в плагине password брал первую учётку из ответа API, а не ту, чей логин совпал. Смена пароля могла уехать в чужой ящик Modoboa. CVE-2026-114718: текст ошибки драйвера пароля вставлялся в страницу без экранирования. В карточке пример, откуда такой текст берётся: API DirectAdmin. Чужая строка становилась скриптом в интерфейсе Roundcube. CVE-2026-114719: плагин markasjunk. Параметр _uid для пометки спама читался так, что действие проходило без настоящего токена формы.
CVE-2026-114732 про установку с несколькими IMAP-хостами. Вход по адресу-алиасу искал запись identity без привязки к хосту и мог открыть учётку другого IMAP. Один хост, как на обычном почтовом VPS, этот сюжет не собирает.
Debian 12 и команды для trixie
Трекер оставляет bookworm на 1.6.5+dfsg-1+deb12u9 и security-сборке 1.6.5+dfsg-1+deb12u12 со статусом vulnerable по этому набору. DSA-6579-1 публикует исправление только для trixie. Пакет 1.6.20 из Debian 13 на Debian 12 не переносите: PHP и зависимости разъедутся. Пока у bookworm в трекере нет своей исправленной версии, веб-почту лучше не держать открытой в интернет целиком. Ограничение по адресу или уже существующий доступ к панели достаточно, пакет чужого релиза не нужен.
Команды ниже для Debian 13. На bookworm apt привезёт свою ветку 1.6.5, не 1.6.20. Сначала посмотрите, есть ли пакеты вообще. Пустой вывод dpkg -l значит, что веб-почты Roundcube на машине нет и nginx с WordPress этот бюллетень не трогает.
dpkg -l 'roundcube*' apt-cache policy roundcube-core sudo apt update && sudo apt install --only-upgrade roundcube roundcube-core roundcube-plugins sudo systemctl reload php8.4-fpm
Сам метапакет roundcube кода не содержит, интерфейс лежит в roundcube-core. Если apt ругается, что какого-то имени нет среди установленных, оставьте в команде только то, что показал dpkg -l. Юнит php8.4-fpm соответствует PHP 8.4 из зависимостей сборки trixie. Пулов несколько, перечитайте тот, который отдаёт каталог Roundcube, а не соседний пул сайта, если они разные. Иначе OPcache ещё какое-то время кормит старые файлы. После обновления у roundcube-core должна быть строка 1.6.20+dfsg-0+deb13u1. На sid закрытая ревизия другая: 1.6.20+dfsg-1.
Конфиг ради этого бюллетеня не правят. Копию имеет смысл снять только если всё же откроете его руками. Дамп базы, если пользователи Roundcube лежат в MariaDB, берите по тому имени, которое уже прописано у вас, не по догадке.