OpenSSH 10.3 fixes shell injection issue and tightens certificate handling


OpenSSH 10.3 and 10.3p1 are now out, and the release includes a fix for a shell injection issue in the ssh client plus several security-related behavior changes that admins should review before upgrading. The project published the release on April 2, 2026, through its official mirrors.

The headline fix is not a general OpenSSH remote code execution flaw, and it is not limited to ProxyJump alone. OpenSSH says the risk appears when an ssh command line is built using usernames or URIs from an untrusted source and a ProxyCommand that uses %r expansion is configured. In that case, an attacker may be able to inject shell expressions that run when the proxy command starts.

OpenSSH also makes its stance clear in the release notes. The developers strongly recommend against using untrusted input to construct ssh command lines in the first place. The new release adds validation for command-line supplied values, while usernames supplied as trusted literals in configuration files are treated differently.

The security changes go beyond the shell injection fix

Another important change affects certificate principals. Before this release, sshd could treat a certificate with an empty principals section as matching any principal when used through the authorized_keys principals="" option. OpenSSH says that behavior was intentional, but also surprising and potentially risky because a CA that accidentally issued such a certificate could create a far more powerful credential than expected.

OpenSSH 10.3 changes that behavior. A certificate with an empty principals section now matches no principal at all. The project also says wildcard handling in certificate principals now works consistently for host certificates and is not supported for user certificates.

The release also removes compatibility code for older SSH implementations that do not support transport-layer rekeying. OpenSSH says those implementations will now eventually fail once the transport needs rekeying, which could affect older or non-standard clients and servers in long-lived sessions.

Why this OpenSSH update matters for admins

Admins should pay close attention if they generate ssh commands programmatically. The shell injection fix matters most in setups where usernames, hosts, or URIs come from user-controlled input and get passed into ssh with proxy-related options. That kind of workflow already carried risk, but OpenSSH 10.3 now hardens the client against one such unsafe pattern.

Certificate-based environments also need a second look. Teams that rely on trusted CAs for SSH access should review whether any workflows assumed empty principals behaved like a wildcard, because that no longer applies in OpenSSH 10.3. The new behavior is safer, but it may expose brittle legacy assumptions.

The rekeying change may cause the most operational surprises. Environments that still talk to older SSH software could see connections fail after rekeying becomes necessary, so it makes sense to test older clients, appliances, and embedded systems before broad rollout.

What changed in OpenSSH 10.3

ChangeWhat it means
Shell injection fix in ssh(1)Hardens command-line handling when untrusted usernames or URIs interact with ProxyCommand and %r expansion
Empty certificate principals no longer match anythingPrevents accidental wildcard-style authentication from empty principals sections
Wildcards clarified for certificate principalsSupported for host certificates, not supported for user certificates
Legacy non-rekeying compatibility removedOlder SSH implementations may fail once rekeying becomes necessary

What admins should do next

  • Review any scripts or tools that build ssh command lines from external input.
  • Check whether any ProxyCommand setup uses %r expansion with user-controlled values.
  • Audit certificate-based SSH access for assumptions around empty principals.
  • Test older clients and servers for rekeying support before rolling out 10.3 widely.
  • Update from official OpenSSH mirrors only.

FAQ

Does OpenSSH 10.3 fix a remote code execution bug in SSH servers?

No. The official release notes describe a client-side shell injection risk tied to unsafe construction of ssh command lines using untrusted input and a ProxyCommand that uses %r.

Is the bug only about ProxyJump?

Not exactly. Some early summaries framed it around -J or ProxyJump, but the OpenSSH release notes specifically describe the dangerous case as one involving untrusted usernames or URIs plus a ProxyCommand that uses %r expansion.

Will this update break older SSH tools?

It can. OpenSSH removed compatibility for implementations that do not support rekeying, and those connections will now fail once rekeying becomes necessary.

Why does the certificate principals change matter?

Because an empty principals section used to behave like a wildcard in one path, which could create broader access than intended if a CA made a mistake. OpenSSH 10.3 now treats empty principals as matching nothing.

Readers help support VPNCentral. We may get a commission if you buy through our links. Tooltip Icon

Read our disclosure page to find out how can you help VPNCentral sustain the editorial team Read more

User forum

0 messages