Zusammenfassung
- Sicherheitslücke in OpenSSH entdeckt: Im OpenSSH-Server (
sshd) wurde eine RCE-Sicherheitslücke gefunden, die durch eine Race Condition im Signal-Handler verursacht wird. Diese Schwachstelle betrifft sshd in der Standardkonfiguration.
- Ursprung der Schwachstelle: Die Schwachstelle ist eine Regression von CVE-2006-5051, das 2006 gemeldet wurde, und entstand durch eine Codeänderung, die im Oktober 2020 in OpenSSH 8.5p1 eingeführt wurde.
- Auswirkungen der Schwachstelle: Sie kann auf glibc-basierten Linux-Systemen aus der Ferne ausgenutzt werden, betrifft privilegierten Code in
sshd und ermöglicht Remote Code Execution mit Root-Rechten.
- Methode zur Ausnutzung: Um die Schwachstelle auszunutzen, muss ein bestimmter Codepfad gefunden und im richtigen Moment unterbrochen werden. Dafür wurde mit älteren OpenSSH-Versionen begonnen und die Technik anschließend auf neuere Versionen ausgeweitet.
- Patch und Abmilderung: Es werden ein Patch und Maßnahmen zur Abmilderung der Schwachstelle bereitgestellt.
SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-1.woody.3 (Debian 3.0r6, 2005)
Theorie
- SIGALRM-Handler: Der SIGALRM-Handler dieser Version ruft
packet_close() auf, das wiederum buffer_free() aufruft, das schließlich xfree() und free() aufruft. free() ist nicht asynchron-signal-sicher.
- Analyse des malloc-Codes: In der
malloc-Implementierung wurde ein Pfad gefunden, bei dem ein free()-Aufruf durch SIGALRM unterbrochen und anschließend im SIGALRM-Handler erneut aufgerufen wird, sodass sich die Schwachstelle ausnutzen lässt.
Praxis
- Angriffsmethode: Ein
free()-Aufruf im Code zum Parsen eines DSA-Public-Keys wird unterbrochen und anschließend im SIGALRM-Handler ausgenutzt, um Remote Code Execution zu erreichen.
- Gewinn der Race Condition: Um diese Race Condition zu gewinnen, sind etwa 10.000 Versuche nötig; im Durchschnitt dauert es ungefähr eine Woche.
Timing
- Timing-Strategie: Um die Netzwerklatenz zu minimieren, wird das letzte Byte im letzten Moment gesendet und die Round-Trip-Time verfolgt, um das Timing anzupassen. Dadurch steigt die Wahrscheinlichkeit, die Race Condition zu gewinnen.
SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3 (Ubuntu 6.06.1, 2006)
Theorie 1
- SIGALRM-Handler: Der SIGALRM-Handler dieser Version ruft
packet_close() nicht auf, und da malloc immer sperrt, wird eine andere Lösung benötigt.
- Verwendung von PAM: Es wurde festgestellt, dass
pam_end() nicht asynchron-signal-sicher ist, und ein ausnutzbarer Pfad dafür wurde untersucht.
Theorie 2
- Analyse von
pam_start(): Wenn pam_start() unterbrochen wird, kann die PAM-Struktur in einem inkonsistenten Zustand verbleiben, der sich im SIGALRM-Handler ausnutzen lässt.
- House-of-Mind-Technik: Für den Angriff wurde die House-of-Mind-Technik verwendet, um Speicherallokationen zu manipulieren und Remote Code Execution mit Root-Rechten zu erreichen.
Praxis
- Angriffsmethode: Durch die Verwendung langer Benutzernamen werden Speicherallokationen manipuliert, und durch mehrere
pam_start()-Aufrufe wird die Wahrscheinlichkeit erhöht, die Race Condition zu gewinnen.
Timing
- Timing-Strategie: Die Timing-Strategie aus der vorherigen Debian-Version wird wiederverwendet, um die Wahrscheinlichkeit zu erhöhen, die Race Condition zu gewinnen. Im Durchschnitt dauert dies 1 bis 2 Tage.
SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2 (Debian 12.5.0, 2024)
Theorie
- SIGALRM-Handler: Der SIGALRM-Handler dieser Version ruft
syslog() auf, das wiederum Funktionen aufruft, die nicht asynchron-signal-sicher sind.
- Analyse von glibc:
syslog() in glibc ruft malloc auf, was nicht asynchron-signal-sicher ist. Außerdem sperrt die malloc-Funktion von glibc im Single-Thread-Modus nicht.
Patch und Abmilderung
- Patch: Die Schwachstelle wurde den OpenSSH-Entwicklern gemeldet, und es wurde ein Patch zu ihrer Behebung bereitgestellt.
Meinung von GN⁺
- Bedeutung der Sicherheit: OpenSSH ist eine äußerst wichtige Sicherheitssoftware, und diese Schwachstelle ist ein sehr seltener Fall.
- Schwierigkeit der Ausnutzung: Um diese Schwachstelle auszunutzen, sind äußerst präzises Timing und sehr viele Versuche erforderlich.
- Alternative Lösungen: Neben OpenSSH gibt es verschiedene weitere Sicherheitslösungen, und es ist sinnvoll, diese gemeinsam einzusetzen.
- Technische Herausforderung: Diese Forschung erfordert ein sehr hohes technisches Niveau und kann Sicherheitsforschende stark inspirieren.
- Abmilderung der Schwachstelle: Es ist wichtig, aktuelle Sicherheitspatches einzuspielen und die Sicherheitseinstellungen zu härten.
1 Kommentare
Hacker-News-Kommentare
Der RCE-Fix wurde vor fast einem Monat öffentlich „heimlich“ vorgenommen
In dem Diff, das den Bug eingeführt hat, wurde die Funktion wie folgt refaktoriert
sigdie(const char *fmt,...)sshsigdie(const char *file, const char *func, int line, const char *fmt, ...)Interessanter Kommentar in den OpenSSH-Release-Notes
OpenBSD ist von dieser Schwachstelle nicht betroffen, da der SIGALRM-Handler syslog_r() aufruft
Bei der Untersuchung von musls syslog(3) zeigte sich, dass es sich im Gegensatz zu glibc nicht leicht ausnutzen lässt
Ein Patch für FreeBSD ist erschienen, und da es glibc nicht verwendet, ist es wahrscheinlich nicht betroffen
Das Setzen von 'LoginGraceTime 0' in der sshd_config-Datei kann das Problem abmildern
Ein Patch für Debian 12 ist erschienen, Debian 11 ist nicht betroffen
Links zu den OpenSSH-Release-Notes und zum Minimal-Patch werden bereitgestellt
Aus unabhängiger Sicht sollte es ausreichen, bereits eine einzelne Schwachstelle zu finden