Open Source im professionellen Einsatz

Protokoll seziert

Die letzten Bytes ab Stelle »0x29« sind jeweils die Namen. Das Byte davor gibt deren Länge an. Ein Vergleich des Pakets mit den anderen Veränderungen ergibt, dass die zwei Bytes davor signalisieren, was geändert werden soll. Nun ist das Puzzle schon fast komplett.

Die Struktur des Switch-Protokolls sieht wie folgt aus: Zuerst kommt ein in der Länge konstanter Teil mit Typ und Flag sowie den MAC-Adressen von Sender und Empfänger. Nach dem Header folgt ab Stelle »0x20« eine beliebige Anzahl an Befehlen. Ein solcher Befehl besteht aus 2 Bytes: eines für den Befehlstyp sowie eines für die Länge der folgenden Daten. Danach kommen die Nutzdaten, der letzte Befehl hat immer den Wert »0xFFFF« , was das Ende signalisiert. Bei einer Query werden Daten vom Switch abgeholt und nicht gesendet, deshalb ist die Länge der Nutzdaten immer 0. Beim Transmit werden Daten im Switch geändert. Wie eine Passwortänderung aussieht, zeigt Listing 5.

Listing 5

Passwortänderung

01 Header
02 CMD=0x000a
03 Länge=12
04 Data=old_password
05 CMD=0x0009
06 Länge=12
07 Data=new_password
08 CMD=0xFFFF
09 Länge=0

Mit diesen Erkenntnissen konnte der Autor eine Python-Funktion schreiben, um Befehle an den Router zu schicken (Listing 6). Leider funktionierte das Skript nicht auf Anhieb wie gewünscht, die Passwortänderung schlug zunächst fehl. Sobald er jedoch die gleichen Zeichenketten für das alte und das neue Passwort wählte, funktionierte es plötzlich: Ein neues Passwort lässt sich ohne Kenntnis des alten setzen.

Listing 6

Befehl per Python schicken

01 def transmit(self, cmd_arr, mac):
02         ipadr = self.ip_from_mac(mac)
03         data = self.baseudp(destmac=mac, ctype=self.CTYPE_TRANSMIT_REQUEST)
04         for cmd, pdata in cmd_arr.items():
05                 data += self.addudp(cmd, pdata)
06         data += self.addudp(self.CMD_END)
07         self.send(ipadr, self.SENDPORT, data)
08         time.sleep(0.7)
09         self.recv()
10
11 # Der Funktion einen cmd_arr Hash übergeben:
12
13  cmd_arr={
14   CMD_PASSWORD:"old_password",
15   CMD_NEW_PASSWORD:"new_password"
16   }

Eine Analyse der Kommunikation mit Wireshark zeigt, warum das funktioniert: Hashes sind in Python nicht sortiert. Das Programm schickt rein zufällig zuerst das neue Passwort und dann das alte. Damit hatte der Entwickler des Switch wohl nicht gerechnet und erlaubte daher die Passwortänderung. Hier liegt eine handfeste Sicherheitslücke vor.

Gewissensfrage

Der Entdecker einer Schwäche hat mehrere Handlungsoptionen. Er kann die Lücke an Kriminelle verkaufen, um sich zu bereichern. Er kann den Befund auch sofort im Internet publizieren. Damit wären alle Switches des Herstellers potenziell angreifbar und Netgear müsste reagieren. Freundlicher ist es, sich zunächst beim Hersteller zu melden.

Der Autor entschied sich für die zuletzt genannte Option: Am Pfingstmontag 2012 schickte er eine E-Mail an Netgear Deutschland. Danach passierte erst einmal gar nichts. Am Donnerstag beschloss er, ein Fax an den Hersteller zu schicken. Als auch das keine Reaktion hervorrief, versuchte er sein Glück bei der Telefonhotline, die allerdings die Seriennummer des Switch haben wollte. Die wollte der Verfasser Netgear aber nicht anvertrauen, weil sie als Standardpasswort dient, um sich bei Verlust des Passworts in das Gerät einzuloggen [6].

Also meldete er sich zähneknirschend auf der Webseite von Netgear an, denn dort brauchen Kunden für eine Anfrage zunächst keine Seriennummer, und verlangte dort einen persönlichen Ansprechpartner. Dem schickte er einen Mitschnitt der Pakete, eine Erklärung und ein Beispielskript. Der Ansprechpartner konnte aber auch 20 Tage später nicht beantworten, ob der Hersteller das Problem rekonstruiert habe. Stattdessen fragte auch dieser jetzt nach der Seriennummer des Geräts – und schloss das Ticket, als er keine erhielt.

Schließlich wandte sich der Autor an das Linux-Magazin, schilderte den Fall, legte die E-Mails vor und gab so den Anstoß zu diesem Artikel. Die Redaktion fragte über die Presseagentur bei Netgear an, ob die Meldung der Sicherheitslücke eingegangen sei. Der Hersteller antwortete, das Problem in der Firmwareversion 1.0.6 sei bekannt. Netgear möchte die Sicherheitslücke mit einem künftigen Update schließen. Bei Redaktionsschluss lag jedoch keine aktualisierte Firmware vor.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook