Advisory - Typo3

Advisory: TYPO3 - Remote Code Execution in Version 6.1 - alle Versionen

Anwendung:Typo3 6.1 - Alle Versionen
Kategorie: Webanwendung
Art: Rechteausweitung / Erstellung beliebiger Dateien -> Remote Code Execution
Letztes getestetes Update:30.07.2013
Remote:Ja 
Credits: Sebastian Nerz <sebastian.nerz@syss.de>
Autor der Empfehlung:Sebastian Nerz <sebastian.nerz@syss.de>
Schwere: Hoch - jeder gültige Benutzer kann beliebige PHP-Dateien erstellen, bearbeiten und ausführen
Risiko:Hoch
Hersteller: Open Source, TYPO3
Stand der Fehlerbehebung:Offen

 

Überblick

TYPO3 ist ein OpenSource Web Content Management Framework, basierend auf PHP. Es beinhaltet eine Sicherheitslücke, die es beliebigen registrierten Benutzern erlaubt, beliebige Dateien anzulegen, zu bearbeiten und auszuführen ohne Berücksichtigung der Rechte dieser Benutzer oder des Dateitypes.

Details 

TYPO3 beinhaltet ein komplexes System an Benutzerberechtigungen und eine Reihe von Dateifiltern. So dürfen in der Standardkonfiguration beispielsweise aus Sicherheitsgründen keine PHP-Dateien hochgeladen werden. Dennoch ist es möglich, beliebige PHP-Dateien umzubenennen, zu erstellen oder zu bearbeiten, eingeschlossen die lokale Konfiguration oder die TYPO3-Dateien selbst. Zusätzlich benötigt ein Benutzer zwar eigentlich bestimmte Berechtigungen, um den Dateimanager öffnen zu können, direkte Aufrufe der URL zur Erstellung/Bearbeitung oder zum Umbenennen von Dateien werden aber nicht auf die Benutzerberechtigungen überprüft. Entsprechend kann ein beliebiger Benutzer, der sich in das TYPO3-Backend einloggen kann, PHP-Dateien erstellen, beliebigen Code in diese Dateien schreiben und sie später ausführen.

 

Wenn Dateifilter explizit umgestellt werden um PHP-Dateien zu verbieten, ist die direkte Erstellung von PHP-Dateien zwar weiterhin möglich, sie können aber nicht mehr beschrieben werden. Möglich ist es aber weiterhin, beliebige Dateien nach .php umzubenennen und so beispielsweise eine Textdatei zu erstellen und zu befüllen und sie danach in eine PHP-Datei umzubenennen. Dieser Fehlerteil wurde in der Version 6.1.3 vom 30.07.2013 gefixt. Mit diesem Sicherheitsrelease ist die Beschreibung von PHP-Dateien bzw. die Umbenennung nach .php nicht mehr möglich.

Das Nutzen andere Fehlerbestandteile insbesondere die Umgehung der TYPO3-Rechteverwaltung, die Path-Traversal-Schwachstelle oder das Auslesen von TYPO3-Dateien ist allerdings weiterhin möglich.

Selbstverständlich können Benutzer damit beispielsweise eine Webshell erstellen, die TYPO3-Konfiguration auslesen oder administrative Berechtigungen erhalten. In der gepatchten Version ist es beispielsweise noch möglich, die Installationsroutinen zu aktivieren und die Installationspasswörter auszulesen. Damit können dann wieder Veränderungen am System vorgenommen werden.

 

Zusätzlich bietet ein Standard TYPO3-System keinerlei Schutz vor Cross-Site Request Forgery, abgesehen von einer Überprüfung des HTTP Headers Referer. Entsprechend wäre es auch möglich, legitime Benutzer auszutricksen und so die Sicherheitslücken auszunutzen.

 

File Abstraction Layer

