Die Veröffentlichung von OpenSSH 9.2, einer Open-Source-Implementierung eines Clients und Servers für die Protokolle SSH 2.0 und SFTP, wurde bekannt gegeben. In der neuen Version wurde eine Schwachstelle behoben, die zu einer doppelten Freigabe des Speichers vor der Authentifizierung führt. Nur die Version OpenSSH 9.1 ist von dieser Schwachstelle betroffen, in früheren Versionen tritt das Problem nicht auf.
Um die Bedingungen für das Auftreten der Schwachstelle zu schaffen, reicht es aus, das Banner des SSH-Clients auf "SSH-2.0-FuTTYSH_9.1p1" zu ändern, um die Flags "SSH_BUG_CURVE25519PAD" und "SSH_OLD_DHGEX" zu aktivieren, 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 in der Funktion do_ssh2_kex(), die compat_kex_proposal() aufruft, und dann in der Funktion do_authentication2(), die über die Kette input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() und kex_assemble_names() aufgerufen wird.
Die Erstellung eines funktionierenden Exploits für die Schwachstelle gilt als unwahrscheinlich, da der Exploit-Prozess zu kompliziert ist – moderne Bibliotheken zur Speicherverwaltung bieten Schutz vor doppelter Speicherfreigabe, und der Pre-Auth-Prozess, in dem der Fehler auftritt, erfolgt mit verminderten Rechten in einer isolierten Sandbox-Umgebung.
Neben der genannten 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 einer Berechtigung übersprungen wird.
- Ein Angreifer, der den DNS-Server kontrolliert, der für die Namensauflösung verwendet wird, kann erreichen, dass spezielle Zeichen (z. B. "*") in die Dateien known_hosts eingefügt werden, wenn in der Konfiguration die Optionen CanonicalizeHostname und CanonicalizePermittedCNAMEs aktiviert sind und der Systemresolver die Richtigkeit der Antworten vom DNS-Server nicht überprüft. Ein Angriff wird als unwahrscheinlich angesehen, da die zurückgegebenen Namen den durch CanonicalizePermittedCNAMEs festgelegten Bedingungen entsprechen müssen.
Weitere Änderungen:
- In der ssh_config wurde die Einstellung EnableEscapeCommandline hinzugefügt, die die Verarbeitung der Escape-Sequenz „~C“ steuert, die eine Kommandozeile bereitstellt. Standardmäßig ist die Verarbeitung von „~C“ nun deaktiviert, um eine strengere Sandbox-Isolation zu verwenden, was potenziell zu Störungen bei Systemen führen kann, in denen „~C“ zur Portweiterleitung während des Betriebs verwendet wird.
- In der sshd_config wurde die Direktive ChannelTimeout hinzugefügt, um einen Timeout für die Inaktivität des Kanals festzulegen (Kanäle, in denen innerhalb der in der Direktive angegebenen Zeit kein Verkehr aufgezeichnet wird, werden automatisch geschlossen). Für Sitzungen, X11, Agenten 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 den Abschluss von Clientverbindungen festzulegen, die eine bestimmte Zeit lang keine aktiven Kanäle haben.
- In sshd wurde die Option „-V“ hinzugefügt, um die Version auszugeben, аналогisch к аналогичной Option im ssh-Client.
- In die Ausgabe von „ssh -G“ wurde die Zeile „Host“ hinzugefügt, die den Wert des Arguments mit dem Hostnamen widerspiegelt.
- In scp und sftp wurde die Option „-X“ hinzugefügt, um Parameter des SFTP-Protokolls wie die Größe des Kopierpuffers und die Anzahl der wartenden Anfragen zu steuern.
- In ssh-keyscan wurde das Scannen vollständiger CIDR-Bereiche von Adressen erlaubt, z.B. „ssh-keyscan 192.168.0.0/24“.
Quelle: opennet.ru
