PostgreSQL JDBC 42.7.12 закрывает уязвимость, понижающую защиту канального связывания

PostgreSQL

Разработчики PostgreSQL выпустили обновление JDBC-драйвера версии 42.7.12. Релиз устраняет уязвимость CVE-2026-54291, которая позволяет атакующему обойти политику безопасности при использовании канального связывания (channel binding) для SCRAM-аутентификации. Ошибка затрагивает версии с 42.7.4 по 42.7.11 включительно.

Уязвимость CVE-2026-54291

Проблема возникает в ситуации, когда клиент явно требует канальное связывание через параметр "channelBinding=require". В этом случае соединение должно использовать улучшенный механизм SCRAM-SHA-256-PLUS, который дополнительно привязывает аутентификацию к сертификату TLS. Однако из-за дефекта драйвер может молча понизить уровень защиты до обычного SCRAM-SHA-256, полностью лишив соединение защиты от атак "человек посередине".

Атакующий, контролирующий TLS-соединение, может спровоцировать понижение, предъявив сертификат с алгоритмом подписи, для которого не существует хеша канального связывания "tls-server-end-point". К таким алгоритмам относятся Ed25519, Ed448 и некоторые постквантовые схемы. В обычных условиях сертификат без совместимого хеша должен приводить к ошибке, но этого не происходит.

Дефект состоит из двух независимых проблем, которые вместе дают возможность атаки. Встроенная в pgJDBC библиотека "com.ongres.scram:scram-client" версий 3.1 и 3.2 при попытке вычислить хеш связывания для неподдерживаемого сертификата возвращает пустой массив байтов вместо того, чтобы завершиться с ошибкой. Параллельно с этим код "ScramAuthenticator" в pgJDBC не проверяет, что канальное связывание действительно установлено. Он убеждается лишь в том, что сервер анонсировал механизм "-PLUS", но не отвергает пустое значение связывания и не контролирует, какой именно механизм согласован на финальном этапе.

В результате политика "channelBinding=require" молча обходится, а защита от подмены трафика пропадает. В бюллетене безопасности PostgreSQL подчёркивается, что уязвимость проявляется только при явном включении "channelBinding=require". При политиках "prefer", "allow" или "disable" понижение до обычного SCRAM является ожидаемым поведением, поэтому они не считаются уязвимыми.

Версии драйвера до 42.7.4 не подвержены ошибке, поскольку канальное связывание в них вообще не поддерживалось. Таким образом, область поражения ограничена релизами с 42.7.4 по 42.7.11, где эта функция появилась, но была реализована некорректно.

Разработчики рекомендуют всем пользователям, применяющим "channelBinding=require", как можно скорее обновить драйвер до версии 42.7.12. Временной мерой защиты может служить отказ от сертификатов с алгоритмами Ed25519, Ed448 и постквантовых схем, либо проверка совместимости вручную. Однако полное исправление в драйвере устраняет корень проблемы на уровне кода.

Этот случай показывает, как даже узкоспециализированная библиотека может стать источником серьёзной уязвимости, если две независимые ошибки совпадают по времени. Внедрение постквантовых алгоритмов подписи усложняет поддержку канального связывания, и разработчикам предстоит тщательнее тестировать совместимость новых криптографических примитивов с существующими протоколами. Пользователям PostgreSQL стоит регулярно обновлять драйвер и проверять настройки аутентификации, особенно если среда требует высокого уровня защиты от перехвата.

Ссылки

Комментарии: 0