← Ко всем гайдам

Когда в новостях дыра

OpenSSL CVE-2026-45447: кого это реально касается

Критичная дыра в OpenSSL — но она не в TLS-хендшейке обычного сайта, а в проверке PKCS#7/S-MIME-подписей. Ниже — чем это отличается, какие версии закрыты и почему снаружи почти никогда нельзя сказать «подтверждено».

27 октября 2026

Что случилось простыми словами

В июньском наборе исправлений OpenSSL 2026 года закрыли уязвимость CVE-2026-45447 — heap use-after-free в функции `PKCS7_verify()`. Её нашли при участии исследователя и ИИ (Claude, Anthropic); публичный PoC уже есть.

Суть: когда программа проверяет специально собранную PKCS#7-подпись (поле `digestAlgorithms` сделано пустым множеством), OpenSSL освобождает буфер, которым ещё пользуется вызывающий код. Итог — падение процесса, а в худшем случае выполнение чужого кода.

Важно: это не ошибка в установлении TLS-соединения. Уязвим путь проверки подписей PKCS#7 / S-MIME, а не то, как браузер открывает ваш HTTPS-сайт.

Серьёзность высокая: разные трекеры дают CVSS примерно 8.1–8.8, отдельные источники — до 9.8. Официальную оценку сверяйте в самом advisory OpenSSL.

Главное отличие от «дыры в сайте»

Обычный сайт, который просто отдаёт страницы по HTTPS, функцию `PKCS7_verify()` на данных злоумышленника не вызывает. Поэтому «у меня сайт на OpenSSL» само по себе ещё не значит «меня можно пробить этой CVE снаружи».

Уязвимость срабатывает там, где приложение проверяет подпись из недоверенного источника:

  • почтовые системы и шлюзы с проверкой S/MIME
  • проверка подписанных документов, пакетов, обновлений или токенов через OpenSSL
  • часть SSO / федеративных сценариев, где входящий объект несёт PKCS#7-подпись
  • самописные сервисы, которые дергают `PKCS7_verify()` на входных данных

Отдельно отметили: приложения, которые используют CMS-API OpenSSL (а не PKCS7-путь), и FIPS-модуль — не затронуты.

Какие версии OpenSSL уже безопасны

Обновите до исправленной сборки в своей ветке:

  • OpenSSL 3.6.x → 3.6.3 или новее
  • OpenSSL 3.5.x → 3.5.7 или новее
  • OpenSSL 3.4.x → 3.4.6 или новее
  • OpenSSL 3.0.x → 3.0.21 или новее
  • OpenSSL 4.0.x → 4.0.1 или новее
  • OpenSSL 1.1.1 и 1.0.2 — open-source-поддержка закончилась; фиксы (1.1.1zh, 1.0.2zq) только в premium support. План — переход на поддерживаемую ветку 3.x.

OpenSSL — библиотека, а не отдельный сервис: её обновляют пакетом дистрибутива или базовым образом, после чего нужно перезапустить всё, что с ней слинковано (веб-сервер, почту, приложения).

Как понять «касается / нет» снаружи

Снаружи про OpenSSL видно немного — и это как раз тот случай, где важно не путать «совпадение» с «подтверждено».

  • Версия OpenSSL не передаётся в TLS-хендшейке — по сертификату её не узнать
  • Иногда версия светится в баннере: Apache с `ServerTokens Full` (`Server: Apache/2.4.x OpenSSL/3.0.x`), приветствия почтовых серверов. nginx по умолчанию её не отдаёт
  • Если версия видна и попадает в уязвимый диапазон — это сигнал разобрать (`probable`), а не доказательство, что именно эту CVE у вас можно эксплуатировать

Безопасной внешней проверки, которая отличит уязвимый `PKCS7_verify()` от исправленного, нет. Поэтому по этой CVE signalfort снаружи честно остаётся на `probable` и показывает, где смотреть на хосте, а не рисует ложное «подтверждено». Подробнее про статусы: как понять, касается ли CVE вас.

