Bufferüberlauf in Toxcore, ausgenutzt durch das Senden von UDP-Paketen

In Toxcore, der Referenzimplementierung des P2P-Nachrichtenprotokolls Tox, wurde eine Schwachstelle (CVE-2021-44847) entdeckt, die potenziell die Ausführung von Code durch die Verarbeitung eines speziell gestalteten UDP-Pakets ermöglichen kann. Alle Benutzer von Anwendungen, die auf Toxcore basieren und bei denen der UDP-Transport nicht deaktiviert ist, sind anfällig für diese Schwachstelle. Für einen Angriff reicht es aus, ein UDP-Paket zu senden, sofern die IP-Adresse, der Netzwerkport und der öffentliche DHT-Schlüssel des Opfers bekannt sind (diese Informationen sind öffentlich im DHT verfügbar, d.h. der Angriff konnte 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 der Version 0.2.13 behoben. Bislang hat nur das Projekt qTox ein Update zur Behebung der Schwachstelle für Client-Anwendungen veröffentlicht. Als workaround zum Schutz kann die Verwendung von UDP deaktiviert werden, während TCP unterstützt bleibt.

Die Schwachstelle wurde durch einen Bufferüberlauf in der Funktion handle_request() verursacht, der auf einer fehlerhaften Berechnung der Datenlänge im Netzwerkpaket beruht. Insbesondere wurde die Länge der verschlüsselten Daten durch das Makro CRYPTO_SIZE bestimmt, das als „1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE“ definiert war und anschließend in der Subtraktionsoperation „length — CRYPTO_SIZE“ verwendet wurde. Aufgrund des Fehlens von Klammern im Makro wurde anstelle der Subtraktion der Summe aller Werte eine Subtraktion von 1 und die Addition der anderen Teile durchgeführt. Beispielsweise wurde anstelle von „length — (1 + 32 * 2 + 24)“ die Buffergröße als „length — 1 + 32 * 2 + 24“ berechnet, was zu einer Überschreibung von Daten im Stack führte, die sich außerhalb des Buffers befanden.

Quelle: opennet.ru

60GB SSD 8Gb DDR4