Build2 publishersIndependently confirmed3 min readPublished
OpenSSH 10.6 turns off LZ77 compression to stop a cross-channel plaintext leak
OpenSSH 10.6, released October 6, turns off the LZ77 coder in SSH compression to block an attack that reads one channel's secrets from another. Hosts using the Compression option will get less from it, so the project suggests compressing in the application.
The Engineer · Build desk
Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction
What happened
- The attack works only when compression is on and the attacker has a channel carrying chosen input, and the researchers say it is not known how often both hold in practice.
- Version 10.6 enables the hybrid post-quantum signature ssh-mldsa44-ed25519, and keys made with its experimental predecessor must be regenerated or removed.
- The remote-to-remote scp -R option is deprecated over security risks and will be ignored in a future release.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- cost Bandwidth-constrained hosts that relied on SSH's Compression option will move more bytes after upgrading unless each transfer tool is changed to compress its own payload.
- decision Shops that take OpenSSH only through slow vendor rebuilds will fall further behind upstream fixes, so they have to choose between tracking upstream releases and accepting a longer gap.
- constraint Host-to-host copy jobs built on scp -R need another route before a release that ignores the option reaches those machines.
The paper's title describes the bug almost completely: "Crossing the Streams: SSH Plaintext Recovery via a Common Compression Context in Multiplexed Channels" [14]. Channels carried on one SSH connection compress against shared state. An attacker who can push chosen input into one channel and watch ciphertext lengths can recover secret data sent on another [14]. The coder OpenSSH turned off is the part that keeps the shared dictionary, and the project says that dictionary behavior is what the attack relied on [3]. LWN reports the change lands in both ssh and sshd [4].
Two conditions have to hold at once: compression switched on, and an attacker with a channel that carries chosen input [15]. According to the researchers, it is not known how often those coincide in real deployments [15]. OpenSSH's maintainers had already advised against compression on connections that mix trusted and untrusted traffic [16]. Hosts that followed that advice were not running the configuration the attack needs [22].
Hosts that enabled `Compression` to save bandwidth pay for the fix. The option still exists but does less [2]. Release notes for 10.6 recommend application-level compression where practical [2]. For a file transfer, that means the tool compresses its own payload before SSH carries it. I think this is the right default for code built into so many operating systems and products [13]. The efficiency loss hits only hosts that opted into compression, while the leak could reach data on any other channel sharing their connection [14].
Compression shows up in one more fix, for compressed payloads larger than the supported packet size [19]. The SFTP client now validates server-returned paths more strictly, so a malicious server cannot steer a recursive copy outside its target directory [17]. GSSAPI authentication no longer keeps credentials from failed attempts, and it resets its state between tries [18]. Other fixes cover command-line usernames containing dollar signs or backslashes, a shell-injection risk in some configurations, and the authorized_keys `restrict` keyword for tunnel forwarding [19]. Runtimewire describes these as specific hardening measures, not a claim that every configuration was exposed [20].
The cadence change has a stated cause. According to the maintainers, they have received a large number of security reports built on AI model findings or AI-assisted analysis, and many are not security issues under a realistic threat model [5]. Some AI-identified bugs were later found independently by another researcher [5]. When two parties can find the same bug on their own, a fix held for a scheduled release gives the next finder time to use it. The project's announcement, as quoted by LWN, says: "We very much welcome these reports, especially when combined with human triage, analysis, test-cases and particularly when accompanied by proposed fixes" [7]. Fixes will now ship in more frequent releases instead of waiting for the next planned one [6]. The release notes do not quantify the reports or say how many produced fixes [8]. The project also says few of the companies that ship OpenSSH in their products help fund it [21].
On the post-quantum side, 10.6 enables `ssh-mldsa44-ed25519`, a hybrid signature that pairs ML-DSA-44 with Ed25519 [9]. Keys created with the earlier experimental version must be regenerated or removed [11]. A new server option, `WarnWeakCrypto`, is on by default and logs when a client uses key agreement that is not post-quantum safe [10]. Every such client will produce a log line after the upgrade [10]. The remote-to-remote `scp -R` option is deprecated over security risks and will be ignored in a future release [12].
OpenSSH ships inside operating systems and commercial products [13]. Each of them picks up the compression change and the faster release stream only when its vendor ships 10.6 and the releases after it [13][6].
What to watch
- Whether operating system and appliance vendors ship 10.6 itself or backport only the LZ77 change into the older OpenSSH versions they carry.
- How often OpenSSH actually ships releases in the coming months, and whether the project ever counts how many AI-assisted reports led to fixes.
- The OpenSSH release in which scp -R moves from deprecated to ignored.