Update dependency elliptic to v6.6.1 [SECURITY] #1031
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
6.5.4
->6.6.1
GitHub Vulnerability Alerts
CVE-2024-42459
In the Elliptic package 6.5.6 for Node.js, EDDSA signature malleability occurs because there is a missing signature length check, and thus zero-valued bytes can be removed or appended.
CVE-2024-42461
In the Elliptic package 6.5.6 for Node.js, ECDSA signature malleability occurs because BER-encoded signatures are allowed.
CVE-2024-42460
In the Elliptic package 6.5.6 for Node.js, ECDSA signature malleability occurs because there is a missing check for whether the leading bit of r and s is zero.
CVE-2024-48949
The Elliptic package 6.5.5 for Node.js for EDDSA implementation does not perform the required check if the signature proof(s) is within the bounds of the order n of the base point of the elliptic curve, leading to signature malleability. Namely, the
verify
function inlib/elliptic/eddsa/index.js
omitssig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()
validation.This vulnerability could have a security-relevant impact if an application relies on the uniqueness of a signature.
CVE-2024-48948
The Elliptic prior to 6.6.0 for Node.js, in its for ECDSA implementation, does not correctly verify valid signatures if the hash contains at least four leading 0 bytes and when the order of the elliptic curve's base point is smaller than the hash, because of an _truncateToN anomaly. This leads to valid signatures being rejected. Legitimate transactions or communications may be incorrectly flagged as invalid.
GHSA-vjh7-7g9h-fjfh
Summary
Private key can be extracted from ECDSA signature upon signing a malformed input (e.g. a string or a number), which could e.g. come from JSON network input
Note that
elliptic
by design accepts hex strings as one of the possible input typesDetails
In this code: https://github.com/indutny/elliptic/blob/3e46a48fdd2ef2f89593e5e058d85530578c9761/lib/elliptic/ec/index.js#L100-L107
msg
is a BN instance after conversion, butnonce
is an array, and different BN instances could generate equivalent arrays after conversion.Meaning that a same
nonce
could be generated for different messages used in signing process, leading tok
reuse, leading to private key extraction from a pair of signaturesSuch a message can be constructed for any already known message/signature pair, meaning that the attack needs only a single malicious message being signed for a full key extraction
While signing unverified attacker-controlled messages would be problematic itself (and exploitation of this needs such a scenario), signing a single message still should not leak the private key
Also, message validation could have the same bug (out of scope for this report, but could be possible in some situations), which makes this attack more likely when used in a chain
PoC
k
reuse exampleFull attack
This doesn't include code for generation/recovery on a purpose (bit it's rather trivial)
Output:
Similar for
ed25519
, but due to lown
, the key might not match precisely but is nevertheless equivalent for signing:restored
is equal toorig
modN
.Impact
Full private key extraction when signing a single malicious message (that passes
JSON.stringify
/JSON.parse
)Release Notes
indutny/elliptic (elliptic)
v6.6.1
Compare Source
v6.6.0
Compare Source
v6.5.7
Compare Source
v6.5.6
Compare Source
v6.5.5
Compare Source
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.