Internet security research and reporting
Technical Advisory Updated Retrospective · 2024 CVE-2024-6387

regreSSHion: verify the running server, not just an OpenSSH version string

A pre-authentication race condition showed why SSH keys, package backports and server patch state belong in separate checks.

Pre-authentication connection; LoginGraceTime expires; Signal-handler path; Unsafe asynchronous handling. Original diagram of the incident mechanism and review boundaries.
FISRO schematic: Pre-authentication connection; LoginGraceTime expires; Signal-handler path; Unsafe asynchronous handling. FISRO

Summary

OpenSSH 9.8 fixed CVE-2024-6387 on 1 July 2024. The affected upstream server range was 8.5p1–9.7p1, while distributions supplied their own backports. This analysis includes full Debian and Ubuntu fix boundaries, read-only server checks and the laboratory conditions described at disclosure.

The bug occurred before authentication

OpenSSH 9.8, released on 1 July 2024, fixed a critical race condition in the portable server. The upstream release notes identify versions 8.5p1 through 9.7p1 as affected by CVE-2024-6387. Qualys, which reported the issue, called it regreSSHion because a previously addressed class of vulnerability had reappeared.

The problem concerns asynchronous signal handling in the server's authentication timeout path. This makes an important operational distinction: requiring SSH keys does not remove a flaw reached before a client has authenticated. Key-only access remains useful, but it answers a different security question.

Keep the demonstration attached to its conditions

The 9.8 release notes describe demonstrated exploitation on 32-bit Linux/glibc systems with ASLR and an average of six to eight hours of continuous connections under laboratory conditions. The same disclosure said exploitation on 64-bit systems was considered possible but had not been demonstrated there at that time. OpenBSD was not vulnerable.

These are statements about the evidence at disclosure, not a guarantee about every later exploit or every deployment. A retrospective should preserve that time boundary rather than silently turning an initial limitation into a permanent assurance.

Triage the server, not the workstation's client

Running ssh -V usually tells an administrator about the client executable in that environment. It does not prove which server package a remote host runs or whether the distribution backported a fix. This is a common mismatch between a convenient command and the question that needs answering.

Evidence What it establishes Remaining work
Server package release Installed distribution build Compare with that distribution's advisory
Service and process state What is running now Confirm the fix reached the running daemon
Network access policy Who can reach the listener Include IPv6, alternate ports and management paths
Upstream version Useful vulnerability context Account for vendor backports and platform differences

A banner or scanner finding is a lead to reconcile with package evidence. Treating every older upstream number as unpatched will produce false positives on supported distributions that backport security fixes.

A maintenance sequence that avoids a second incident

Identify the server's package source and affected status using the operating-system vendor's guidance. Prioritise internet-reachable listeners and systems with weaker network restrictions. Stage the update using the supported package mechanism and verify the running service after the documented restart or reload procedure.

Before changing SSH access on a remote server, preserve a working administrative session and confirm that a separate recovery route exists. This is an availability precaution: a correctly patched daemon is of little immediate help if an unrelated configuration mistake prevents every administrator from connecting.

Record the package release, verification time, host owner and the evidence used to close the ticket. Keep the original exposure decision if it matters to an incident investigation. A queue containing only “OpenSSH updated” cannot distinguish an updated client from a remediated server.

Why xz belongs in the comparison

The xz incident also led responders towards SSH, but by a different route: malicious dependency build material rather than this server race condition. The overlapping service name is not a shared root cause. One case demands artefact provenance and linkage analysis; the other requires affected server implementation and patch verification.

FISRO's assessment is that management-plane exposure deserves its own asset record. Keep authentication strength, pre-authentication software risk and recovery access as separate fields. Improving one of them should not make the other two disappear from review.

Backported fixes have their own version boundaries

The Debian tracker records 1:9.2p1-2+deb12u3 as the bookworm fix boundary for CVE-2024-6387. Ubuntu records 1:9.6p1-3ubuntu13.3 for Ubuntu 24.04 LTS. Both illustrate why a supported distribution package can retain an upstream number below 9.8p1 while carrying the correction.

Packaging context Recorded historical fix Evidence
Portable OpenSSH upstream 9.8p1 OpenSSH 9.8 release notes
Debian bookworm 1:9.2p1-2+deb12u3 Debian CVE tracker / DSA-5724-1
Ubuntu 24.04 LTS 1:9.6p1-3ubuntu13.3 Ubuntu CVE-2024-6387 record

