CVE-2026-46673: Russh CryptoVec Memory Safety Vulnerability
Russh, a Rust-based SSH library used for building secure communication clients and servers, contains a critical memory management flaw in its CryptoVec component—a cryptographic buffer used internally for sensitive data. The vulnerability stems from unsafe buffer operations that don't properly validate size calculations before allocating or locking memory. Depending on the version, local SSH agents or remote attackers could exploit this by sending malformed frame lengths that trigger uncontrolled memory growth, leading to denial of service. The flaw has been fixed in version 0.60.3.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 7.5 HIGH · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses (CWE)
- CWE-770
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-06-10 / 2026-06-17
NVD description (verbatim)
Russh is a Rust SSH client & server library. Prior to version 0.60.3, CryptoVec used unchecked capacity growth, unchecked length arithmetic, and unsafe allocation/locking paths. In current russh releases, local SSH agent peers could still feed attacker-controlled frame lengths into buffer growth before validation. In older russh releases before 0.58.0, remote SSH traffic also reached CryptoVec through transport and compression buffers. This issue has been patched in version 0.60.3.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
CryptoVec, a specialized buffer class in Russh, implements custom memory allocation and locking to handle cryptographic material securely. The vulnerability exists in three interconnected issues: unchecked capacity growth (allowing integer overflows or excessive allocations), unchecked length arithmetic (permitting out-of-bounds operations), and unsafe allocation/locking paths (bypassing safety guarantees). In pre-0.58.0 versions, untrusted SSH transport and compression data fed directly into CryptoVec, exposing the library to remote exploitation. Even in later versions (0.58.0 through 0.60.2), local SSH agent peers can still inject attacker-controlled frame lengths that trigger unsafe buffer expansion before proper validation occurs. This represents a classic use-after-free or heap corruption risk in unsafe Rust code paths.
Business impact
Organizations using Russh in production SSH servers or agents face availability risk. Unauthenticated remote attackers can trigger out-of-memory conditions or memory corruption in pre-0.58.0 deployments, causing service crashes. Even current-version deployments (0.58.0–0.60.2) remain vulnerable to local privilege escalation or denial of service via compromised SSH agents. For any software embedding Russh for secure shell automation, remote access, or cryptographic operations, an unpatched instance becomes a vector for disruption or potential lateral movement in a defense-in-depth scenario.
Affected systems
Russh versions prior to 0.60.3 are affected. The vulnerability's attack surface scales with deployment context: pre-0.58.0 versions accept remote SSH traffic; versions 0.58.0 through 0.60.2 remain vulnerable to local SSH agent manipulation. Any application or service that vendors Russh as a dependency—including custom SSH automation tools, secure gateways, remote access solutions, and cryptographic middleware—should be inventoried and evaluated. Rust-based projects in embedded systems, IoT devices, or cloud infrastructure are particularly common consumers of this library.
Exploitability
The CVSS:3.1 score of 7.5 (HIGH) reflects network accessibility and no authentication requirement for remote variants. Pre-0.58.0 versions are directly exploitable by unauthenticated SSH clients sending crafted frame data. Later versions require local access (SSH agent context), raising the bar but not eliminating risk in multi-tenant or shared-system scenarios. No exploit code is currently public, and the vulnerability is not yet listed on CISA's Known Exploited Vulnerabilities catalog, but the simplicity of triggering memory exhaustion makes weaponization straightforward once proof-of-concept tooling emerges. The flaw does not require user interaction.
Remediation
Immediate action: upgrade Russh to version 0.60.3 or later. This patch hardens CryptoVec's capacity checks, validates length arithmetic before allocation, and removes or guards unsafe code paths. For organizations unable to upgrade immediately, network-level mitigation is limited (SSH traffic is encrypted), but restricting SSH connectivity to trusted sources and monitoring local agent behavior can reduce remote and local attack surface. Legacy applications still on pre-0.58.0 should be prioritized for urgent patching due to remote exploitability.
Patch guidance
Verify your application's Cargo.toml or equivalent dependency manifest for the current Russh version. Update the Russh crate to 0.60.3 or later—this is a security patch with no breaking changes expected. Test in a staging environment first, particularly if you have custom SSH server logic or agent integrations. After deployment, confirm the patched version is running (e.g., query runtime dependency versions or logs). If Russh is vendored indirectly through another library, trace the dependency chain and request that upstream project update; do not assume transitivity will auto-resolve.
Detection guidance
Monitor SSH servers for unexpected memory growth, crashes, or out-of-memory errors, especially surrounding SSH agent connections or transport layer activity. Unpatched systems may show erratic buffer allocation patterns in profilers or core dumps. Network-based detection is challenging due to encryption, but SSH connection logs with abnormal frame sizes or rapid session cycling may warrant investigation. Audit Cargo.lock files and build artifacts to confirm Russh version in production. Correlate any observed availability incidents with SSH activity timelines.
Why prioritize this
This vulnerability warrants urgent attention due to its HIGH severity, network accessibility in older versions, and potential for widespread impact across Rust-based SSH infrastructure. Although not yet exploited in the wild (per KEV status), the simplicity of exploitation and the ubiquity of SSH in cloud, DevOps, and automation contexts make pre-0.58.0 deployments critical risks. Even current-version systems require prompt patching to eliminate local vector exposure.
Risk score, explained
CVSS 7.5 reflects high base severity: network attack vector (AV:N), low complexity (AC:L), no privilege or user interaction required (PR:N, UI:N), but scope unchanged and no confidentiality or integrity impact—only availability (A:H) is compromised. The score accurately captures denial-of-service risk via memory exhaustion; it does not account for potential memory corruption leading to code execution, which may be underscored in certain advanced scenarios. The lack of KEV listing suggests no known active exploitation, reducing temporal pressure slightly but not justifying delay.
Frequently asked questions
Does this vulnerability leak SSH credentials or expose encrypted traffic?
No. The vulnerability targets buffer management and causes denial of service or memory corruption, not cryptographic compromise. SSH encryption remains intact. However, memory corruption in unsafe code paths could theoretically be leveraged for escalation in conjunction with other flaws.
Do I need to update if I'm only using Russh as a client and not hosting an SSH server?
Yes, if your Russh version is below 0.60.3. Client-side memory corruption can still be exploited if connecting to a malicious SSH server or compromised SSH agent. Update for completeness.
What if my application hasn't been updated in years and is stuck on an old Russh version?
If you're on pre-0.58.0, treat this as critical—the remote attack surface is open. Immediately prioritize an upgrade path, even if it requires a rebuild or migration. If version pinning prevents upgrade, isolate the service network-wide until you can patch.
How can I tell what version of Russh I'm running?
Check your Cargo.lock file or run 'cargo tree' to inspect dependencies. At runtime, some applications expose version info in logs or admin interfaces. If unsure, audit your build manifests and contact your software vendor if Russh is embedded indirectly.
This analysis is provided for informational purposes and reflects the vulnerability as described in public advisories as of June 2026. No exploitation details or weaponized proof-of-concept code are included. Organizations should independently verify patch applicability, test in staging environments, and consult vendor documentation before deploying fixes. SEC.co makes no warranty regarding the completeness or accuracy of remediation steps; always follow your vendor's official guidance and your organization's change management procedures. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2025-46638HIGHDell BSAFE SSL-J Resource Exhaustion DoS Vulnerability
- CVE-2026-28299HIGHSolarWinds Web Help Desk Denial-of-Service Vulnerability – CVSS 8.2
- CVE-2026-34077HIGHReact Router XSS in RSC Redirect Handling – Patch Guidance
- CVE-2026-40983HIGHMicrometer gRPC Denial-of-Service Vulnerability
- CVE-2026-40984HIGHMicrometer Denial-of-Service Vulnerability – HTTP Request Handling Flaw
- CVE-2026-41007HIGHSpring HATEOAS Unbounded Cache Denial-of-Service Vulnerability
- CVE-2026-41716HIGHSpring Data Commons Heap Exhaustion Denial-of-Service
- CVE-2026-42570HIGHSvelte Devalue Denial-of-Service via Sparse Array Deserialization