The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a "no-touch-required" extension in Permissions.Extensions from PublicKeyCallback.
FIDO/U2F security keys (types sk-ecdsa-sha2-nistp256@openssh.com and sk-ssh-ed25519@openssh.com) according to the standard require physical touch of the device by the user — this fact is encoded in the User Presence flag in the signature structure. The Verify() method in the golang.org/x/crypto library did not verify this flag, accepting signatures generated without confirmation of physical presence. As a result, an attacker with access to the private key or an unattended device could authenticate without physically touching the token. The vendor recommends restoring previous behavior by returning the "no-touch-required" extension in the Permissions.Extensions field from the PublicKeyCallback function.
An attacker can perform unauthorized SSH authentication using a FIDO/U2F key without physical interaction with the hardware token, resulting in unauthorized system access and potential compromise of data confidentiality and integrity.
Apply patches available from the vendor according to references (https://go.dev/cl/781662, https://pkg.go.dev/vuln/GO-2026-5019). Additionally, to maintain required user physical presence verification, configure PublicKeyCallback to return the "no-touch-required" extension in the Permissions.Extensions field only for clients explicitly permitted to use the key without touch.
The golang.org/x/crypto library (Golang Crypto) — versions indicated in vendor references; affects implementations supporting key types sk-ecdsa-sha2-nistp256@openssh.com and sk-ssh-ed25519@openssh.com
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NGolang Crypto
APPGolang< 0.52.0
Related vulnerabilities
Golang Crypto: brak wymuszenia ograniczenia ConfirmBeforeUse w NewKeyring()
Integer overflow w Golang Crypto SSH — nieskończona pętla przy zapisie >4GB
Golang Crypto: pominięcie ograniczeń przy przekazywaniu kluczy do zdalnego agenta SSH
Golang Crypto: resource leak przez niezamawiane odpowiedzi SSH global request
Nieprawidłowa weryfikacja unieważnionych kluczy CA w Golang Crypto