В PuTTY, популярния SSH клиент за Windows, е открита опасна уязвимост (CVE-2024-31497), която позволява възстановяването на потребителския секретен ключ, генериран с алгоритъма ECDSA с елиптична крива NIST P-521 (ecdsa-sha2-nistp521). За да се подбере секретния ключ, е достатъчно да се анализират около 60 цифрови подписи, създадени с проблема ключ.
Уязвимостта се проявява от версия PuTTY 0.68 и засегна и продукти, включващи уязвими версии на PuTTY, като FileZilla (3.24.1 — 3.66.5), WinSCP (5.9.5 — 6.3.2), TortoiseGit (2.4.0.2 — 2.15.0) и TortoiseSVN (1.10.0 — 1.14.6). Проблемът е отстранен в актуализациите на PuTTY 0.81, FileZilla 3.67.0, WinSCP 6.3.3 и TortoiseGit 2.15.0.1. След инсталирането на актуализацията се препоръчва на потребителите да генерират нови ключове и да изтриват старите публични ключове от файловете authorized_keys.
Уязвимостта е причинена от небрежността на разработчиците, които за генерирането на 521-битовия ключ са използвали вектор за инициализация (nonce) базиран на 512-битова произволна последователност, вероятно считайки че ентропията от 512 бита е достатъчна и останалите 9 бита нямат съществено значение. В резултат на това, в всички секретни ключове, създадени в PuTTY с алгоритъма ecdsa-sha2-nistp521, първите 9 бита от вектора за инициализация винаги приемаха нулеви стойности.
За ECDSA и DSA качеството на генератора на псевдослучайни числа и пълното покритие с произволни данни на параметъра, използван при изчисляването на модула, е от първостепенно значение, тъй като откритие дори на няколко бита с информация за вектора за инициализация е достатъчно за извършването на атака за последователно възстановяване на целия секретен ключ. За успешното възстановяване на ключа е достатъчно наличието на публичен ключ и анализ на няколко десетки цифрови подписа, генерирани с помощта на проблемния ключ за известни на атакуващия данни. Атаката се свежда до решаването на задачата HNP (Hidden Number Problem).
Необходими цифрови подписи могат да се получат, например, при свързване на потребителя с SSH сървъра на нападателя или с Git сървъра, използващ SSH като транспорт. Необходимите за атаката подписи също могат да се узнаят, ако ключът е бил използван за удостоверяване на произволни данни, например git комитове, при прилагане на SSH агента Pageant за пренасочване на трафика към хоста на разработчика. Получаването на необходимите данни за възстановяване на ключа по време на MITM атака е невъзможно, тъй като подписите в SSH не се предават в открит вид.
Отбелязва се, че подобно използване на непълни вектори за инициализация е било прилагано в PuTTY и при други видове елиптични криви, но за алгоритми, различни от ECDSA P-521, възникналите изтичания на информация не са достатъчни за реализиране на работеща атака за възстановяване на ключа. Ключовете ECDSA с различен размер и ключовете Ed25519 не са уязвими на атаката.
Източник: opennet.ru
