SQL Injection-Schwachstelle in FireEye EX (SYSS-2021-005)

Ein Security Advisory von IT Security Consultant Dr. Benjamin Heß

Übersicht

FireEye EX ist eine Appliance, die zur Detektierung und zum Blocken unerwünschter E-Mails verwendet wird. Die Steuerung der Applicance erfolgt dabei primär über ein Webinterface.

Es wurde festgestellt, dass vom Benutzer kontrollierte Eingaben an mehreren Stellen nicht von der Webanwendung validiert werden. Dadurch lassen sich Datenbankabfragen einschleusen ("SQL Injections") und somit Zugriff auf Daten der Datenbank erlangen.

Um die Schwachstelle ausnutzen zu können, wird autorisierter Zugriff auf die Applikation benötigt. Dabei sind geringe Privilegien ausreichend. Berücksichtigt man diese Anforderung und außerdem, dass derartige Appliances üblicherweise in separaten Netzwerkzonen mit beschränktem Zugriff angesiedelt sind, lässt sich das Risiko als "gering" einstufen.

Details

Die Verwundbarkeit tritt auf, wenn man sich am Webinterface anmeldet und die verarbeiteten E-Mails durchsucht. Die Schwachstelle konnte dabei mit der Benutzerrolle "monitor" erfolgreich ausgenutzt werden. Weitere Rollen sind tendenziell ebenfalls hierfür möglich.

Die Suchanfrage ist über den Parameter "sort_by" mittels SQL Injection angreifbar. Bei der Injection handelt es sich um einen sogenannten "Boolean-based Blind"-Angriff, alternativ ist auch eine "Time-based Blind Injection" möglich. Auf beide Weisen lassen sich so Daten aus der Datenbank extrahieren, auf die über das Webinterface kein Zugriff besteht.

Das zugrunde liegende Datenbankmanagementsystem ist Postqres und die Anfragen an die Datenbank über das Webinterface werden als Datenbankbenutzer "postgres" ausgeführt. Dieser Nutzer ist ein Datenbank-Admin, sodass uneingeschränkter (Lese-)Zugriff möglich ist. Weiterhin war es im Testzeitraum nicht möglich, sogenannte "Stacked Queries" auszuführen, was weitere Zugriffswege, wie etwa Schreibzugriff, ermöglicht hätte.

Proof of Concept (PoC)

Konkret lässt sich die Verwundbarkeit durch den Aufruf folgender URL im Browser auslösen, sofern man sich vorher mit geeigneter Rolle, etwa "monitor", angemeldet hat:

https://targethost.com/ex/message_tracking/messages?search%5Burl%5D=%25&search%5Battachment%5D=&sort_by=<payload>

Die Zeichenkette "<payload>" wird dabei durch die folgende, noch zu URL-codierende Zeichenkette ersetzt:
(SELECT (CASE WHEN (<Bedingung>) THEN 1 ELSE (SELECT 2525 UNION SELECT 7139) END))

Die Zeichenkette "<Bedingung>" wird nun durch eine geeignete "Ja-Nein-Abfrage" ersetzt. Ergibt diese Abfrage "Ja", so liefert der Server den Statuscode "200" zurück. Ergibt sie "Nein", wird stattdessen der Statuscode "500" zurückgegeben.

Lösung

Der Hersteller FireEye hat nach eigener Aussage diese Schwachstelle in Version 9.0.3 behoben. Es wird daher empfohlen, falls nötig ein Update auf diese oder eine spätere Version durchzuführen.

 

Detaillierte Informationen zu dieser gefundenen Schwachstelle finden Sie in unserem Security Advisory / You will find detailed information about these security issues in our Security Advisory:

Weitere Informationen über unsere Responsible Disclosure Policy bei der Veröffentlichung von Security Advisories finden Sie hier.

You will find further information about our Responsible Disclosure Policy concerning the publishing process of SySS Security Advisories here.

Ihr direkter Kontakt zu SySS +49 (0)7071 - 40 78 56-0 oder anfrage@syss.de | IN DRINGENDEN FÄLLEN AUSSERHALB DER GESCHÄFTSZEITEN +49 (0)7071 - 40 78 56-99

Als Rahmenvertragskunde wählen Sie bitte die bereitgestellte Rufbereitschaftsnummer

Ihr direkter Kontakt zu SySS +49 (0)7071 - 40 78 56-0 oder anfrage@syss.de

IN DRINGENDEN FÄLLEN AUSSERHALB DER GESCHÄFTSZEITEN +49 (0)7071 - 40 78 56-99

Als Rahmenvertragskunde wählen Sie bitte die bereitgestellte Rufbereitschaftsnummer

Direkter Kontakt

+49 (0)7071 - 40 78 56-0 oder anfrage@syss.de

IN DRINGENDEN FÄLLEN AUSSERHALB DER GESCHÄFTSZEITEN

+49 (0)7071 - 40 78 56-99

Als Rahmenvertragskunde wählen Sie bitte die bereitgestellte Rufbereitschaftsnummer