Обновите Erlang на Debian 13: можно уронить сервис или выдать себя за TLS-сервер

23 октября 2026 года Aron Xu отправил в рассылку debian-security-announce бюллетень DSA-6580-1. Письмо ушло в 04:08 UTC. Пакет один: erlang. Для стабильного Debian 13 (trixie) дыры закрыты в версии 1:27.3.4.1+dfsg-1+deb13u4.

По тексту бюллетеня набор может уронить сервис, заставить разобрать один HTTP-запрос двумя разными способами (HTTP request smuggling) или пройти мимо ограничений доступа. Отдельно названа подмена TLS-сервера: клиент считает, что говорит с нужным узлом, а отвечает чужой.

В списке компонентов HTTP-клиент и HTTP-сервер, SSH, TLS, разбор ASN.1, сетевой драйвер, URI, LDAP и SNMP. Апдейт жёстче проверяет протокол и теснее ограничивает ресурсы HTTP и SSH. Приложение, которое раньше прощало кривой ввод, после пакета может начать его отвергать. Бюллетень прямо просит такие программы поправить.

Клиент TLS 1.3 и CVE-2026-89422

Для узла, который сам ходит наружу по TLS, главная карточка этого набора: CVE-2026-89422. Клиент TLS 1.3 в приложении ssl заканчивает рукопожатие и не проверяет сертификат сервера, если в ServerHello приехало расширение pre_shared_key, которого клиент не предлагал.

Дальше ssl:connect возвращает успешный сокет. У отвечающей стороны может не быть ни сертификата, ни закрытого ключа, ни старой сессии. Проверка цепочки, имя хоста, свой verify_fun, частичная цепочка, CRL и OCSP в этот заход не выполняются. Клиент решает, что сессия возобновляется, и перешагивает состояния, где сертификат вообще смотрят.

Касается обычной настройки клиента. Если оставили только TLS 1.2, эта карточка мимо. В трекере Debian исправление для trixie записано как 1:27.3.4.1+dfsg-1+deb13u4, для sid и forky как 1:29.1.1+dfsg-1. У разработчиков OTP дыру закрыли в 27.3.4.18, 28.5.0.7 и 29.1.1. В имени пакета Debian 13 этого хвоста нет. Смотреть надо ревизию deb13u4, а не строку 27.3.4.1: она была и у уязвимой сборки.

OBJECT IDENTIFIER в ASN.1, CVE-2026-65634

CVE-2026-65634 срабатывает раньше, чем дело доходит до доверия сертификату. Удалённый без логина во время рукопожатия TLS присылает специально собранный OBJECT IDENTIFIER. Декодер ASN.1 копит число сдвигом на 7 бит на каждый байт продолжения. Чем длиннее одна дуга, тем тяжелее счёт, и рост квадратичный. Подпись и цепочку ещё не проверяли, а процессор уже занят.

В описании на трекере один такой идентификатор примерно на 262 КБ съедает около 13 секунд CPU на обычном железе. Повтор с нескольких соединений сажает узел. Клиент TLS разбирает сертификат сервера всегда. Сервер, который проверяет сертификат клиента, разбирает и его. Оба варианта открыты, пока стоит старый пакет. Декодер попадает в разбор X.509 через public_key:pkix_decode_cert/2, в том числе в модуль OTP-PUB-KEY.

Остальные шестнадцать карточек набора

Две карточки выше не закрывают бюллетень целиком. Ниже остальные номера из трекера пакета erlang, которые входят в DSA-6580-1. Обновление одно: пакет erlang.

  • CVE-2026-55951. Клиент httpc не держал предел на суммарный объём того, что читает.
  • CVE-2026-59696, CVE-2026-70405 и CVE-2026-70409. Заявленный размер во входных данных проверяется неверно.
  • CVE-2026-66357. Сервер httpd не реализовывал свёртку заголовков obs-fold из старых RFC.
  • CVE-2026-66835. Путь в httpd можно подать так, что сервер примет его за другой. Отправитель удалённый.
  • CVE-2026-68956 и CVE-2026-70399. Ресурсы выделяются без предела. В бюллетене это рядом с более тесными лимитами HTTP и SSH.
  • CVE-2026-69664 и CVE-2026-71380. Ресурс после работы не отпускается, сервис можно загрузить до отказа.
  • CVE-2026-73270. В inets ломается учёт регистра символов.
  • CVE-2026-73276. Код мягкого завершения пропускал случаи, которые надо было отвергнуть.
  • CVE-2026-73812. После исправления check_header/3 в httpd отвергает повторный Content-Length.
  • CVE-2026-74835. httpd не применяет уже заданное ограничение.
  • CVE-2026-74994. Карточка про модуль mod_auth сервера httpd при определённой настройке.
  • CVE-2026-75538. Достаточно подключения к открытому TCP-порту Erlang, где работает inets.

