Уязвимость в strongSwan IPsec, приводящая к удалённому выполнению кода

В strongSwan, VPN-пакете на базе протокола IPSec, применяемом в Linux, Android, FreeBSD и macOS, выявлена уязвимость (CVE-2023-41913), которую можно использовать для удалённого выполнения кода злоумышленника. Уязвимость вызвана ошибкой в процессе charon-tkm с реализацией протокола обмена ключами (IKE) на базе TKMv2 (Trusted Key Manager), приводящей к переполнению буфера при обработке специально оформленных значений схемы DH (Diffie–Hellman). Уязвимость проявляется только в системах, использующих charon-tkm и в выпусках strongSwan, начиная с 5.3.0. Проблема устранена в обновлении strongSwan 5.9.12. Для исправления уязвимости в ветках, начиная с 5.3.x, также подготовлены патчи.

Ошибка вызвана отсутствием проверки размера публичных значений Diffie-Hellman перед их копированием в буфер фиксированного размера в стеке. Переполнение может быть инициировано через отправку специального оформленного сообщения IKE_SA_INIT, обрабатываемого без аутентификации. В старых версиях strongSwan проверка размера осуществлялась в обработчике KE payload (Key Exchange), но в версии 5.3.0 были добавлены изменения, переносящие проверку публичных значений на сторону обработчика протокола DH (Diffie-Hellman) и добавляющие типовые функции для упрощения проверки корректности известных групп DH. По недосмотру, новые функции проверки забыли добавить в процесс charon-tkm, работающий как прокси между процессом IKE и TKM (Trusted Key Manager), в результате чего в
функции memcpy() оказались непроверенные значения, позволяющие записать в 512-байтовый буфер до 10000 байтов данных.

Release. Ссылка here.