Aus Linux-Magazin 05/2022

Whatsapp-Attacken – Schwachstellen in der Kommunikationsbibliothek PJSIP

© Pornchai Jaito / 123RF.com

Mehrere Probleme mit dem Überlaufen von Speicherbereichen aufgrund von Programmierfehlern führen in der verbreiteten Kommunikationsbibliothek PJSIP zu Schwachstellen, die Angreifer ausnutzen können.

Die freie Multimedia-Kommunikationsbibliothek PJSIP [1] kommt in vielen verschiedenen Anwendungen zum Einsatz, unter anderem in Whatsapp, Bluejeans und der PBX-Software Asterisk. PJSIP unterstutzt dabei die Protokolle SIP, SDP, RTP, STUN, TURN und ICE. Die portable Bibliothek lässt sich unter den verschiedensten Betriebssystemen betreiben. Dazu zählen alle Windows-Versionen, Windows Mobile/CE bis zu WM 6, MacOS für PPC und Intel, Linux (mit allen Prozessortypen), zahlreiche Unix-Systemen, Symbian (3rd- und 5th-Edition-Geräte von Nokia), Apple iOS (iPhone, iPad, iPod), Blackberry 10 und Android. Dank des geringen Speicherverbrauchs der in C geschriebenen Bibliothek lassen sich einfache Voice-Call-Anwendungen schon mit nur 150 KByte Footprint realisieren.

Kürzlich gefundene Sicherheitslücken in der PJSIP-Bibliothek führen dazu, dass Angreifer Anwendungen der Bibliothek attackieren können. Die genauen Auswirkungen einer solchen Attacke hängen von der betroffenen Applikation ab. Insgesamt wurden fünf verschiedene Schwachstellen entdeckt [2]. Bei dreien handelt es sich um Stack-Overflow-Fehler, die ein Angreifer ausnutzen kann, um Befehle auszuführen. Bei einem solchen Programmierfehler wird eine Variable auf dem Stack über die Speichergrenzen hinaus beschrieben, was andere Speicherbereich des ausgeführten Programms korrumpiert. Unter Umständen kann ein Angreifer damit Befehle mit höheren Rechten auf dem System ausführen.

Die beiden anderen PJSIP-Schwachstellen sind weniger kritisch und erlauben Denial-of-Service-Attacken. Damit kann ein Angreifer die Anwendung lahmlegen. Die Stack-Überläufe treten in den drei Funktionen »pjsua_player_create«, »pjsua_recorder_create« und »pjsua_playlist_create« der PJSUA-API auf, die Teil der PJSIP-Bibliothek ist. Die PJSUA-API stellt verschiedene Funktionen für das Verarbeiten von Mediendateien zur Verfügung. Alle drei betroffenen Funktionen verarbeiten das an die Funktion übergebene »filename«-Argument nicht richtig, was den Stack-Überlauf auslöst. Um die Attacke ausnutzen zu können, muss die Anwendung die PJSIP-Bibliothek so verwenden, dass der Angreifer das »filename«-Argument direkt selbst manipulieren kann.

Bei den drei Stack-Überläufen handelt es sich um einfache Programmierfehler, die sich einfach korrigieren lassen. Listing 1 zeigt ein Beispiel aus der Funktion »pjsua_player_create«.

Listing 1

pjsua_player_create (Ausschnitt)

[...]
char path[PJ_MAXPATH];
[...]
pj_memcpy(path, filename->ptr, filename->slen); path[filename->slen] = '\0';
[...]

Die Funktion »pj_memcpy()« kopiert den Speicher an der Stelle »filename->ptr« in die Pfadvariable. Die Variable »filename->slen« gibt dabei die Länge des zu kopierenden Speicherbereichs an. In der Funktion wird aber zuvor nicht kontrolliert, ob die Pfadvariable hinreichend groß ist, um einen entsprechend großen Inhalt aufzunehmen. Der Speicher für den Pfad hat eine fest vorgegebene Länge von »PJ_MAXPATH«, was an anderer Stelle im Code der Bibliothek fest auf den Wert 260 eingestellt ist.

Ein Angreifer kann nun einen längere »filename«-Variable konstruieren und so einen Stack-Überlauf bei der Speicherkopie erzeugen. Das erlaubt ihm, den Programmablauf zu verändern und von ihm gewünschte Befehle auf dem System mit den Rechten der Anwendung ausführen.

Die Sicherheitslücke lässt sich vermeiden, indem vor dem Aufruf von »pj_memcpy()« die Länge der »filename«-Variablen kontrolliert wird. Dann kann es zu keinem Überlauf mehr kommen, und die Attacke misslingt. Die Stack-Überläufe in den beiden anderen Funktionen verlaufen nach einem ähnlichen Schema. Auch dort wird die »pj_memcpy()«-Funktion verwendet, um Speicherbereiche zu kopieren, und auch dort wird die Länge vor dem Kopiervorgang nicht kontrolliert.

Die Entwickler der Bibliothek haben die Sicherheitslücken in der Version PJSIP 2.12 bereits korrigiert. (jcb)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben