In Toxcore, der Referenzimplementierung des P2P-Nachrichtenprotokolls Tox, wurde eine Sicherheitsanfälligkeit (CVE-2021-44847) entdeckt, die potenziell die Ausführung von Code bei der Verarbeitung eines speziell gestalteten UDP-Pakets ermöglicht. Alle Benutzer von Anwendungen, die auf Toxcore basieren und bei denen der UDP-Transport nicht deaktiviert ist, sind von dieser Anfälligkeit betroffen. Für den Angriff genügt es, ein UDP-Paket zu senden, wobei die IP-Adresse, der Netzwerkport und der offene DHT-Schlüssel des Opfers bekannt sind (diese Informationen sind öffentlich im DHT verfügbar, d.h. der Angriff könnte gegen jeden Benutzer oder Knoten im DHT durchgeführt werden).
Das Problem trat in den Versionen toxcore von 0.1.9 bis 0.2.12 auf und wurde in Version 0.2.13 behoben. Von den Client-Anwendungen hat bisher nur das Projekt qTox ein Update zur Behebung der Sicherheitsanfälligkeit veröffentlicht. Als Workaround kann der Einsatz von UDP deaktiviert werden, während TCP unterstützt wird.
Die Sicherheitsanfälligkeit wird durch einen Pufferüberlauf in der Funktion handle_request() verursacht, der auf einer fehlerhaften Berechnung der Datenmenge im Netzwerkpaket beruht. Insbesondere wurde die Länge der verschlüsselten Daten im Makro CRYPTO_SIZE bestimmt, das als "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE" definiert war und später in der Subtraktionsoperation "length — CRYPTO_SIZE" verwendet wurde. Aufgrund des Fehlens von Klammern im Makro wurde anstelle der Subtraktion der Summe aller Werte die Subtraktion von 1 und die Addition der übrigen Teile ausgeführt. Anstatt "length — (1 + 32 * 2 + 24)" wurde die Puffergröße als "length — 1 + 32 * 2 + 24" berechnet, was zu einer Überschreibung von Daten auf dem Stack führte, die außerhalb des Puffers liegen.
Quelle: opennet.ru
