FortiMail Unauthenticated Login Bypass

Jul 2, 2020 von Jürg Schweingruber, Patrick Schmid

Während Attack Simulation Projekten, in denen wir einen gezielten Cyber-Angriff für unsere Kunden simulieren, treffen unsere Security Tester immer wieder auf bekannte aber auch bis dato unbekannte Sicherheitslücken. Während einer kürzlich durchgeführten Attack Simulation identifizierten unsere Security Tester eine extern erreichbare FortiMail-Appliance. Dieses Produkt von Fortinet dient zur Absicherung des Mailverkehrs eines Unternehmens und ist daher von grösster Bedeutung. Während der weiteren Analyse der Appliance stiessen die Tester bei ihren Recherchen auf ein erst vor kurzem veröffentlichtes Advisory CVE-2020-9294, dessen Beschreibung, besonders im Rahmen einer Attack Simulation, zwar überaus spannend klingt, leider aber keine Detailinformationen zur eigentlichen Schwachstelle beinhaltet.

An improper authentication vulnerability in FortiMail 5.4.10, 6.0.7, 6.2.2 and earlier and FortiVoiceEntreprise 6.0.0 and 6.0.1 may allow a remote unauthenticated attacker to access the system as a legitimate user by requesting a password change via the user interface.

Auch das zugehörige Advisory von Fortinet / FortiGuard Labs selbst (FG-IR-20-045) gab nicht viel mehr Informationen darüber her, wo die Schwachstelle zu finden ist oder wie diese auszunutzen wäre. Auch das restliche Internet lieferte nicht mehr als ein paar Screenshots aus einem angeblich russischen Cybercrime-Forum, wo der Exploit verkauft wird oder wurde.

Trotzdem liess uns die sehr einfach klingende Beschreibung der Schwachstelle und das damit verbundene Potential eines solchen Zugriffes nicht los. Daher schauten wir uns die Appliance und insbesondere deren Authentifizierung genauer an. Auf den ersten Blick auffällig war, dass, entgegen unseren Erwartungen basierend auf dem Advisory, eine Funktion oder ein Link, um das Passwort zurückzusetzen, zu fehlen schien:



FortiMail Login-Maske

Also schauten wir uns den HTML-Code der Login-Maske genauer an und stiessen auf zwei versteckte Passwort-Eingabefelder, welche uns etwas suspekt vorkamen:



FortiMail HTML-Code der Login-Maske

In einem nächsten Schritt überschrieben wir mit den Entwicklertools des Browsers die entsprechenden Display-Instruktionen im DOM und blendeten somit die Eingabefelder ein:



FortiMail Login-Maske mit eingeblendeten Eingabefeldern

In diesem Moment realisierten wir, dass die nun angezeigten Eingabefelder der Beschreibung im oben erwähnten Advisory entsprachen:

… may allow a remote unauthenticated attacker to access the system as a legitimate user by requesting a password change via the user interface.

Etwas ungläubig fragten wir uns: “Kann es wirklich so einfach sein?”

Ohne wirklich an den Erfolg des nun folgenden Versuchs zu glauben, trugen wir dennoch einfach den Benutzernamen admin sowie zweimal ein neues Passwort in die entsprechenden Eingabefelder ein. Das Eingabefeld für das alte, uns unbekannte Passwort liessen wir leer und schickten das Formular mit einem Klick auf Log In ab - und trauten unseren eigenen Augen kaum:



FortiMail Admin-Dashboard

Auch ohne die Eingabe des alten Passworts akzeptierte die FortiMail-Appliance unsere Anfrage nicht nur, sondern leitete uns direkt als Admin-Benutzer auf die Administrationsoberfläche weiter. Allem Anschein nach erhielten wir durch unseren Aufruf eine gültige Session als admin und konnten damit auf die gesamte Appliance mit höchsten Rechten zugreifen.

Nachfolgender JavaScript-Code reicht zur Ausnutzung der Schwachstelle - also als Exploit - bereits aus:

1
2
3
4
document.getElementById("aname").value = "admin"
document.getElementById("newpass").value = "YourSuperSecurePassword!"
document.getElementById("newpass2").value = document.getElementById("newpass").value
doAdminLogin();

Dies bedeutete, dass wir nicht nur Admin-Rechte auf einem System in der DMZ des Kunden besassen, sondern auch gleich noch den zentralen Punkt kontrollierten, an dem die gesamte Email-Kommunikation des Kunden mit der Aussenwelt zusammenfliesst und kontrolliert sowie gesteuert werden kann. Dies sind beste Voraussetzungen für einen Angreifer beziehungsweise eine Attack Simulation. So könnten zum Beispiel ein- und ausgehende Nachrichten nach bestimmten Informationen durchsucht und umgeleitet werden oder aber die “First Line of Defence” gegen Phishing und schädliche Anhänge so umkonfiguriert werden, dass ein Spearphishing ohne Hindernisse an die passenden Empfänger zugestellt werden kann.

Zusätzlich interessant war, dass unsere Session offenbar nicht als gültiger Login erkannt und somit der auf der Startseite angezeigte Counter der aktuell eingeloggten Admins nicht erhöht wurde. Dadurch war auch das Risiko, entdeckt zu werden, entsprechend gering. Trotzdem informierten wir unseren Auftraggeber natürlich umgehend über die Schwachstelle, damit das Admin-Interface vom Netz und insbesondere Internet genommen und zeitnah ein Update eingespielt werden konnte, bevor ein echter Angreifer die Schwachstelle ebenfalls entdeckt und aktiv ausnutzt.

Gleichzeitig meldeten wir uns auch beim Product Security Incident Response Team (PSIRT) von FortiGuard Labs und forderten eine Bestätigung an, dass es sich bei der von uns identifizierten und ausgenutzten Schwachstelle um dieselbe handelt, welche bereits im Advisory beschrieben wurde (CVE-2020-9294 bzw. FG-IR-20-045). Innert weniger als einer Stunde erhielten wir die Bestätigung, dass es sich bei der gefundenen Schwachstelle tatsächlich um die bereits bekannte handelt und diese durch ein Update auf eine Version höher als 5.4.10, 6.0.7 oder 6.2.2 behoben wird, was wir im Zuge unserer Analysen auch so bestätigen konnten.

Zur Überprüfung, ob die Schwachstelle auf einem System vorhanden ist, haben wir zusätzlich ein entsprechendes Metasploit Scanning Modul veröffentlicht (FortiMail Unauthenticated Login Bypass Scanner).

Disclaimer: Da entsprechende Patches verfügbar sind und das Advisory ohne Detailinformationen bereits am 27. April 2020 veröffentlicht wurde, entschieden wir uns, die detaillierte Ausnutzung in diesem Blog-Beitrag zu beschreiben. Die Redguard AG übernimmt keinerlei Haftung für die missbräuchliche und somit illegale Nutzung der hier veröffentlichten Informationen.


< zurück