CVE-2022-29245: SSH.NET Weak Private Key Generation Vulnerability
MODERATECVE-2022-29245 is a MODERATE (CVSS 6.5) weak private key generation vulnerability (CWE-338: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)) affecting SSH.NET libraries in the NuGet ecosystem. The issue involves weak private key generation in ssh.net. Remediation is available by upgrading affected packages to version 2020.0.2.
CVE-2022-29245 at a Glance
Security Impact
CVSS: 6.5
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N).
How to Fix CVE-2022-29245
To remediate this vulnerability, upgrade all affected SSH.NET dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade SSH.NET to 2020.0.2
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for SSH.NET
How to Check if You Are Affected
To determine whether your application is affected by CVE-2022-29245, inspect your project dependencies for SSH.NET:
inspect dependencies for SSH.NET
Analyze the terminal output to locate any version of SSH.NET in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2020.0.2), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-338: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG), where the product uses a pseudo-random number generator (prng) in a security context, but the prng's algorithm is not cryptographically strong. In SSH.NET, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2022-29245 Affected SSH.NET Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
SSH.NET
|
NuGet |
< 2020.0.2
|
2020.0.2
|
References
Frequently Asked Questions
What is CVE-2022-29245?
Which SSH.NET versions are affected?
What version fixes CVE-2022-29245?
Is SSH.NET affected?
What is the CVSS score of CVE-2022-29245?
What CWE is associated with CVE-2022-29245?
How can I check NuGet dependencies for CVE-2022-29245?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-72p8-v4hg-v45p",
"modified" : "2022-06-15T18:57:58Z",
"published" : "2022-06-01T19:50:15Z",
"aliases" : [ "CVE-2022-29245" ],
"summary" : "Weak private key generation in SSH.NET",
"details" : "During an **X25519** key exchange, the client’s private is generated with [**System.Random**](https://docs.microsoft.com/en-us/dotnet/api/system.random):\n\n```cs\nvar rnd = new Random();\n_privateKey = new byte[MontgomeryCurve25519.PrivateKeySizeInBytes];\nrnd.NextBytes(_privateKey);\n```\n\nSource: [KeyExchangeECCurve25519.cs](https://github.com/sshnet/SSH.NET/blob/bc99ada7da3f05f50d9379f2644941d91d5bf05a/src/Renci.SshNet/Security/KeyExchangeECCurve25519.cs#L51) \nSource commit: https://github.com/sshnet/SSH.NET/commit/b58a11c0da55da1f5bad46faad2e9b71b7cb35b3\n\n[**System.Random**](https://docs.microsoft.com/en-us/dotnet/api/system.random) is not a cryptographically secure random number generator, it must therefore not be used for cryptographic purposes.\n\n### Impact\nWhen establishing an SSH connection to a remote host, during the X25519 key exchange, the private key is generated with\na weak random number generator whose seed can be bruteforced. This allows an attacker able to eavesdrop the\ncommunications to decrypt them.\n\n### Workarounds\nTo ensure you're not affected by this vulnerability, you can disable support for `curve25519-sha256` and `curve25519-sha256@libssh.org` key exchange algorithms by invoking the following method before a connection is established:\n```cs\nprivate static void RemoveUnsecureKEX(BaseClient client)\n{\n client.ConnectionInfo.KeyExchangeAlgorithms.Remove(\"curve25519-sha256\");\n client.ConnectionInfo.KeyExchangeAlgorithms.Remove(\"curve25519-sha256@libssh.org\");\n}\n```\n\n### Thanks\n\nThis issue was initially reported by **Siemens AG, Digital Industries**, shortly followed by @yaumn-synacktiv.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "NuGet",
"name" : "SSH.NET"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "2020.0.2"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/sshnet/SSH.NET/security/advisories/GHSA-72p8-v4hg-v45p"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2022-29245"
}, {
"type" : "WEB",
"url" : "https://github.com/sshnet/SSH.NET/commit/03c6d60736b8f7b42e44d6989a53f9b644a091fb"
}, {
"type" : "WEB",
"url" : "https://github.com/sshnet/SSH.NET/commit/f1f273cf349532b9d41c1de51d3b83a9accedc88"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/sshnet/SSH.NET"
}, {
"type" : "WEB",
"url" : "https://github.com/sshnet/SSH.NET/blob/bc99ada7da3f05f50d9379f2644941d91d5bf05a/src/Renci.SshNet/Security/KeyExchangeECCurve25519.cs#L51"
}, {
"type" : "WEB",
"url" : "https://github.com/sshnet/SSH.NET/releases/tag/2020.0.2"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-330", "CWE-338" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2022-06-01T19:50:15Z",
"nvd_published_at" : "2022-05-31T17:15:00Z"
}
}