Fortinet hatte die Korrekturen vergangene Woche bereitgestellt. Betroffen ist laut Hersteller FortiSIEM 7.5.0, Anwender sollen auf 7.5.1 oder höher aktualisieren. FortiSIEM 7.6 ist nicht betroffen.

Nach der Analyse von Horizon3.ai verbindet sich ein Angreifer ohne Anmeldung mit dem gRPC-Dienst, der auf TCP-Port 27918 lauscht. Über die Lücke lässt sich eine bestehende Datei außerhalb des vorgesehenen Verzeichnisses überschreiben – aus dem beliebigen Dateischreibzugriff wird so Remote Code Execution.

“Der FortiSIEM-gRPC-Handler QueryResultReq verarbeitet nicht vertrauenswürdige Metadaten ohne ordnungsgemäße Pfadprüfung”, erklärte Horizon3.ai. “Durch das Erstellen von Metadaten, die sowohl Path-Traversal-Sequenzen (../) als auch NUL-Byte-Injektion innerhalb der HTTP/2- und HPACK-Kodierungsschichten von gRPC enthalten, kann ein Angreifer beliebige Dateien in das Dateisystem schreiben.”

Ursache ist eine unsichere Pfadkonstruktion in der Funktion SendQueryResult(), die den vom Nutzer übergebenen Parameter “query-id” ohne ausreichende Validierung direkt weiterreicht. Mit Sequenzen wie “../” kann ein Angreifer damit aus dem vorgesehenen Verzeichnis ausbrechen. Allerdings lässt sich auf diesem Weg nur das Zielverzeichnis bestimmen, nicht der Dateiname: Das Programm hängt selbsttätig den Namen “result--0-0-<id>.dat” an, wobei <id> ein vom Server kontrollierter Zählerwert ist.

An dieser Stelle kommt eine zweite Schwäche ins Spiel. In den Parameter “query-id” lässt sich ein Nullbyte ("\0") einbetten, das vom Betriebssystem als Zeichenkettenende interpretiert wird – alles danach wird verworfen. Der angehängte Dateinamen-Suffix wird dadurch ignoriert, sobald der Pfad an die Funktion zum Öffnen der Datei übergeben wird.

Ein Angreifer kann den Wert von “query-id” so konstruieren, dass unmittelbar vor dem Nullbyte der zu überschreibende Dateiname steht, etwa “../../../../../opt/charting/redishb.sh\0…”. Bei dieser Datei handelt es sich um ein Shell-Skript, das Zustandsprüfungen für den Redis-Dienst durchführt und per Cron-Job alle 60 Sekunden ausgeführt wird.

“Der Schreibvorgang landet exakt auf dem Pfad, der dem Nullbyte vorangeht”, sagte Zach Hanley, Chief Attack Engineer bei Horizon3.ai. “Zeigt er auf eine vorhandene Datei, wird diese an Ort und Stelle überschrieben, wobei ursprünglicher Eigentümer und Berechtigungen erhalten bleiben; eine zweite Variante erzeugt mit zwei Anfragen eine völlig neue Datei mit exakt dem gewünschten Namen.”