Die mit Abstand schwerste Fehleranreihung ist im File Abstraction Layer von TYPO3. Dieser erlaubt eine Verwaltung von Dateien im TYPO3-Backend. Administratoren können darüber beispielsweise Systemkonfigurationen verändern, einfache Anwender können Bilder hochladen oder verwalten. Dieser File Abstraction Layer hat mehrere Schwachstellen. Sie erlauben es einem authentifizierten Benutzer, das TYPO3-Berechtigungssystem zu umgehen und beliebige Dateien zu lesen, zu schreiben oder zu erstellen. 

Proof-of-Concept

In allen Fällen muss der HTTP Header Referer korrekt gesetzt sein. Bei einer Standardinstallation ist es ausreichend, wenn er auf den korrekten Host gesetzt wird.

 

  • Loggen Sie sich in ein aktuelles TYPO3-System ein. Der Benutzer muss dabei keine bestimmten Rechte haben. Für einen Test ist es ausreichend, einen Benutzer ohne alle Berechtigungen zu erstellen - die Fehlermeldung nach dem Login kann ignoriert werden.

 

 

Datei erstellen:

 

  • Aufruf des Skriptes /typo3/tce_file.php mit den Parametern "file[newfile][0][data]" auf den Namen der zu erstellenden Datei gesetzt (bspw. test.php) und "file[newfile][0][target]" auf den Ordner gesetzt. Bei einer Standardinstallation führt 0:/ auf den TYPO3-Basispfad, 0:/fileadmin/ auf das normale Uploadverzeichnis, etc.
  • Die Datei wird erstellt, der Dateityp wird dabei ignoriert.
  • Das Release vom 30.07.2013 verbietet die Erstellung von PHP-Dateien mit unterschiedlichen Endungen.

 

Datei auslesen

 

  • Aufruf des Skriptes /typo3/file_edit.php?target=[directory][file], bspw. typo3/file_edit.php?target=0:/typo3conf/LocalConfiguration.php. Ein Editor wird zurückgegeben, die Datei wird darin angezeigt. Es können dabei beliebige Dateien ausgelesen werden. Sofern diese noch keine fileID besitzen, wird dabei gleich eine erstellt. Die fileID wird mit dem Editor als hidden-Field übergeben und kann im späteren Verlauf zur Angabe der Datei genutzt werden. In jedem Fall ist aber auch die Verwendung eines relativen Pfades möglich.
  • Eingestellte Filter auf Dateitypen werden beachtet. Wenn also beispielsweise SYS['textfile_ext'] explizit gesetzt wird, um PHP-Dateien auszuschließen, können diese nicht angezeigt werden. In einem Standardsystem ist dies allerdings auch in der neuesten Version nicht der Fall.

 

Datei überschreiben

 

  • Aufruf des Skriptes /typo3/tce_file.php. Der Parameter file[editfile][0][target] kann entweder auf obige fileID gesetzt werden oder wieder auf einen relativen Pfad wie 0:/verzeichnis/datei (bspw. 0:/index.php). Der Parameter file[editfile][0][data] wird auf den neuen Inhalt der Datei gesetzt.
  • Das aktuelle Release filtert hier auf PHP-Dateien.

 

Datei umbennen

 

  • Aufruf des Skriptes /typo3/tce_file.php, mit den Parametern "file[rename][0][data]" wieder entweder auf die fileID oder auf den relativen Pfad gesetzt. Der Parameter file[rename][0][target] gibt dann den neuen Dateinamen an (bspw. .htaccess oder shell.php). 
  • Das aktuelle Release filtert hier auf PHP-Dateien.  
  • In den vorherigen Versionen war die Umbenennung nach .php in jedem Fall und ohne Beachtung der Systemconfiguration möglich, in der aktuellen Revision können zwar keine Dateien nach .php umbenannt werden, es ist aber möglich, diese Dateien umzubenennen und so eine Ausführung zu verhindern. Auch .htaccess-Dateien können beispielsweise kopiert, umbenannt und dann ausgelesen werden. Ein Angreifer kann so Informationen über Systemkonfigurationen erlangen.
  • Es existiert keine Filterung auf .htpasswd-Dateien. Diese können also beliebig bearbeitet werden.
  • Entsprechend der obigen Anleitungen ist auch das Löschen oder Kopieren von Dateien möglich. Eine Filterung oder Rechteüberprüfung findet nicht statt.

