deadsimple BSD Security Advisories and Announcements

FreeBSD Security Advisory FreeBSD-SA-24:04.openssh

Hash: SHA512

FreeBSD-SA-24:04.openssh                                    Security Advisory
                                                          The FreeBSD Project

Topic:          OpenSSH pre-authentication remote code execution

Category:       contrib
Module:         openssh
Announced:      2024-07-01
Credits:        Qualys Threat Research Unit (TRU)
Affects:        All supported versions of FreeBSD.
Corrected:      2024-07-01 08:22:13 UTC (stable/14, 14.1-STABLE)
                2024-07-01 08:24:48 UTC (releng/14.1, 14.1-RELEASE-p2)
                2024-07-01 08:26:05 UTC (releng/14.0, 14.0-RELEASE-p8)
                2024-07-01 08:23:16 UTC (stable/13, 13.3-STABLE)
                2024-07-01 08:27:10 UTC (releng/13.3, 13.3-RELEASE-p4)
                2024-07-01 08:27:53 UTC (releng/13.2, 13.2-RELEASE-p12)
CVE Name:       CVE-2024-6387

Note: Due to the fact this advisory is being released the day after
13.2-RELEASE is going out of support, the Security Team has decided to
include 13.2-RELEASE in the response for this issue.

For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:>.

I.   Background

OpenSSH is an implementation of the SSH protocol suite, providing an
encrypted and authenticated transport for a variety of services, including
remote shell access.

II.  Problem Description

A signal handler in sshd(8) calls a function that is not async-signal-safe.
The signal handler is invoked when a client does not authenticate within the
LoginGraceTime seconds (120 by default).  This signal handler executes in the
context of the sshd(8)'s privileged code, which is not sandboxed and runs
with full root privileges.

This issue is a regression of CVE-2006-5051 originally reported by Mark Dowd
and accidentally reintroduced in OpenSSH 8.5p1.

III. Impact

As a result of calling functions that are not async-signal-safe in the
privileged sshd(8) context, a race condition exists that a determined
attacker may be able to exploit to allow an unauthenticated remote code
execution as root.

IV.  Workaround

If sshd(8) cannot be updated, this signal handler race condition can be
mitigated by setting LoginGraceTime to 0 in /etc/ssh/sshd_config and
restarting sshd(8).  This makes sshd(8) vulnerable to a denial of service
(the exhaustion of all MaxStartups connections), but makes it safe from the
remote code execution presented in this advisory.

V.   Solution

Upgrade your vulnerable system to a supported FreeBSD stable or
release / security branch (releng) dated after the correction date.

Perform one of the following:

1) To update your vulnerable system via a binary patch:

Systems running a RELEASE version of FreeBSD on the amd64 or arm64 platforms,
or the i386 platform on FreeBSD 13, can be updated via the freebsd-update(8)

# freebsd-update fetch
# freebsd-update install
# service sshd restart

2) To update your vulnerable system via a source code patch:

The following patches have been verified to apply to the applicable
FreeBSD release branches.

a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.

[FreeBSD 14.1]
# fetch
# fetch
# gpg --verify openssh-14.1.patch.asc

[FreeBSD 14.0]
# fetch
# fetch
# gpg --verify openssh-14.0.patch.asc

[FreeBSD 13.3]
# fetch
# fetch
# gpg --verify openssh-13.3.patch.asc

[FreeBSD 13.2]
# fetch
# fetch
# gpg --verify openssh-13.2.patch.asc

b) Apply the patch.  Execute the following commands as root:

# cd /usr/src
# patch < /path/to/patch

c) Recompile the operating system using buildworld and installworld as
described in <URL:>.

Restart the applicable daemons, or reboot the system.

VI.  Correction details

This issue is corrected as of the corresponding Git commit hash in the
following stable and release branches:

Branch/path                             Hash                     Revision
- -------------------------------------------------------------------------
stable/14/                              620a6a54bb7b    stable/14-n268045
releng/14.1/                            8f80def8aa08  releng/14.1-n267683
releng/14.0/                            70eb00f17b31  releng/14.0-n265420
stable/13/                              25cf430cd551    stable/13-n258037
releng/13.3/                            e3e0912f2977  releng/13.3-n257437
releng/13.2/                            99ad94894edf  releng/13.2-n254666
- -------------------------------------------------------------------------

Run the following command to see which files were modified by a
particular commit:

# git show --stat <commit hash>

Or visit the following URL, replacing NNNNNN with the hash:


To determine the commit count in a working tree (for comparison against
nNNNNNN in the table above), run:

# git rev-list --count --first-parent HEAD

VII. References




The latest revision of this advisory is available at