In der gelieferten Linux-Kernel-Implementierung des Netzwerkprotokolls TIPC (Transparent Inter-process Communication) wurde eine kritische Sicherheitsanfälligkeit (CVE-2021-43267) entdeckt, die es ermöglicht, durch das Senden eines speziell gestalteten Netzwerkpakets Code mit Kernel-Privilegien remote auszuführen. Die Gefahr wird gemildert, da für einen Angriff die explizite Aktivierung der TIPC-Unterstützung im System erforderlich ist (Laden und Konfigurieren des Kernelmoduls tipc.ko), was in nicht spezialisierten Linux-Distributionen standardmäßig nicht erfolgt.
Das TIPC-Protokoll wird seit Kernel 3.19 unterstützt, jedoch wurde der zur Sicherheitsanfälligkeit führende Code in Kernel 5.10 eingeführt. Die Sicherheitsanfälligkeit wurde in den Versionen 5.15.0, 5.10.77 und 5.14.16 behoben. Das Problem tritt nach wie vor in Debian 11, Ubuntu 21.04/21.10, SUSE (in der noch nicht veröffentlichten Version SLE15-SP4), RHEL (es wird derzeit nicht spezifiziert, ob das anfällige Patch zurückportiert wurde) und Fedora auf. Ein Kernel-Update wurde bereits für Arch Linux veröffentlicht. Distributionen mit einem Kernel älter als 5.10, wie Debian 10 und Ubuntu 20.04, sind nicht betroffen.
Das TIPC-Protokoll wurde ursprünglich von Ericsson entwickelt und dient der Organisation der interprozessualen Kommunikation in einem Cluster. Es wird hauptsächlich an Knoten innerhalb von Clustern aktiviert. TIPC kann sowohl über Ethernet als auch über UDP (Netzwerkport 6118) betrieben werden. Wenn es über Ethernet läuft, kann ein Angriff aus dem lokalen Netzwerk erfolgen, während bei der Nutzung von UDP Angriffe aus dem globalen Netzwerk möglich sind, sofern der Port nicht durch eine Firewall geschützt ist. Auch ein nicht privilegierter lokaler Benutzer des Hosts kann einen Angriff durchführen. Für die Aktivierung von TIPC ist das Laden des Kernelmoduls tipc.ko sowie die Konfiguration der Bindung an das Netzwerkinterface mithilfe von netlink oder dem Dienstprogramm tipc erforderlich.
Die Schwachstelle tritt in der Funktion tipc_crypto_key_rc auf und wird durch das Fehlen einer ordnungsgemäßen Überprüfung der Übereinstimmung zwischen der im Header angegebenen Größe und der tatsächlichen Datengröße beim Parsen von Paketen des Typs MSG_CRYPTO verursacht, die verwendet werden, um Verschlüsselungsschlüssel von anderen Knoten im Cluster zu erhalten, um anschließend Nachrichten, die von diesen Knoten gesendet werden, zu entschlüsseln. Die Größe der in den Speicher kopierten Daten wird als Differenz zwischen den Werten der Felder für die Nachrichten- und Headergröße berechnet, jedoch ohne die tatsächliche Größe des im Nachrichtennamen angegebenen Verschlüsselungsalgorithmus und des Schlüsselinhalts zu berücksichtigen. Es wird davon ausgegangen, dass die Größe des Algorithmusnamens festgelegt ist, während für den Schlüssel zusätzlich ein separates Attribut mit der Größe übergeben wird, und der Angreifer kann in diesem Attribut einen Wert angeben, der von dem tatsächlichen abweicht, was dazu führt, dass das Ende der Nachricht über den zugewiesenen Puffer hinaus geschrieben wird. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; /* in bytes */ char key[]; };

Quelle: opennet.ru
