Podatność w bibliotece Golang Crypto powoduje, że rozszerzenia ograniczeń kluczy (np. restrict-destination-v00@openssh.com) nie były serializowane podczas dodawania klucza do zdalnego agenta SSH. W efekcie ograniczenia dotyczące miejsca docelowego były po cichu usuwane przy przekazywaniu kluczy, co umożliwiało nieograniczone użycie klucza na zdalnym hoście.
▸ Pokaż oryginał (EN)
When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.
Gdy klucz był dodawany do zdalnego agenta SSH z rozszerzeniami ograniczeń (constraint extensions), biblioteka nie uwzględniała tych rozszerzeń w serializowanym żądaniu. Skutkowało to cichym pominięciem ograniczeń (ang. silently stripped) podczas operacji przekazywania (forwarding) klucza. Zdalny agent traktował przekazany klucz jako nieograniczony, ignorując intencje klienta dotyczące kontroli dostępu. Podatność wynika z nieprawidłowej obsługi deserializacji i serializacji rozszerzeń ograniczeń (CWE-502).
Atakujący lub nieuprawniony proces mający dostęp do zdalnego agenta SSH może używać przekazanego klucza bez żadnych ograniczeń co do miejsca docelowego, naruszając zasady kontroli dostępu i umożliwiając nieuprawnione uwierzytelnianie oraz potencjalną modyfikację zasobów na zdalnych hostach.
Należy zastosować patche dostępne u producenta zgodnie z referencjami (https://go.dev/cl/778642, https://pkg.go.dev/vuln/GO-2026-5006). Po aktualizacji biblioteka poprawnie serializuje wszystkie rozszerzenia ograniczeń, a in-memory keyring zwracany przez NewKeyring() odrzuca klucze z nieobsługiwanymi rozszerzeniami zamiast je cicho ignorować.
Biblioteka Golang Crypto (golang.org/x/crypto) — wersje wskazane w referencjach producenta; dotyczy aplikacji korzystających z przekazywania kluczy do zdalnych agentów SSH oraz funkcji NewKeyring().
Zgłoszenie błędu zarejestrowane pod numerem go.dev/issue/79435. Podatność ujawniona poprzez listę 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: brak wymuszenia ograniczenia ConfirmBeforeUse w NewKeyring()
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