Biblioteka Crypt::DSA dla Perl w wersjach przed 1.21 wielokrotnie używała tego samego nonce podczas generowania podpisów DSA, co umożliwia matematyczne odtworzenie klucza prywatnego. Jest to podatność krytyczna, ponieważ kompromituje klucze podpisujące bez żadnej interakcji użytkownika z atakującym.
▸ Pokaż oryginał (EN)
Crypt::DSA versions before 1.21 for Perl reused the nonce across signatures, leading to private-key recovery. Crypt::DSA::sign caches the per-signature nonce material in the Key object without ever clearing it. The first sign() on a Key object picks a nonce, and every later sign() on that same object reuses it, producing an identical "r". Keys used to sign more than once with an affected version should be considered compromised.
Funkcja Crypt::DSA::sign przechowuje materiał nonce (jednorazowy losowy parametr wymagany przez algorytm DSA) w obiekcie Key bez jego późniejszego czyszczenia. Przy pierwszym wywołaniu sign() na danym obiekcie Key generowany jest nonce, który następnie jest ponownie wykorzystywany przez każde kolejne wywołanie sign() na tym samym obiekcie. Skutkuje to generowaniem podpisów z identyczną wartością 'r', co jest matematycznym warunkiem wystarczającym do odtworzenia klucza prywatnego przez atakującego dysponującego co najmniej dwoma podpisami.
Atakujący, który pozyska dwa lub więcej podpisów DSA wygenerowanych tym samym kluczem przy użyciu podatnej wersji biblioteki, może matematycznie odtworzyć klucz prywatny. Klucze użyte do podpisywania więcej niż jednej wiadomości przy użyciu podatnej wersji należy uznać za skompromitowane.
Należy zaktualizować bibliotekę Crypt::DSA do wersji 1.21 lub nowszej. Wszystkie klucze prywatne DSA, które były używane do podpisywania więcej niż jednej wiadomości z użyciem podatnej wersji, należy uznać za skompromitowane i bezzwłocznie wycofać oraz zastąpić nowymi parami kluczy.
Crypt::DSA dla Perl w wersjach przed 1.21
Podatność została ujawniona 15 czerwca 2026 roku na liście oss-security. Szczegóły techniczne dotyczące braku czyszczenia nonce są dostępne bezpośrednio w kodzie źródłowym wersji 1.20 na metacpan.org (lib/Crypt/DSA.pm, linia 47). Reużycie nonce w DSA jest klasycznym, dobrze udokumentowanym scenariuszem ataku — jego exploitacja wymaga jedynie dostępu do podpisanych danych publicznych.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N