ssh: validate ECDSA curve matches expected algorithm Previously, parseECDSA determined the curve purely based on the key blob content, ignoring the algorithm identifier passed to parsePubKey. This allowed a mismatch where a key could be encoded with an algorithm type of "ecdsa-sha2-nistp256" but contain a NIST P-384 or P-521 curve. The parser would succeed, returning a key with a type different from the one indicated by the caller/wire format. This change updates parseECDSA to accept the expected algorithm type and verify that it matches the curve specified in the key data. This matches the behavior of OpenSSH's ssh_ecdsa_deserialize_public in ssh-ecdsa.c, which rejects a curve identifier that does not correspond to the key algorithm name. This issue was found during a security audit by NCC Group Cryptography Services, sponsored by Teleport, and was assessed and is being fixed as a non-security bug. Change-Id: I9c748be948cca65e2f41089bb7510466d3bb316a Reviewed-on: https://go-review.googlesource.com/c/crypto/+/782425 LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Junyang Shao <shaojunyang@google.com> Reviewed-by: Filippo Valsorda <filippo@golang.org>
This repository holds supplementary Go cryptography packages.
This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.
The git repository is https://go.googlesource.com/crypto.
The main issue tracker for the crypto repository is located at https://go.dev/issues. Prefix your issue with “x/crypto:” in the subject line, so it is easy to find.
Note that contributions to the cryptography package receive additional scrutiny due to their sensitive nature. Patches may take longer than normal to receive feedback.