CVE-2026-78662 Overview
CVE-2026-78662 is a denial-of-service vulnerability in the Go golang.org/x/crypto/ssh package. A malicious SSH peer can flood the incomingRequests channel of a newly registered but not-yet-established channel, deadlocking the entire SSH connection. The flaw stems from the multiplexer registering channels in its chanList before they reach a usable state, allowing packets to be routed to a channel that cannot drain them. The upstream fix introduces an atomic established state and drops non-open packets until the channel is confirmed.
Critical Impact
A remote SSH peer can hang the full SSH connection without authentication of the channel handler, disrupting availability of any Go service using x/crypto/ssh.
Affected Products
- Go golang.org/x/crypto/ssh package (versions prior to the fix in CL 826504)
- Go applications and services embedding SSH server or client functionality via x/crypto/ssh
- Downstream projects tracked by the Go vulnerability database entry GO-2026-6354
Discovery Timeline
- 2026-09-02 - CVE-2026-78662 published to NVD
- 2026-09-02 - Last updated in NVD database
- Additional context available in the Go issue tracker entry 81316 and the golang-announce group post
Technical Details for CVE-2026-78662
Vulnerability Analysis
The Go x/crypto/ssh multiplexer maintains a chanList that tracks all channels associated with an SSH connection. Before this fix, a channel entry was inserted into chanList at registration time, prior to the peer confirming channel open through an open confirmation or open failure message. During this window, the multiplexer's handlePacket routine would route inbound requests to the channel's incomingRequests buffer.
The channel is not yet consuming from that buffer because it has not been handed off to application code. A malicious peer can send a large volume of channel requests targeting the pending channel. Once incomingRequests fills, handlePacket blocks on the channel send, halting the mux's read loop. All other channels on the same SSH connection then stop receiving traffic, producing a full connection deadlock.
Root Cause
The root cause is a state-tracking gap in channel lifecycle management, aligning with race and resource-exhaustion patterns [CWE-833] and [CWE-770]. The mux treated chanList registration as sufficient to accept traffic. It lacked an atomic marker distinguishing a registered channel from an established one, so blocking sends could occur against a channel with no consumer.
Attack Vector
Exploitation requires an SSH session where the attacker can act as a peer and initiate channel operations. After a channel open request, the attacker floods the target with channel-scoped requests before the local side completes the open handshake. The unbounded queuing behavior against a non-established channel causes the mux read loop to stall, denying service to all multiplexed channels on that connection.
No verified public exploit code is available. See the upstream change CL 826504 for the corrective logic that introduces the atomic established state and drops non-open packets during the pending window.
Detection Methods for CVE-2026-78662
Indicators of Compromise
- SSH connections that stop processing traffic on all channels shortly after a new channel open request from a specific peer.
- Elevated volumes of SSH channel request packets targeting recently opened, not-yet-confirmed channels.
- Go process goroutine dumps showing x/crypto/ssh mux goroutines blocked on channel send operations to incomingRequests.
Detection Strategies
- Inventory Go binaries using govulncheck to identify modules importing vulnerable golang.org/x/crypto/ssh versions referenced in GO-2026-6354.
- Monitor SSH server logs for stalled sessions correlated with unusual channel request bursts from a single source.
- Instrument affected services with runtime profiling to detect goroutine growth or blocked sends in the SSH mux.
Monitoring Recommendations
- Alert on SSH sessions that exceed baseline duration without traffic exchange after a channel open.
- Track per-peer channel request rates and flag sources issuing high-volume requests immediately after channel open.
- Forward Go application telemetry to a centralized data lake so anomalous SSH connection patterns can be correlated across hosts.
How to Mitigate CVE-2026-78662
Immediate Actions Required
- Upgrade golang.org/x/crypto to the fixed version referenced in GO-2026-6354 and rebuild all affected Go binaries.
- Run govulncheck ./... across Go codebases to enumerate call sites reaching the vulnerable SSH mux logic.
- Restrict SSH exposure to trusted networks until patched binaries are deployed.
Patch Information
The fix lands in Go change CL 826504, tracked under Go issue 81316 and announced through the golang-announce mailing list. The patch adds an atomic established state to each channel. Until that state flips, handlePacket drops all packets except the open confirmation or failure, without blocking and without tearing down the connection.
Workarounds
- Place SSH services behind an authenticating proxy or bastion that limits peer channel request rates.
- Enforce per-source connection and request rate limits at the network edge to reduce flood potential.
- Rotate or terminate long-lived SSH sessions from untrusted peers until patching is complete.
# Update x/crypto to the fixed release and verify with govulncheck
go get golang.org/x/crypto@latest
go mod tidy
govulncheck ./...
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.