剣 KENSAI

CVE-2024-6387: regreSSHion — OpenSSH RCE na 18 jaar

juli 2024 9 min leestijd beveiliging

Kort samengevat: Een race condition in de signaalafhandeling van OpenSSH stelt niet-geauthenticeerde aanvallers in staat willekeurige code als root uit te voeren op Linux-servers met glibc. "regreSSHion" gedoopt — een regressie van CVE-2006-5051 die in 2020 per ongeluk opnieuw werd geïntroduceerd. Treft ongeveer 14 miljoen aan internet blootgestelde SSH-servers. CVSS 8,1 HOOG.

8.1
KenmerkWaarde
CVE IDCVE-2024-6387
CVSS-vectorAV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-364: Signal Handler Race Condition
Gepubliceerd1 juli 2024
ExploitatieTheoretisch — nog geen bevestigde in-the-wild RCE

CVSS 8,1 — HOOG

Wat is CVE-2024-6387?

CVE-2024-6387 is een race condition in de signaalafhandeling van de OpenSSH-server (sshd). Wanneer een client niet binnen de LoginGraceTime (standaard: 120 seconden) authenticeert, roept sshd SIGALRM aan om de verbinding te beëindigen. De signal handler roept functies aan die niet async-signal-safe zijn — met name syslog() — die de heap-status kunnen corrumperen wanneer ze gelijktijdig met andere bewerkingen worden aangeroepen.

Onderzoekers van Qualys, die de kwetsbaarheid ontdekten, noemden het "regreSSHion" omdat een identieke bug (CVE-2006-5051) in 2006 werd verholpen, maar de fix per ongeluk werd verwijderd toen OpenSSH 8.5p1 in oktober 2020 werd uitgebracht — waardoor de kwetsbaarheid bijna vier jaar lang stilzwijgend opnieuw bestond voordat deze werd ontdekt.

⚠ De schaal van de blootstelling

Shodan- en Censys-data ten tijde van de openbaarmaking toonden ongeveer 14 miljoen aan internet toegankelijke OpenSSH-servers met kwetsbare versies. Zelfs met een Hoge (niet Kritieke) CVSS-score vanwege het vereiste AC:H (hoge complexiteit), maakte het enorme aantal blootgestelde systemen dit tot een van de meest impactvolle kwetsbaarheden van 2024. Elke Linux-server is een potentieel doelwit.

Getroffen versies

OpenSSH-versiebereikStatus
< 4.4p1Kwetsbaar (oorspronkelijke CVE-2006-5051)
4.4p1 – 8.4p1Gepatcht (fix voor CVE-2006-5051 aanwezig)
8.5p1 – 9.7p1KWETSBAAR (regressie opnieuw geïntroduceerd)
9.8p1+Gepatcht

glibc-vereiste: de PoC van Qualys exploiteerde de malloc-implementatie van glibc. De sshd van OpenBSD is niet kwetsbaar. Alpine Linux (dat musl libc gebruikt) en macOS zijn niet kwetsbaar voor de gedemonstreerde exploitatietechniek, hoewel de race condition nog steeds bestaat.

De race condition uitgelegd

Signal handlers in C-programma's mogen alleen "async-signal-safe" functies aanroepen — een kleine subset van libc-functies die veilig zijn om vanuit een signal handler aan te roepen omdat ze geen gedeelde status gebruiken. De functie syslog() is niet async-signal-safe omdat deze intern malloc gebruikt.

# The problematic code path (simplified):
# When LoginGraceTime expires:
SIGALRM → grace_alarm_handler() → syslog() → malloc() internally
                                              ↕ RACE
           main sshd thread also calls        malloc() / free()

# If both malloc operations interleave:
# → Heap corruption
# → With enough attempts: controlled heap layout
# → Remote code execution as root

Exploitatie vereist het betrouwbaar winnen van de race condition, wat duizenden verbindingspogingen over meerdere minuten vergt. Dit maakt geautomatiseerde exploitatie op internetschaal wat trager dan typische "fire and forget"-kwetsbaarheden — maar geavanceerde actoren met permanente toegang tot een doelwit hebben tijd genoeg.

Moeilijkheidsgraad van exploitatie

Qualys demonstreerde betrouwbare exploitatie op 32-bit systemen (x86). Op 64-bit systemen verhoogt ASLR de moeilijkheidsgraad aanzienlijk. De onderzoekers merken op dat exploitatie met ongeveer 10.000 pogingen over 6-8 uur theoretisch haalbaar is op 64-bit systemen, maar ze publiceerden geen werkende PoC voor x86_64.

De drempel kan echter worden verlaagd door:

Detectie

# Check OpenSSH version
ssh -V
sshd -V

# Check installed package version (Debian/Ubuntu)
dpkg -l openssh-server | grep openssh

# Check installed package version (RHEL/CentOS)
rpm -qa | grep openssh-server

# Check for brute-force attempts indicative of regreSSHion exploitation
# (very high connection rate from single IP, all failing within grace period)
grep "Connection closed by" /var/log/auth.log | 
  awk '{print $9}' | sort | uniq -c | sort -rn | head -20

# Check for failed logins at high rate
grep "Failed\|Invalid" /var/log/auth.log | 
  awk '{print $11}' | sort | uniq -c | sort -rn | head -10

Mitigatie

  1. Werk OpenSSH bij naar 9.8p1+: alle grote distributies brachten binnen dagen na de openbaarmaking patches uit. apt update && apt upgrade openssh-server of equivalent.
  2. Stel LoginGraceTime in op 0: het instellen van LoginGraceTime 0 in /etc/ssh/sshd_config voorkomt dat de SIGALRM-handler wordt aangeroepen, waardoor de race condition wordt geëlimineerd (hoewel dit de grace-timeout verwijdert):
    echo "LoginGraceTime 0" >> /etc/ssh/sshd_config
    systemctl reload sshd
  3. Rate limit SSH-verbindingen: configureer fail2ban of iptables rate limiting om de duizenden verbindingen die nodig zijn voor exploitatie te voorkomen
  4. Beperk SSH-toegang op IP: beperk sshd tot bekende beheer-IP-bereiken met behulp van AllowUsers, ListenAddress of firewallregels
  5. Gebruik alleen SSH-sleutels: schakel wachtwoordauthenticatie uit — sleutelgebaseerde authenticatie voegt een sterk pre-authenticatiefilter toe
  6. Overweeg SSH naar een niet-standaardpoort te verplaatsen: vermindert opportunistische scannerruis, hoewel dit geen beveiligingsmaatregel is

KENSAI-detectiemogelijkheden

Hoeveel van uw SSH-servers draaien kwetsbare OpenSSH-versies?

KENSAI inventariseert elke SSH-server in uw omgeving — intern en extern — en markeert direct regreSSHion-kwetsbare versies. Geen agents nodig voor externe blootstelling.

Controleer uw SSH-blootstelling