CVE-2026-56855 Overview
CVE-2026-56855 affects the Go golang.org/x/crypto/ssh package. A malicious peer can send crafted messages after channel establishment that deadlock the entire SSH connection. The library previously buffered unhandled channel messages, allowing an attacker to block the connection indefinitely.
The fix explicitly handles all RFC 4254 channel messages and treats unrecognized messages as protocol errors that tear down the connection. This vulnerability affects both SSH client and server implementations built on the Go crypto library.
Critical Impact
Remote attackers who complete an SSH handshake can deadlock connections, causing denial of service in servers and clients that rely on the Go SSH implementation.
Affected Products
- golang.org/x/crypto/ssh package (Go supplementary crypto library)
- Go applications embedding SSH server or client functionality using x/crypto/ssh
- Downstream tools and services built on the Go SSH stack
Discovery Timeline
- 2026-09-02 - CVE-2026-56855 published to NVD
- 2026-09-02 - Last updated in NVD database
Technical Details for CVE-2026-56855
Vulnerability Analysis
The vulnerability is a deadlock condition in the Go SSH library's channel message handling. RFC 4254 defines the SSH connection protocol, including channel and global request semantics. The previous implementation did not comprehensively dispatch every channel message type.
Unhandled messages were buffered internally rather than rejected. A remote peer that completed authentication could then transmit crafted messages that filled internal buffers. Once the buffer reached capacity, message-processing goroutines blocked while waiting for consumers, and consumers blocked waiting for producers, producing a deadlock across the connection.
Root Cause
The root cause is incomplete protocol dispatch combined with unbounded internal buffering. The library trusted peers to send only expected messages and queued anything unrecognized. This design turned protocol nonconformance into a resource-blocking primitive that any authenticated peer could trigger [Deadlock].
Attack Vector
An attacker requires an established SSH channel with the target. From a client perspective, connecting to a malicious server enables the server to send the offending sequence. From a server perspective, any peer able to authenticate and open a channel can trigger the deadlock. The attack exhausts the connection state machine rather than host memory or CPU.
No verified proof-of-concept code is publicly available. Refer to the Go Vulnerability Advisory GO-2026-6355 and the Go Issue Tracker Entry for protocol-level details.
Detection Methods for CVE-2026-56855
Indicators of Compromise
- SSH connections that remain established but stop processing traffic in both directions after channel setup.
- Growing goroutine counts in Go processes exposing SSH, particularly goroutines stuck in channel send or receive operations within x/crypto/ssh.
- Repeated SSH sessions from a single source that terminate abnormally or hang after authentication.
Detection Strategies
- Inventory Go binaries and services that import golang.org/x/crypto/ssh using govulncheck against advisory GO-2026-6355.
- Monitor SSH server telemetry for sessions that authenticate successfully but produce no channel data flow before timeout.
- Correlate abnormal connection lifetimes with client IP reputation to surface probing behavior.
Monitoring Recommendations
- Enable idle and keepalive timeouts on SSH servers so deadlocked sessions are reaped instead of accumulating.
- Export Go runtime metrics (goroutines, blocked profiles) to your observability stack for services exposing SSH.
- Alert on sudden growth in half-open or unresponsive SSH sessions per source address.
How to Mitigate CVE-2026-56855
Immediate Actions Required
- Upgrade golang.org/x/crypto to the fixed version identified in GO-2026-6355 and rebuild affected binaries.
- Run govulncheck ./... across Go repositories to identify code paths that reach the vulnerable functions.
- Restart long-running services after redeployment to clear any deadlocked sessions.
Patch Information
The fix is tracked in the Go Language Change Log entry CL 826524 and announced on the Golang Announcement Group. The patch adds explicit handling for all RFC 4254 channel messages, dispatches global requests explicitly, and treats other messages as protocol errors that tear down the connection.
Workarounds
- Restrict SSH server exposure to authenticated, trusted networks until patched builds are deployed.
- For SSH clients, connect only to trusted servers and enforce connection-level timeouts.
- Apply per-connection resource limits and aggressive idle timeouts to bound the impact of hung sessions.
# Configuration example
go get golang.org/x/crypto@latest
govulncheck ./...
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.