Podatność w bibliotece Golang Crypto powoduje, że in-memory keyring zwracany przez NewKeyring() akceptował klucze z ograniczeniem ConfirmBeforeUse, lecz nigdy go nie egzekwował. Klucze podpisywały dane bez jakiegokolwiek monitu potwierdzającego, a wywołujący kod nie otrzymywał żadnej informacji o tym, że ograniczenie nie jest w rzeczywistości stosowane.
▸ Pokaż oryginał (EN)
The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.
Funkcja NewKeyring() tworzy in-memory keyring, który powinien wymuszać ograniczenie ConfirmBeforeUse — wymagające jawnego potwierdzenia przed użyciem klucza do podpisywania. W podatnej wersji ograniczenie to było cicho ignorowane: keyring przyjmował klucze z tym ograniczeniem bez zgłaszania błędu, a następnie wykonywał operacje podpisywania bez żadnego monitu. Wywołujący kod nie miał możliwości wykrycia tego braku egzekucji, ponieważ nie był zwracany żaden błąd ani ostrzeżenie. Po zastosowaniu poprawki NewKeyring() zwraca błąd, gdy przekazywane są nieobsługiwane ograniczenia.
Atakujący lub złośliwy kod mogący uzyskać dostęp do keyringa może skłonić go do podpisywania danych lub operacji bez wymaganego potwierdzenia użytkownika, omijając kontrolę dostępu przewidzianą przez ograniczenie ConfirmBeforeUse. Może to prowadzić do nieautoryzowanego użycia kluczy kryptograficznych oraz naruszenia integralności i poufności chronionych zasobów.
Należy zastosować patche dostępne u producenta zgodnie z referencjami (m.in. https://go.dev/cl/778640 i https://go.dev/cl/778641). Zaleca się aktualizację biblioteki golang.org/x/crypto do wersji zawierającej poprawkę opisaną w GO-2026-5005.
Biblioteka Golang Crypto — wersje wskazane w referencjach producenta (golang.org/x/crypto); podatność dotyczy aplikacji korzystających z NewKeyring() z ograniczeniem ConfirmBeforeUse.
Podatność jest klasyfikowana jako CWE-862 (Missing Authorization). Szczegóły techniczne oraz poprawki dostępne są w systemie śledzenia błędów Go pod numerem issue #79436 oraz ogłoszeniu w grupie golang-announce.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NGolang Crypto
APPGolang< 0.52.0
Powiązane podatności
Golang Crypto: pominięcie ograniczeń przy przekazywaniu kluczy do zdalnego agenta SSH
Integer overflow w Golang Crypto SSH — nieskończona pętla przy zapisie >4GB
Brak weryfikacji flagi User Presence w FIDO/U2F w Golang Crypto
Golang Crypto: resource leak przez niezamawiane odpowiedzi SSH global request
Nieprawidłowa weryfikacja unieważnionych kluczy CA w Golang Crypto