These are historical boundaries for the named contexts, not current recommended package versions. Other releases and vendor builds require their own evidence. The Debian record also distinguishes bullseye as not affected; that conclusion does not derive simply from its number being older.

Check the installed server and the process state

On a Debian-family host, read the full server package release:

dpkg-query -W -f='${Package}\t${Version}\n' openssh-server

On an RPM-managed host, query the server package using the supported package database:

rpm -q openssh-server

Then inspect the service state and process start time through the operating system's service manager. On a systemd system whose unit is named ssh.service, a bounded read is:

systemctl show ssh.service -p MainPID -p ActiveEnterTimestamp

Some systems use sshd.service; use the installed unit name. These records do not prove that the process loaded the expected fix. Reconcile the package transaction and the vendor's required restart procedure with the actual service state. A long-running daemon that predates the relevant update needs attention even when the package database looks correct.

The timeout condition and its trade-off

The issue involved sshd's handling of a signal after a client failed to authenticate within LoginGraceTime. Qualys identified a regression of CVE-2006-5051. This is a direct historical precedent in the same failure class, unlike the unrelated malicious dependency route in xz.

Ubuntu's record describes setting LoginGraceTime to zero as a mitigation and explicitly notes a denial-of-service trade-off involving exhaustion of unauthenticated connection slots. That is not a setting to copy silently into production. Prefer the supported software correction and assess any temporary measure with the service owner.

ProxyLogon and ScreenConnect provide useful operational comparisons: authentication strength does not remove a vulnerable route reached before normal authentication. Their code paths and persistence questions differ, so use the OpenSSH-specific platform and process evidence here.

The closure decision should identify the full vendor package, running daemon, reachable listener and retained recovery access. Keep any investigation of suspicious earlier activity as a separate decision rather than inferring it from the update result.

Affected software and fixes

ComponentAffectedFixed inStatusEvidence
Portable OpenSSH server (upstream)
Check distribution backports and current supported releases; this row records the original upstream boundary.
8.5p1–9.7p1 inclusive 9.8p1 (historical upstream fix) Fix available OpenSSH project
OpenBSD
For CVE-2024-6387 as stated in the upstream disclosure.
— — Not affected OpenSSH project
Versions as stated by each evidence source. Last checked 30 October 2026. Check vendor advisories before acting; this table is not a substitute for them.

What to do

Read the full openssh-server package release and its distribution advisory. Reconcile the update and required restart with the running daemon. Keep an independent recovery session or console available before changing remote access.

What remains unverified

The exploitability statements quoted in the analysis describe the evidence at the July 2024 disclosure. They are not a current assurance about every architecture or later exploit technique.

Timeline

  1. OpenSSH releases 9.8 with the fix and describes the demonstrated exploitation conditions. [OpenSSH project]

Methodology

AI-assisted research and drafting. The article synthesises the linked primary documents; technical examples are read-only checks or proposed exercises, not claimed FISRO reproductions. Dates and product conditions are attributed to their sources. Editorial interpretation and diagrams are identified as FISRO analysis.

Sources

Primary sources are maintainers, vendors, official bodies and original documents. Secondary sources are reporting by others.

  1. OpenSSH 9.8 release notes OpenSSH project Primary Published 1 Jul 2024 Accessed 30 Oct 2026 Affected upstream range, disclosed laboratory conditions and OpenBSD status.
  2. regreSSHion: unauthenticated remote code execution in OpenSSH's server Qualys Threat Research Unit Primary Published 1 Jul 2024 Accessed 30 Oct 2026 Discoverer's explanation and vendor patching context.
  3. CVE-2024-6387 product impact bulletin Palo Alto Networks Primary Published 1 Jul 2024 Accessed 30 Oct 2026 Product-specific assessment and signal-handler context; not a statement about all OpenSSH deployments.
  4. Debian CVE-2024-6387 tracker Debian Security Team Primary Accessed 30 Oct 2026 Primary reference for the specific technical additions in this revision.
  5. Ubuntu CVE-2024-6387 record Ubuntu Security Team Primary Accessed 30 Oct 2026 Primary reference for the specific technical additions in this revision.

Updates and corrections

  • Update · 30 October 2026, 01:39 UTC
    Expanded technical conditions, read-only diagnostics, incident comparisons and original diagrams; AI-assisted drafting disclosed. Original publication date retained.

Found an error? Request a correction. We record every substantive change on this page, as set out in our corrections policy.

Related coverage