Die Version OpenSSH 9.2 wurde veröffentlicht, eine Open-Source-Implementierung von Client und Server für die Protokolle SSH 2.0 und SFTP. In der neuen Version wurde eine Schwachstelle behoben, die zu einer doppelten Speicherfreigabe vor der Authentifizierung führt. Von dieser Schwachstelle ist lediglich die Version OpenSSH 9.1 betroffen; in früheren Versionen tritt das Problem nicht auf.
Um die Bedingungen für das Auftreten der Schwachstelle zu schaffen, genügt es, das Banner des SSH-Clients auf „SSH-2.0-FuTTYSH_9.1p1“ zu ändern. Dadurch werden die Flags „SSH_BUG_CURVE25519PAD“ und „SSH_OLD_DHGEX“ gesetzt, die von der Version des SSH-Clients abhängen. Nach dem Setzen dieser Flags wird der Speicher für den Puffer „options.kex_algorithms“ zweimal freigegeben – einmal beim Aufruf der Funktion do_ssh2_kex(), die comp_kex_proposal() aufruft, und ein weiteres Mal in der Funktion do_authentication2(), die nacheinander input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() und kex_assemble_names() aufruft.
Die Erstellung eines funktionierenden Exploits für die Schwachstelle gilt als unwahrscheinlich, da der Exploit-Prozess zu komplex ist – moderne Speicherverwaltungsbibliotheken bieten Schutz gegen doppeltes Freigeben von Speicher und der Pre-Auth-Prozess, in dem der Fehler auftritt, wird mit reduzierten Rechten in einer isolierten Sandbox-Umgebung ausgeführt.
Zusätzlich zu der erwähnten Schwachstelle wurden in der neuen Version auch zwei weitere Sicherheitsprobleme behoben:
- Ein Fehler bei der Verarbeitung der Einstellung „PermitRemoteOpen“, der dazu führt, dass das erste Argument ignoriert wird, wenn es von den Werten „any“ und „none“ abweicht. Das Problem tritt in Versionen nach OpenSSH 8.7 auf und führt dazu, dass die Überprüfung bei Angabe nur eines Berechtigungsnachweises übersprungen wird.
- Ein Angreifer, der einen DNS-Server kontrolliert, der zur Namensauflösung verwendet wird, kann die Substitution von Sonderzeichen (z. B. „*“) in die known_hosts-Dateien erreichen, wenn die Optionen CanonicalizeHostname und CanonicalizePermittedCNAMEs in der Konfiguration aktiviert sind und der Systemresolver die Richtigkeit der Antworten vom DNS-Server nicht überprüft. Ein solcher Angriff wird als äußerst unwahrscheinlich betrachtet, da die zurückgegebenen Namen den Bedingungen entsprechen müssen, die über CanonicalizePermittedCNAMEs festgelegt sind.
Weitere Änderungen:
- In der ssh_config für ssh wurde die Einstellung EnableEscapeCommandline hinzugefügt, die die Aktivierung der Verarbeitung der Escape-Sequenz „~C“ auf der Clientseite steuert, die eine Befehlszeile bereitstellt. Standardmäßig ist die Verarbeitung von „~C“ nun deaktiviert, um eine strengere Sandbox-Isolation zu ermöglichen, was potenziell zu Problemen in Systemen führen kann, in denen „~C“ zur Portweiterleitung während des Betriebs verwendet wird.
- In der sshd_config für sshd wurde die Direktive ChannelTimeout hinzugefügt, um eine Timeout für die Inaktivität des Kanals festzulegen (Kanäle, in denen innerhalb der in der Direktive festgelegten Zeit kein Datenverkehr registriert wird, werden automatisch geschlossen). Für die Sitzung, X11, Agent und die Weiterleitung von Datenverkehr können unterschiedliche Timeouts festgelegt werden.
- In der sshd_config wurde die Direktive UnusedConnectionTimeout hinzugefügt, die es ermöglicht, einen Timeout für inaktiven Clientverbindungen festzulegen, die eine bestimmte Zeit ohne aktive Kanäle bleiben.
- In sshd wurde die Option „-V“ hinzugefügt, um die Version anzuzeigen, ähnlich wie bei der entsprechenden Option im ssh-Client.
- Im Ausgabe von „ssh -G“ wurde eine Zeile „Host“ hinzugefügt, die den Wert des Arguments für den Hostnamen widerspiegelt.
- In scp und sftp wurde die Option „-X“ hinzugefügt, um Parameter des SFTP-Protokolls wie die Größe des Transferpuffers und die Anzahl der wartenden Anfragen zu steuern.
- In ssh-keyscan ist das Scannen vollständiger CIDR-Adressbereiche möglich, z. B. „ssh-keyscan 192.168.0.0/24“.
Quelle: opennet.ru