ajax.php

 

  • ajax.php erlaubt ebenfalls den Zugriff auf bestimmte Dateioperationen und kann einem Angreifer helfen, wenn der direkte Zugriff verboten wird.
  • Aufruf des Skriptes /typo3/ajax.php mit den Parametern von oben und zusätzlich "ajaxID=T3Editor::saveCode&t3editor_savetype=tx_tstemplateinfo" erlaubt ebenfalls eine Umbennenung von Dateien, unabhängig von Benutzerrechten.
  • Zur Erstellung von Dateien müssen nur die bekannten Parameter gesetzt werden. 
  • Andere Dateioperationen funktionieren entsprechend.
  • Der Kopier-Befehl hat eine Path-Traversal-Schwachstelle im Parameter "target" (target=fileadmin/../../../andsoon/targetdir/). Damit können Dateien in beliebige Verzeichnisse - auch außerhalb des TYPO3-Basisverzeichnisses kopiert werden. Auf einem shared host könnte also beispielsweise auch eine Datei aus einer TYPO3-Installation in eine andere kopiert werden. 

 

 

 

Übergangslösung

Eine echte Lösung setzt voraus, dass TYPO3 eine korrigierte Version veröffentlicht. Bis dahin kann nur empfohlen werden, den Zugriff auf das Backend nur besonders vertrauenswürdigen Mitarbeitern zu gewähren, da die Rechteverwaltung von TYPO3 umgangen werden kann.

Der Eingang unseres Hinweises auf die Sicherheitslücken wurde uns am 27. Mai auch bestätigt – ein Patch wurde dann am 30.07.2013 veröffentlicht. Dieser korrigiert zumindest die schwersten Fehler, so dass es nun nicht mehr möglich ist, Dateien nach .php oder .htaccess umzubenennen oder diese Dateien zu speichern. Leider sind durch den Patch noch nicht alle Angriffsvektoren behoben. So werden teilweise weiterhin Berechtigungen ignoriert und es lassen sich Sicherungsmaßnahmen umgehen. Die SySS GmbH hat diese Fehler am 31.07.2013 an das TYPO3-Security-Team gemeldet. Wegen dieser Schwachstellen empfehlen wir Nutzern von TYPO3 *dringend* den aktuellsten Patch einzuspielen. Zusätzlich empfiehlt die SySS GmbH, den Zugriff auf die betroffenen PHP-Dateien via Filter im Webserver einzuschränken und nur noch vertrauenswürdigen Administratoren zu ermöglichen. 

Lösungsvorschlag

Wir empfehlen dem TYPO3-Team, dass existierende Filter, Validierungen und Berechtigungskonzepte auch tatsächlich in allen Kontexten angewendet werden und die Bearbeitung von PHP-Dateien in der Standardinstallation verboten wird.

Die SySS GmbH hat den Fehler am 24. Mai 2013 gefunden und an das TYPO3-Security-Team weitergeleitet.

Zeitlicher Verlauf

2013-05-24 - Sicherheitslücken entdeckt und an TYPO3 gemeldet

2013-05-27 - Sicherheitslücken werden durch das TYPO3-Team bestätigt

2013-06-17 - Auf Nachfrage bestätigt das TYPO3-Team, dass es sich um kritische Lücken handelt

2013-07-30 - Teilweise gepatchte Version von TYPO3 wird veröffentlicht. Der CVSS Base-Score wird mit 9.0 angegeben

2013-07-30 - Noch offene Lücken werden gemeldet

 

 

GPG E-Mail: sebastian.nerz@syss.de

Public Key: www.syss.de/fileadmin/dokumente/Materialien/PGPKeys/Sebastian_Nerz.asc Key ID: 0x9180FDB2 Key Fingerprint: 79DC 2CEC D18D F92F CBB4 AF09 D12D 26A4 9180 FDB2

Copyright Creative Commons - Attribution (by) - Version 3.0 URL: creativecommons.org/licenses/by/3.0/deed.en

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