This bypass affects some configurations and runtime configurations.
We do not consider the root cause to be within OpenSSH but we are
well equipped to avoid it.
Old behaviour was to allow upto and including the expiry day, but this changes
it to allow upto but _not_ including which apparently matches some other tools
and libraries (e.g. Linux-PAM pam_unix.so).
Anthropic ANT-2026-V1VNLWUV
When an invalid user is being considered for non-PAM password authentication,
sshd will generate a fake passwd/salt to hide timing differences in crypt(3)
or similar. To do this, it uses the salt algorithm from the first valid
account in the password database, but the approach we were using failed to
correctly match bcrypt hashes. So, if the password database only contained
bcrypt hashes, then the timing difference between a valid and invalid user
would again be visible.
Anthropic ANT-2026-7T6M8N4X
Restrict the clock syscalls' first argument to positive clock IDs only.
Negative clock IDs represent other processes' clocks.
This avoids a compromised unpriv process from probing other PIDs and
their clocks and/or blocking on their clocks.
Anthropic ANT-2026-UQT74MC0
apparently this maps to old_mmap() which uses indirect flags passing that
we can't inspect. The mmap2(2) syscall (that we can inspect) is also supported
and used by glibc on this platform so this should be okay.
Anthropic ANT-2026-AQZ97XUN
revision 1.51
date: 2026/10/24 18:08:57; author: millert; state: Exp; lines: +12 -1; commitid: eQplLAFWij3oMfPf;
Fix out-of-bounds read on on missing right bracket after character class.
The original code checked for a closing bracket before parsing the
bracket expression. When character class support was added, that
closing bracket can now be part of the character class instead.
Add another check for the closing bracket after parsing character
classes and roll back if we don't find one.
Adapted from an OpenSSH bug report. OK djm@
revision 1.32
date: 2026/10/15 16:40:50; author: millert; state: Exp; lines: +2 -2; commitid: PeYLMhPn3x9iWE37;
Don't print newline after reading password if interrupted by signal.
Avoids an extra newline when the user presses ^C or ^\ at the
password prompt. OK deraadt@
On platforms that require root privilege for the post-authentication
sshd-session process (e.g. OpenServer 5, QNX 6), disable and restrict
a number of features that assume user privilege.
This includes GatewayPorts, StreamLocalForwarding and -R forwardings
binding to ports <1024
In the seccomp sandbox, restrict use of mremap(2) to only permit
its use with the MREMAP_MAYMOVE flag and specifically not the
MREMAP_FIXED flag, as the latter may have some use as part of an
attack chain.
Reported by: Mohammad Hossein Abedini <mhmd.abedinii@gmail.com>
ok deraadt@
During the refactor of server option parsing, the ability to set
PAMServiceName in Match blocks was accidentally disabled.
Reported by Kanishka De Silva; ok markus
This rewrites most of the privsep description to more accurately capture
recent changes in how sshd managed privilege across its lifecycle,
including describing the roles of the sshd-session and sshd-auth
helper binaries.
Also 100% more ASCII art
Notably picks up this commit:
revision 1.24
date: 2026/06/06 23:49:25; author: djm; state: Exp; lines: +28 -12; commitid: oznzDs0MaUT3FEqO;
rearrange scan_scaled(3) ordering of multiplications and divisions
to better preserve accuracy for large exponents. From metsw24-max
via https://github.com/openssh/openssh-portable/pull/671/
ok tb@
revision 1.15
date: 2026/05/09 01:54:51; author: tb; state: Exp; lines: +14 -13; commitid: zZPVUWycKAslGJtO;
Avoid recursive cleanup in getrrsetbyname()
Instead of freeing struct dns_query and struct dns_rr by walking the
linked lists recursively, use a simple loop. This avoids a possible
stack exhaustion unlikely to be reachable with the limits modern
resolvers impose.
From Dhiraj Mishra
OpenSSH doesn't support PAM changing its conception of the
username via a module calling pam_set_item(h, PAM_USER, ...).
We were supposed to bail out here, but I messed up while "fixing"
this last time and dropped a return statement.
Reported by Mike Damm
Commits b9a6dd4d6 and df2b28163 introduced a potential desynchronisation
between the PAM code and the sshd-session monitor that could result in
authentication bypass if the unprivileged sshd-auth process had been
compromised.
Reported by Ben Edelman of NIST. Only git HEAD is affected, these
changes have not yet been included in an OpenSSH release.
1. Use the ssh-keygen under test and not the one in $PATH
2. Include a test PKCS#11 operation to ensure that the P11 stack is
working correctly.
Previously, it was possible for p11_setup to return success on
configurations with PKCS#11 support disabled.
The connect-bigconf makes a giant config file to test config passing
between the sshd subprocesses. Previously it used a bunch of "Match
group" lines to construct a large file. However checking group
membership can be expensive (e.g. if a large groups database is
present or if group lookup is remote via NSS). This could be slow
enough to exceed LoginGraceTime.
This switches it to "Match version" which is just a string compare
and does just as well for making a giant nonsense config file.
OpenBSD has recently relaxed the pledge(2) sandbox to allow some
setsockopt options to be changed without the "inet" promise.
This adds compatibility for OpenBSD that predates this relaxation.