Разработчики PuTTY выпустили обновление, исправляющее криптографическую уязвимость CVE-2024-31497, затрагивающую версии с 0.68 по 0.80. Сообщается, что проблему можно использовать для полного восстановления приватных ключей NIST P-521 (ecdsa-sha2-nistp521).
Уязвимость была обнаружена специалистами из Рурского университета в Бохуме и связана с тем, как PuTTY генерирует ECDSA nonce (временные уникальные криптографические числа) для эллиптической кривой NIST P-521, используемой для SSH-аутентификации. Ошибка возникает в силу того, что PuTYY использует детерминированный способ генерации таких чисел, чтобы компенсировать отсутствие надежного криптографического генератора случайных чисел в определенных версиях Windows.
Исследователи объясняют, что цифровая подпись создается с помощью приватного ключа пользователя и проверяется с помощью соответствующего публичного ключа на сервере, обеспечивая идентификацию и безопасность коммуникаций.
Злоумышленникам потребуется изучить порядка 58 подписей для вычисления приватного ключа жертвы. Атакующие могут получить подписи либо путем их сбора с SSH-сервера, который они контролируют или взломали, либо извлечь их из подписанных коммитов Git.
По словам экспертов, сбор подписей из публичных коммитов может оказаться гораздо более эффективен и опасен. Так, обычно для подписания коммитов локально используется Pageant, SSH-агент PuTTY, а затем осуществляется пересылка на хост разработчики. Git настраивается на использование OpenSSH для подписания Git-коммитов с помощью SSH-ключа, предоставленного Pageant. То есть подпись генерируется Pageant, что делает ее пригодной для восстановления приватного ключа. А Git-подписи могут быть общедоступны, например, если коммит присутствует в публичном репозитории на GitHub.
«Все клиентские ключи NIST P-521, используемые с PuTTY, должны считаться скомпрометированными, учитывая, что атака может быть осуществлена даже после того, как основная проблема исправлена в исходном коде (при условии, что перед исправлением злоумышленнику были доступны около 60 подписей), — предупредили исследователи. — Злоумышленник, обладающий несколькими десятками подписей и публичным ключом, имеет достаточно информации, чтобы восстановить приватный ключ, а затем подделать подписи, будто они исходят от вас. Это позволит ему, например, войти на любые серверы, для которых вы используете этот ключ. Чтобы получить подписи, злоумышленнику достаточно ненадолго скомпрометировать любой сервер, для аутентификации на котором вы используете ключ, или на короткое время получить доступ к копии Pageant, хранящей ключ».
Разработчики устранили уязвимость в PuTTY 0.81, где перешли на RFC 6979 для всех ключей DSA и ECDSA. Подчеркивается, что все приватные ключи P-521, сгенерированные с помощью уязвимой версии PuTTY, следует считать небезопасными и их нужно как можно скорее заменить на новые.
Известно, что уязвимую версию PuTTY, используют следующие продукты:
- FileZilla 3.24.1–3.66.5 (исправлено в версии 3.67.0);
- WinSCP 5.9.5–6.3.2 (исправлено в 6.3.3);
- TortoiseGit 2.4.0.2–2.15.0 (исправлено в 2.15.0.1);
- TortoiseSVN 1.10.0–1.14.6 (исправление возможно при настройке TortoiseSVN на использование Plink в последней версии PuTTY 0.81).
Вероятно, софта, уязвимого перед CVE-2024-31497, может оказаться даже больше (всё зависит от того, какая версия PuTTY используется), поэтому пользователям рекомендуется проверить свои инструменты и при необходимости принять превентивные меры.