Im Verlauf der Untersuchung der in der letzten Woche entdeckten kritischen Schwachstelle in OpenSSH wurde eine weitere ähnliche Schwachstelle (CVE-2024-6409) gefunden, die es ermöglicht, Code remote ohne Authentifizierung auszuführen. Die neue Schwachstelle ist nicht so gefährlich wie die vorherige, da sie nach einem Privilegienrücksatz im ausgeführten SSH-Server-Prozess auftritt. Die Schwachstelle ist in den openssh-Paketen der Red Hat Enterprise Linux 9-Distro vorhanden, die auf der 2021 veröffentlichten Version von OpenSSH 8.7 basieren. Das Problem betrifft auch die Pakete für Fedora Linux 36 und 37, die auf den Versionen OpenSSH 8.7 und 8.8 basieren.
Die Schwachstelle ist im Grunde genommen mit dem vorherigen Problem vergleichbar und wird ebenfalls durch einen Race-Condition im SIGALRM-Interrupt-Handler verursacht, der durch den Aufruf von Funktionen hervorgerufen wird, die nicht für die asynchrone Ausführung aus Signal-Handlern ausgelegt sind. Der Handler wird bei Ablauf der Zeit, die über den Parameter LoginGraceTime definiert ist, aktiviert und unterbricht die aktuelle Ausführung des Codes. Die Verwendung von Funktionen, die nicht für die asynchrone Ausführung vorgesehen sind, im Interrupt-Handler, wie z. B. syslog(), insbesondere bei dynamischer Speicherzuweisung, kann zu einer Beschädigung der internen malloc-Strukturen führen, wenn SIGALRM während der Ausführung bestimmter Codes ausgelöst wird.
Die neue Schwachstelle unterscheidet sich darin, dass der Race-Condition durch den Aufruf der Funktion cleanup_exit() im Signal-Handler grace_alarm_handler() entsteht. In der Hauptcodebasis von OpenSSH kann diese Funktion im asynchron ausgeführten Code verwendet werden, jedoch wurde in den Paketen für RHEL 9 und Fedora ein zusätzlicher Patch angewendet, der in cleanup_exit() einen Aufruf zur Generierung von Audit-Events hinzufügt, welcher für die Verwendung in Signal-Handlern ausgelegt ist.
Dieser Patch wurde in RHEL 9 und abgeleiteten Distributionen in Paketen basierend auf OpenSSH 8.7p1 verwendet. In den aktuellen Versionen von Fedora tritt das Problem nicht auf, da seit Fedora 38 die Distribution auf eine neuere Version von OpenSSH umgestiegen ist, ohne die cleanup_exit()-Funktion zu ändern. Im Gegensatz zur vorherigen Schwachstelle ist ein Workaround, der auf dem Gebrauch von der Option "-e" in sshd basiert, die die Protokollausgabe über syslog deaktiviert, hier nicht geeignet. Um jedoch die Schwachstelle in sshd zu verhindern, kann in der sshd_config der Parameter "LoginGraceTime=0" gesetzt werden.
Quelle: opennet.ru