Разбор URI, LDAP и SNMP бюллетень ставит в тот же ряд, что сетевой драйвер. Если эти куски слушают сеть, их закрывает тот же deb13u4. Отдельной сборки под один протокол у этого бюллетеня нет.

trixie получил deb13u4, bookworm в этом DSA нет

В таблице трекера обычный trixie сейчас на 1:27.3.4.1+dfsg-1+deb13u3. Для всех 18 карточек DSA-6580-1 эта сборка ещё vulnerable. Исправленная лежит в кармане trixie-security: 1:27.3.4.1+dfsg-1+deb13u4. Кто обновлялся раньше и остановился на deb13u3, для этого набора всё ещё на старой ревизии.

Debian 12 (bookworm) в той же таблице на 1:25.2.3+dfsg-1+deb12u4. Карман security для bookworm показан как 1:25.2.3+dfsg-1+deb12u1. Обе строки по этим 18 CVE помечены vulnerable. Пакета для bookworm в DSA-6580-1 нет. Сборку deb13u4 на Debian 12 ставить не надо: чужая ветка, зависимости разъедутся, а узел после этого чинить дольше, чем ждать свой бюллетень.

Forky и sid уже на 1:29.1.1+dfsg-1. По этому набору трекер помечает их fixed. Если машина на testing или unstable и версия именно такая, сегодняшний DSA новый пакет не привозит.

Две другие карточки после deb13u4 трекер всё ещё держит открытыми на trixie, bookworm, forky и sid: CVE-2026-105236 (проверка сертификата в ssl) и CVE-2026-94200 (согласованность входных данных). DSA-6580-1 их не закрывает. Сегодняшний пакет нужен из-за восемнадцати номеров, которые в нём исправлены.

Пакеты на VPS и перезапуск beam

nginx, PHP-FPM, MariaDB и WordPress библиотеки Erlang не грузят. Если dpkg не показывает пакетов erlang, сайт на этом стеке бюллетень не задевает. Пакеты появляются, когда на Debian 13 рядом живут RabbitMQ, CouchDB, ejabberd или свой сервис на системном OTP.

Образ Docker с Erlang, сборка через kerl или asdf этим .deb не обновляется. apt меняет только то, что поставлено из репозитория Debian. На Ubuntu номер deb13u4 не приезжает: там свой пакет erlang и свои бюллетени. Репозитории смешивать не надо.

dpkg -l 'erlang*' | awk '/^ii/ {print $2, $3}'
sudo apt update
sudo apt upgrade

Первая команда показывает, стоит ли Erlang вообще и какая ревизия сейчас. apt upgrade поставит все уже ожидающие обновления, не один erlang. Если очередь большая и нужен только этот набор, возьмите имена из первой строки и поставьте их через apt install –only-upgrade. После этого у установленных пакетов erlang в версии должен быть хвост deb13u4.

Если apt update ревизию не показывает, в источниках нет trixie-security, либо зеркало ещё не отдало карман. Обновите список позже. Подключать sid или backports ради этого номера не стоит.

Работающий beam старый код не отпускает. Перезапуск epmd приложение не обновляет: карта портов и код узла это разные процессы. Нужен restart сервиса, который поднял узел. Для RabbitMQ из пакетов Debian это rabbitmq-server. reload здесь не замена, код уже загружен.

Дальше имеет смысл пройти свой HTTP и исходящий TLS. Проверки протокола и лимиты стали строже. То, что вчера принималось, сегодня может оборваться на рукопожатии или на заголовке. Конфиг nginx и пул PHP-FPM перед этим копировать незачем: бюллетень их не меняет.

На Debian 12, пока своего исправления нет, пакет из trixie не ставьте. httpd, SSH и приём TLS на этом Erlang лучше не держать открытыми в интернет. Когда выйдет бюллетень для bookworm, схема та же: пакет из своего релиза, затем restart узла, затем проверка, что клиенты ещё договариваются.

На сайте без Erlang день обычный. Где beam есть и это Debian 13, сегодняшняя ревизия deb13u4 и перезапуск узла. Где Debian 12, свой пакет ещё впереди.

Источники и ссылки


Комментарии загружаются…