SquirrelMail ist ein in PHP geschriebenes Webmailfrontend, das die PHP IMAP- und SMTP-Funktionen zum Empfang und Versand von E-Mails nutzt. Eine Sicherheitslücke in SquirrelMail hat nun zur Folge, dass ein entfernter, angemeldeter Angreifer unberechtigt an Dateien des Systems gelangen kann. Die Attacke beruht auf dem Upload-Mechanismus von Mail-Attachments. Dieser verarbeitet Dateinamen von hochzuladenden Datei nicht richtig.
Ursache hierfür ist ein Programmierfehler in dem Deliver.class.php-Skript. Dadurch kommt es zu einem typischen Directory-Traversel-Fehler via Double-Dot-Attacke. Dies bedeutet, dass der Angreifer in den Dateinamen ‘../’-Strings einbauen kann, um so beliebige Dateien des Systems an die Mail anzuhängen. Hiermit gelangt der Angreifer dann unberechtigt an Dateien des Systems. Alle von dem PHP-Prozess lesbaren Dateien können so angehängt und ausgelesen werden. Dies beinhaltet auch zahlreiche Konfigurationsdateien.
Ein Angreifer kann die Attacke allerdings erst nach der Anmeldung am System ausnutzen. Er benötigt also zunächst einen gültigen SquirrelMail-Account. Der fehlerhafte Pogrammcode in dem Deliver.class.php-Skript besteht aus folgenden drei Zeilen:
$filename = $message->att_local_name; .... $file_has_long_lines = file_has_long_lines($hashed_attachment_dir . '/' . $filename, 990); ... $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb');
Das Problem liegt hier darin, dass der Angreifer den Inhalt der $message->att_local_name Variable frei bestimmen kann. Zu dem Double-Dot-Problem kommt es dann in dem fopen()-Aufruf, da der Eingabestring des Angreifers vorher nicht richtig kontrolliert wird.
Laut Advisory sind alle Versionen bis 1.5.2-svn und 1.4.22 von der Schwachstelle betroffen.
