Open Source im professionellen Einsatz

LibOTR-Bibliothek: Entfernter Angreifer kann Befehle ausführen

 Das Off-the-Record (OTR) Messaging-Verfahren wird von Instant Messaging Clients wie Pidgin zur Verschlüsselung von Nachrichten eingesetzt. Die Libotr-Bibliothek implementiert dieses Verfahren in einer C-Bibliothek. In genau dieser Bibliothek wurde nun ein Buffer-Overflow-Fehler gefunden, der es einem entfernten Angreifer erlaubt Befehle mit den Rechten des Anwenders aszuführen.
Das Problem tritt beim Verarbeiten sehr grosser Nachrichten auf. Hierbei kann es dann zu einem Integer Overflow kommen, der dann auch einen Buffer Overflow nach sich zieht. Der folgende Code wird beim Empfang der Nachricht ausgeführt (message.c-Datei):

case OTRL_MSGSTATE_ENCRYPTED:
      extrakey = gcry_malloc_secure(OTRL_EXTRAKEY_BYTES);
      err = otrl_proto_accept_data(&plaintext, &tlvs, context, message, &flags, extrakey);

Die otrl_proto_accept_data()-Funktion liest unter anderem die Länge der Nachrichten und speichert diese in eine unsigned int Variable namens datalen. Später wird dann ein Puffer für die eigentlichen Daten der Nachricht alloziert (proto.c-Datei):

data = malloc(datalen+1);
if (!data) {
    err = gcry_error(GPG_ERR_ENOMEM);
    goto err;

Die malloc()-Funktion wird hierbei mit datalen+1 aufgerufen, wodurch es zu dem Integer Overflow kommen kann. Wird nämlich für die Datenlänge der Wert 0xFFFFFFFF (MAX_UINT) spezifiziert, so ergibt datalen+1 Null, so dass malloc(0) aufgerufen wird. Unter 64-Bit-Architekturen ist dies ein gültiger Aufruf, der allerdings keinen Speicher bereitstellt. Anschliessend werden dann die kompletten Nachrichtendaten in diesen nicht-allozierten Speicher geschrieben, womit es zu dem Buffer Overflow kommt, den der Angreifer zum Ausführen von Befehlen ausnutzen kann.

Betroffen sind die Versionen 4.1.0 und älter.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.