TekBASE CMS und die Sache mit den SQL-Injections

Die Firma TekLab vermarktet seit über 15 Jahren ein Shopsystem für Webhoster. Dieses Shopsystem trägt den Namen TekBASE und bietet unterschiedlichste Funktionen zur Verwaltung von Kundendaten, Gameserver, Webspaces, Voiceserver etc. Es bietet ähnliche Funktionen wie WHMCS, so dass auch Kunden hierüber ihre erworbenen Produkte verwalten können. Laut Anbieter gibt es Weltweit über 44.000 Installationen. Geschrieben wurde TekBASE in PHP. Ausgeliefert wird allerdings nur eine mit IonCube kodierte Version der Software, so dass der Quellcode per se nicht lesbar ist. Scheinbar aus gutem Grund.

Von der IDOR zur SQL-Inection

Die Story beginnt im März 2020, nachdem eine unbekannte Gruppe von Hackern die Webseite eines Hosting-Anbieters untersuchten. Auch dort kam TekBASE zum Einsatz. Schnell fand man heraus, dass es mehrere Insecure Direct Object References (IDOR) im Admin-Panel gab, welche auch ohne Authentifizierung ausnutzbar waren.

admin.php?op=adminMemberinfo&mid={userId}

Diese URL erlaubt bspw. das Abrufen von Kundendaten. Der Parameter mid ist die Kundennummer aka Member-ID. Diese Nummer wird fortlaufend vergeben (beginnend bei 1) und kann daher iteriert werden, wodurch das Abrufen aller Kundendaten möglich wäre.

Das ist eigentlich schon schlimm genug. Noch schlimmer wirds jedoch wenn man ein ' an die mid anhängt.

Eine klassische SQL-Injection mit Output und ohne Authentifizierung, welche wahrscheinlich tausende TekBASE-Installationen betraf. Nachdem TekLab die Sicherheitslücke zur Kenntnis nahm, rollte man kurzerhand einen Patch mit der Versionsummer 8.6.14 aus. Dieser Patch hat jedoch bis heute viele Installationen aufgrund einer mangelhaften Informationspolitik nicht erreicht.

Ein Changelog zur Version 8.6.14 findet man unter http://teklab.s3.amazonaws.com/updates/8614.inf.
Die Informationen aus der INF-Datei werden im Admin-Panel angezeigt, sofern man noch eine ältere Version betreibt. Darin heißt es:

Achtung: TekBASE 8.6.14 (PHP 7.1+) ist für alle Nutzer der TekBASE 8.X Versionen.
Falls noch PHP 5.6 oder 7.0 verwendet wird bitte via Email bei uns melden.

Die Sicherheitslücke blieb unerwähnt.

Fragwürdiger Patch

Nachdem ich eine Möglichkeit fand den IonCube-Bytecode zu „dekompilieren“, suchte ich im Sourcecode nach weiteren Sicherheitslücken. Sehr spannend fand ich die Tatsache, dass die oben genannte SQL-Injection-Lücke nicht wirklich behoben wurde, wie man im folgenden sieht:

Man hatte lediglich eine Berechtigungsprüfung eingebaut, so dass der Endpunkt nicht mehr unangemeldet Aufrufbar ist. Der URL-Parameter mid wird weiterhin ungefiltert in das SQL-Query eingearbeitet, wodurch die SQL-Injection nur noch von Admins ausnutzbar ist.

Überall SQL-Injections

Ein Blick in den restlichen Sourcecode machte das Desaster leider nicht besser. Auf die XSS-Lücken, welche hier eigentlich uninteressant sind, werde ich nicht näher eingehen. Gleiches gilt für diverse Local File Inclusions (LFIs).

Die Passwort-Reset-Funktion, mal wieder…

Da wird man ja bekanntlich oft fündig. Hier auch direkt mit einer weiteren SQL-Injection. Zuerst einen Blick in den Sourcecode:

Wenn man genau hinsieht, sieht man dass die Variable $check einmal über die Funktion check_html() gefiltert wird. Diese Filterung kodiert jedoch nur HTML-spezifische Zeichen wie < und >. Einfache Anführungszeichen werden nicht unschädlich gemacht.

Mal wieder bekommt man die Meldung:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ef'' at line 1

Nachdem ich diese Lücke am 31.07.2020 an TekLab meldete, wurde diese im Patch mit der Versionsnummer 8.6.15 wenige Tage später behoben. Im folgenden ein Test auf der Herstellerseite, welche ebenfalls mit TekBASE betrieben wird.

In der Update-Info https://teklab.s3.amazonaws.com/updates/8615.inf heißt es:

Achtung: TekBASE 8.6.15 (PHP 7.1+) ist für alle Nutzer der TekBASE 8.X Versionen.

Auch die Statusseite hat „Schwierigkeiten“

Die nächste erwähnenswerte SQL-Injection fand ich in der frei zugänglichen status.php. Diese soll angeblich Informationen über die eingebundenen Server geben.

Die Variable $ids ist auch hier völlig ungefiltert mit einem SQL-Query verdrahtet.

TekBASE als CMS für einen Blog?

Vielleicht sollte man TekBASE lieber nur als Blogging-System mit der bereits vorinstallierten Blog-Erweiterung nutzen. Da kann ja nicht viel schief gehen. Oder?

Wohl lieber nicht.

Auch über diese Lücken wurde der Hersteller am 09.08.2020 informiert.

Warum ist alles so unsicher?

TekBASE ist eine Software, die es laut Herstellerangaben schon seit mehr als 15 Jahren gibt. Seit dem wurde die Software scheinbar nie generalüberholt sondern „nur“ mit neuen Funktionen erweitert. Wie man sich vor SQL-Injections schützen kann, war zwar eigentlich bereits vor 15 Jahren kein Geheimnis mehr, dennoch sah man scheinbar nie Relevanz die „best practices“ in dem Bereich Folge zu leisten. Daraus ergibt sich, dass alle SQL-Queries hart zusammengeklebt werden und nicht immer eine Filterung durch das Hinzufügen von Backslashes erfolgt. Parameter-Bindings sucht man hier vergeblich.

Was ermöglichen SQL-Injections?

Durch die gezielte Ausführung von SQL-Abfragen durch Injections können alle Daten der Datenbank abgerufen werden. Da in der TekBASE-Datenbank personenbezogene Daten sowie Zugangsdaten gespeichert werden, gestalten sich die Lücken als besonders gravierend.

Fazit

Es stört mich nicht, dass TekBASE ein unterirdisch unsicher programmiertes System ist, sondern viel mehr die Tatsache, dass es scheinbar viele Kunden gibt, die in dieses System vertrauen und nichts von den Ganzen Sicherheitsproblemen wissen.

Es wäre die Aufgabe von TekLab alle Kunden darüber zu informieren und entsprechende Updates zielsicher auszuliefern.

Nachtrag vom 08.10.2020: Nach Veröffentlichung dieses Blogbeitrags hat TekLab am 06.10.2020 reagiert und ein weiteres Update ausgerollt. In der aktuellen Update-Mitteilung wird auf die bestehenden Sicherheitsprobleme hingewiesen und ein Update dringend empfohlen.

Kommentare

  1. In dem Beitrag fehlt ein Hinweis zur Kommunikation zu Teklab.

    Gab es ein Bug-Bounty?

    Wie verlief die Kommunikation?

    Ansonsten höchst spannender Beitrag. Gute & saubere Arbeit.

Schreibe einen Kommentar

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