russh
Rust SSH client & server library
Activity
- Latest release
- 4d ago
- Total releases
- 130
- Cadence
- ~8 days
- Last 12 months
- 29
Reach
- Downloads
- 6.1M
- Stars
- 1.9k
Details
- License
- Apache-2.0
- First release
- Mar 13, 2022
| Version | Released | |
|---|---|---|
0.63.3
patch
|
0.63.3
patch
Dependencies (80)
+ 72 more
Changelog
Compare changes
|
|
0.63.2
patch
|
0.63.2
patch
Dependencies (80)
+ 72 more
Changelog
Compare changes
|
|
0.63.1
patch
|
0.63.1
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.63.0
minor
|
0.63.0
minor
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.63.0-beta.1
pre
|
0.63.0-beta.1
pre
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.7
patch
|
0.62.7
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.6
patch
|
0.62.6
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.5
patch
|
0.62.5
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.4
patch
1 CVE
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev |
0.62.4
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.3
patch
4 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.62.3
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.2
patch
4 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.62.2
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.1
patch
4 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.62.1
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.62.0
minor
4 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.62.0
minor
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.61.2
patch
4 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.61.2
patch
Dependencies (81)
+ 73 more
Changelog
Compare changes
|
|
0.61.1
patch
4 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.61.1
patch
Dependencies (82)
+ 74 more
Changelog
Compare changes
|
|
0.61.0
minor
5 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.61.0
minor
Dependencies (82)
+ 74 more
Changelog
Compare changes
|
|
0.60.3
patch
9 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.60.3
patch
Dependencies (84)
+ 76 more
Changelog
Compare changes
|
|
0.60.2
patch
10 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.60.2
patch
Dependencies (84)
+ 76 more
Changelog
Compare changes
|
|
0.60.1
patch
10 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.60.1
patch
Dependencies (75)
+ 67 more
Changelog
Compare changes
|
|
0.60.0
minor
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.60.0
minor
Dependencies (75)
+ 67 more
Changelog
Compare changes
|
|
0.59.0
minor
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.59.0
minor
Dependencies (70)
+ 62 more
Changelog
Compare changes
|
|
0.58.1
patch
yanked
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.58.1
patch
yanked
Dependencies (70)
+ 62 more
Changelog
Compare changes
|
|
0.58.0
minor
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.58.0
minor
Dependencies (70)
+ 62 more
Changelog
Compare changes
|
|
0.57.1
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.57.1
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.57.0
minor
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.57.0
minor
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.56.0
minor
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.56.0
minor
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.55.0
minor
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.55.0
minor
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.54.6
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.6
patch
Dependencies (73)
+ 65 more
Changelog
Compare changes
|
|
0.54.5
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.5
patch
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.54.4
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.4
patch
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.54.3
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.3
patch
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.54.2
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.2
patch
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.54.1
patch
11 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.1
patch
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.54.0
minor
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.54.0
minor
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.53.0
minor
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.53.0
minor
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.53.0-beta.1
pre
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.53.0-beta.1
pre
Dependencies (72)
+ 64 more
Changelog
Compare changes
|
|
0.52.1
patch
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.52.1
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.52.0
minor
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.52.0
minor
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.52.0-beta.1
pre
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.52.0-beta.1
pre
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.51.1
patch
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.51.1
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.51.0
minor
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.51.0
minor
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.51.0-beta.3
pre
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.51.0-beta.3
pre
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.51.0-beta.2
pre
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.51.0-beta.2
pre
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.51.0-beta.1
pre
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.51.0-beta.1
pre
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.50.4
patch
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.50.4
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.50.3
patch
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.50.3
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.50.2
patch
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.50.2
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.50.1
patch
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.50.1
patch
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.50.0
minor
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.50.0
minor
Dependencies (71)
+ 63 more
Changelog
Compare changes
|
|
0.50.0-beta.12
pre
12 CVEs
CVE-2026-68930
GHSA-m65r-rprj-r5rg
Aug 03, 2026
Russh: Channel-scoped server callbacks can be reached without an open channel
6.5
/ 10
Medium
Network
Low
Low
None
Unchanged
None
High
None
There is a server-side channel state issue in After a client is authenticated, This is not an authentication bypass. A valid login is required. The issue is that the SSH channel lifecycle is not enforced before channel-scoped callbacks are delivered to the application. ImpactAn authenticated client can bypass the server application's channel-open policy. A server may deny session channels by returning That assumption does not hold in the vulnerable path. A malicious authenticated peer can send channel-scoped messages for arbitrary recipient channel IDs and cause handler callbacks to run even though no channel exists. The exact impact depends on the downstream application. For many SSH server use cases, Why this is not intended behaviorSSH channel requests are not global post-authentication requests. They are operations on an existing channel. RFC 4254 describes channel-specific messages as carrying a recipient channel number. The The relevant boundary is therefore not password authentication. The boundary is the channel-open decision. If no channel has been opened, or if the application denied the open request, This is also not just a handler bug. The handler does not own the transport channel table. Documentation and API boundaryThe public API documentation supports this boundary.
Those are different responsibilities. The application can decide whether a command is allowed. The library must first decide whether the recipient channel exists and was actually opened. Delivering Root causeIn The problematic pattern is visible in the For example, the
If The same issue applies to other channel-scoped callbacks such as There is a second related problem in The authoritative source for whether a channel is established should be Evidence from the PoCThe PoC uses a real POC Code :
The crafted packet form is:
The PoC runs normal controls and exploit cases in one execution. Allowed controlThis proves the protected action works normally when a session channel is opened.
Denied controlThis proves the application policy denies session channels and a normal client cannot reach the protected action.
Main exploit: no channel openThis is the main issue. The authenticated client does not send
This removes the "guessed channel ID" concern. Every scanned recipient ID reached the protected action in the vulnerable run. Additional variant: denied openThe client asks for a session channel, the handler denies it, and the client then sends the same crafted requests.
The denied-open variant is not required for exploitability, but it shows the same state validation gap after an explicit application denial. Affected code pathVerified at:
The affected logic is in:
The vulnerable area is:
Channel request dispatch decodes a recipient channel ID and calls request-specific handler callbacks without first requiring that the recipient ID exists as a confirmed channel in The affected request callbacks include:
The same missing established-channel guard affects:
A related issue exists in:
Application channel references should not be retained for denied opens. Why this belongs in russhThe application cannot reliably enforce the SSH transport channel lifecycle from inside individual callbacks. By the time This is the same kind of invariant The safe expectation is simple:
Suggested fixBefore dispatching any channel-scoped callback, require the recipient The authoritative check should use A minimal approach is to add a helper like:
Then call it before dispatching channel-scoped callbacks for:
For unknown or unconfirmed channels, The channel-open path should also retain application-side channel references only when the open is approved:
Regression coverageA regression test should authenticate normally, then verify that callbacks are not reached in these cases:
The test should fail if any channel-scoped callback such as A positive control should confirm that a normally opened session channel still reaches the expected callbacks. In the local validation, the targeted regression passed after the patch:
The full workspace also passed:
Duplicate checkI checked existing
Existing advisories cover unrelated authentication, parser, allocation, window-adjust, Terrapin, and cryptographic issues. I did not find an existing advisory or issue for channel-scoped callbacks being dispatched for unopened or denied recipient channel IDs. Fixed in
0.62.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73429
GHSA-g9hv-x236-4qp3
Jul 24, 2026
Russh: client wrong-length X25519 `clone_from_slice` panic (pre-auth DoS)
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryA malicious SSH server can crash a DetailsEvery other kex path in
Only the client-side curve25519 Incriminated source code (repo-relative paths):
PoCA standalone, self-contained Cargo PoC is provided in
Build & run:
Expected output (verdict line, from a successful reproduction):
The malicious payload is the
The length prefix of ImpactWhat kind of vulnerability: CWE-704 (incorrect type conversion / cast —
Who is impacted: any deployment that uses Workaround: until a fix is released, clients can reduce exposure by
disabling Suggested fix (one-line length check, mirrors the existing server-side
This makes the client-side Fixed in
0.62.4
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-73489
GHSA-cqjc-rmpq-xprq
Jul 24, 2026
Russh: Post-auth remote panic via pty-req with more than 130 terminal-mode records
4.3
/ 10
Medium
Network
Low
Low
None
Unchanged
None
None
Low
SummaryA post-authentication denial-of-service panic in This is reachable with the default server configuration and the default
crypto config (curve25519-sha256 + chacha20-poly1305), requiring only an
authenticated session channel — no caller-supplied parameter. It is reproduced
end-to-end against the unmodified real russh 0.62.2 library (a real
Rust bounds-checked panics abort the task safely (no memory corruption / RCE); the impact is remote denial of service. Details
Each terminal-mode record is exactly 5 bytes (1-byte opcode + 4-byte value),
and
writes every record with no count cap, so 131 records reach the server as a legitimate authenticated channel request. PoCThe PoC is a standalone One-line reproducer
|
0.50.0-beta.12
pre
Dependencies (71)
+ 63 more
Changelog
Compare changes
|