Tryption.ch

Pentesting & Consulting

Bruteforcing bei Swisscom’s Internet-Box 2 – Swisscom Scripts Teil 1

Mit über 2 Millionen Internetanschlüssen gehört Swisscom zu den grössten ISP’s der Schweiz. Da ich mehr über Swisscom’s Geräte herausfinden wollte und weil die Swisscom ein Bug-Bounty Projekt anbietet, habe ich mir die Internet-Box 2 genauer angesehen.

Bei den Tests, die ich durchgeführt habe, habe ich zwar keine akuten Sicherheitslücken gefunden, jedoch ein paar interessante Methoden, um Informationen auszulesen. Aus zweien (bzw. drei) dieser Methoden habe ich zwei Python-Skrypte geschrieben. Jedoch werde ich in naher Zukunft noch weitere (kompliziertere) Skripte schreiben. Alle diese Skripte liegen in dem Github-Repository und stehen frei zur Verfügung.

Kleiner Zwischenteil: Die Skripte sind zwar keine richtigen Exploits, da keine richtige Sicherheitslücke zugrunde liegt, jedoch muss trotzdem gesagt werden, dass die Benutzung auf EIGENE GEFAHR erfolgt. Bruteforcing in fremden Netzwerken ist Illegal. Zudem habe ich gemerkt, dass die bei der Anwendung des Bruteforcing Skripts manchmal die Internet-Verbindung gesperrt wird. Diese muss man dann über das Webinterface wieder anschalten.

Ich werde also pro Skript einen Artikel schreiben. Dieser hier ist der erste und handelt über das Bruteforcing-Script.

Das Bruteforcing-Skript

Ich empfinde Bruteforceangriffe zwar als ziemlich primitiv, jedoch geht es hier streng genommen nicht um Bruteforcing, sondern um die Umgehung einer Anmeldesperre bei zu vielen Fehlversuchen.

Die Anmeldemaske der Internet-Box 2

Die Internet-Box kommuniziert hauptsächlich durch XML und Json mit der Weboberfläche. Die Verschiedenen Daten werden durch eine HTTP-Anfrage angefragt. Einige der Funktionen benötigen eine Authentifizierung.

Ich weiss jedoch nicht, nach welchen Kriterien die Funktionen eingeordnet sind. Die Abfrage der Zeit benötigt eine Authentifizierung, während die Funktion zum Anzeigen aller verbundenen Geräte keine Authentifizierung benötigt.


Passwort Zurücksetzen bei der Internet-Box

Als ich die Weboberfläche untersucht habe, stach mir die Passwort zurücksetzen Funktion ins Auge. Diese Fragt nach dem aktuellen Passwort und nach jedem Tastenanschlag wird angezeigt, ob das Passwort richtig ist.

Nach jedem Tastenanschlag wird angezeigt, ob das Passwort richtig ist

Die Untersuchung des Traffics zeigt an, dass die dazu benutze Funktion eine Andere ist also die beim Login. Zudem benötigt diese Funktion keine Authentifizierung.

Der Request

Der abgefangene Request sieht wie folgt aus:

POST /sysbus/UserManagement:authenticate HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.1/
Content-Type: application/x-sah-ws-1-call+json
X-Requested-With: XMLHttpRequest
Content-Length: 81
Connection: close


{"parameters":{"name":"admin","password":"strenggeheimesdochtrotzdemschlechtespasswort","groups":["http","admin"]}}

Die Anfrage mit HTTP POST an den UserManagement-Teil des Sysbus, der eben solche Sachen verwaltet. Im Body befindet sich der Benutzername, das Passwort und die Benutzergruppe im Json Format.

Wenn das korrekte Passwort in diesem Request gesendet wird, sendet die Internet-Box eine Antwort mit dem Status True zurück. Wenn dies über das Webinterface geschieht, wird das mit einem Häkchen angezeigt.

Da jedoch bei jedem Tastenanschlag ein solcher Request gesendet wird, habe ich gedacht, dass wohl keine Beschränkung eingebaut sein kann und habe das auch ausprobiert.

Als ich gesehen habe, dass es klappt, habe ich ein Python-Skript geschrieben, das auf Github frei zur Verfügung steht.

Der Nutzen des Skripts

Nun fragt man sich, für was man das Skript gebrauchen kann. Ich denke, das Skript könnte man in Zukunft gelegentlich bei Sicherheitstests gebrauchen. Für den normalen Anwender ist das Skript wohl nur nützlich, wenn man seine Internet-Box eingemauert und das Passwort vergessen hat (könnte ja vorkommen). 

Fazit

Ich denke, diese „Lücke“ zeigt gut, dass alle Zugänge zu einer bestimmten Funktion zwingend gleich gut gesichert sein sollten. Hier sollte man zum Beispiel eine Authentifizierung erzwingen, da diese Funktion ja ohnehin nur über die Passwort zurücksetzen Funktion gebraucht wird.

Ich hoffe, euch hat mein kurzer Beitrag gefallen. Es ist mein erster richtiger Blogbeitrag also habt Verständnis. Um Rückmeldungen bin ich natürlich immer froh

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.