Что signalfort делает по вашему периметру: находит хосты, замечает утечку версии в баннере, держит гигиену TLS (срок, цепочка, слабые параметры) и приоритизирует по KEV / EPSS / наличию PoC. Старт — бесплатная проверка.

Что сделать по типам инфраструктуры

Shared-хостинг и managed-сервисы: обновление OpenSSL — на стороне провайдера. Если сомневаетесь, тикет в поддержку со ссылкой на CVE-2026-45447 и вопросом, на какой сборке OpenSSL ваш аккаунт.

Свой VPS / выделенный сервер: обновите пакет (`openssl`, `libssl`) из репозитория дистрибутива, затем перезапустите веб-сервер, почту и приложения; проверьте `openssl version -a`.

Docker: пересоберите образы на свежей базе — старый слой тащит старый OpenSSL; задеплойте контейнеры заново.

Почтовые шлюзы и S/MIME, сервисы проверки подписей: здесь риск выше остального — патч в приоритете, плюс проверьте, из каких источников вообще принимаете подписанные объекты.

Не забудьте stage/preview/старые поддомены — инвентарь и алерт на новое: новые поддомены и shadow IT.

Чего не делать

  • Не считать «у меня nginx / обычный сайт — значит не касается»: OpenSSL слинкован со многими сервисами, а патч нужен пакету в любом случае
  • Не путать `probable` по версии из баннера с «нас можно взломать этой CVE»
  • Не гонять публичный PoC по своим или чужим боевым сервисам
  • Не оставлять 1.1.1 / 1.0.2 на периметре без плана апгрейда, рассчитывая «авось не тронут»

После обновления: короткий контроль

Проверьте, что в системе действительно новая сборка: `openssl version -a`, а для сервисов — что они перезапущены и слинкованы с обновлённой библиотекой (`ldd` на бинарник сервиса).

Отдельно проверьте контейнеры и окружения, которые обновляются реже прода.

Если принимаете PKCS#7 / S-MIME из внешних источников — просмотрите логи соответствующих сервисов на падения и аномалии около дат раскрытия.

signalfort помогает с экспозицией периметра и совпадениями по версии, но не заменяет инвентарь ПО и разбор инцидента на самих серверах.

Частые вопросы

Это уязвимость в HTTPS / TLS моего сайта?

Нет. CVE-2026-45447 — в функции проверки PKCS#7-подписей (`PKCS7_verify`), а не в TLS-хендшейке. Обычный сайт, отдающий страницы по HTTPS, этот путь не вызывает.

У меня nginx — значит, не касается?

nginx тоже слинкован с OpenSSL, но для этой конкретной CVE нужен вызов `PKCS7_verify` на недоверенных данных, чего nginx при отдаче страниц не делает. Обновить пакет OpenSSL всё равно нужно — им пользуются и другие сервисы.

signalfort покажет по этой CVE «подтверждено»?

Нет. Безопасной внешней проверки, отличающей уязвимый PKCS7_verify от исправленного, не существует. Мы ставим `probable`, если версия OpenSSL видна снаружи и попадает в диапазон, и показываем, где проверить на хосте.

Как узнать версию OpenSSL?

На сервере — `openssl version -a` и версия пакета (`libssl`). Снаружи версия видна редко: при Apache `ServerTokens Full` или в приветствии почтового сервера. nginx её по умолчанию не отдаёт.

Насколько это критично именно для нас?

Серьёзность высокая (CVSS ~8.1–8.8, есть PoC), но реальный риск зависит от того, проверяете ли вы PKCS#7 / S-MIME-подписи из недоверенного источника. Патчить нужно в любом случае — оценивать эксплуатируемость по своему использованию.

У меня OpenSSL 1.1.1 / 1.0.2 — что делать?

В open-source эти ветки сняты с поддержки; фиксы есть только в premium support (1.1.1zh, 1.0.2zq). Практичный путь — план перехода на поддерживаемую ветку 3.x, а пока сузить доступ к сервисам, которые проверяют подписи.

Проверить сайт бесплатно