Ich nahm an einem Treffen der Arbeitsgruppe Messaging, Malware und Mobile Anti-Abuse (m3aawg.org) in Brooklyn, New York, teil. Ich erwartete besseres Wetter, um durch die Stadt zu wandern, die Konferenz zu genießen und eine große Auswahl an Speisen in der Umgebung. Ich war mir der Klarheit des Himmels so sicher, dass ich nicht einmal etwas vom Regen mitgenommen habe. Und es hat die ganze Woche geregnet. Dies zwang mich, in meinem Hotelzimmer mit kostenlosem WLAN und meinem Arbeitslaptop zu bleiben. Ich habe mich entschlossen, diese Zeit damit zu verbringen, Node.js und die dazugehörigen Pakete zu recherchieren, die unter https://www.npmjs.com verfügbar sind.
In Ihrem Projekt stehen Tausende von Paketen von Benutzern zum Herunterladen und Installieren zur Verfügung. Ich habe NPM nach gängigen Paketnamen wie Datei, Backup, Download oder Upload durchsucht. Die letzte Suche ergab ein Projekt namens jQuery-Datei-Upload von Blueimp. Seine Beschreibung schien interessant genug zu sein, um sie herunterzuladen und zu erkunden.
Widget zum Hochladen von Dateien für jQuery mit Unterstützung für die Auswahl mehrerer Dateien, Drag & Drop, Fortschrittsanzeige, Validierung und Vorschau von Bildern, Audio und Video. Es unterstützt domänenübergreifende Anforderungen, einen teilweisen und erneuerbaren Mechanismus zum Hochladen von Dateien, bei dem die Größe von Bildern auf der Clientseite geändert wird. Es funktioniert auf jeder Serverplattform (PHP, Python, Ruby on Rails, Java, Node.js, Go usw.), die das Hochladen von Standarddateien per HTML-Formular unterstützt.
Ich fing an, den Quellcode des Pakets zu untersuchen und konzentrierte mich auf einige PHP-Dateien im Server / PHP-Verzeichnis. Die Dateien hießen upload.php und UploadHandler.php. upload.php heißt UploadHandler.php, wo sich der Upload-Code der Hauptdatei befand. Ich habe auch festgestellt, dass die Dateien in das Verzeichnis files / im Stammverzeichnis des Webservers hochgeladen wurden. Ich habe einen einfachen Befehl mit Curl und einem primitiven PHP-Skript geschrieben, der mir bestätigte, dass ich die Datei auf den Server hochladen und dann zum Ausführen der Befehle auf dem Server verwenden kann.
$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php
Wo die shell.php-Datei enthält:
<?php $cmd=$_GET['cmd']; system($cmd);?>
Beim Öffnen einer Seite im Browser mit dem Parameter cmd = id vom Testserver wurde die ID des Benutzers zurückgegeben, von dem der Serverprozess gestartet wurde. Ich ging davon aus, dass diese Sicherheitsanfälligkeit nicht unbemerkt blieb, und eine schnelle Google-Suche bestätigte mir, dass andere Projekte, die diesen Code oder seine Derivate verwendeten, sich als anfällig herausstellten. Es gab auch mehrere Videos, die zeigten, wie man ähnliche Softwarepakete angreift.
Ich habe den Autor von jQuery File Upload benachrichtigt und angefangen zu dokumentieren, was ich gefunden habe, um eine CVE-Nummer zuzuweisen. Bald am nächsten Tag antwortete mir ein etwas verlegener Autor und bat um weitere Informationen, da er die Sicherheitsanfälligkeit in seiner Testumgebung nicht reproduzieren konnte.
Nach dem Vergleich unserer Testkonfigurationen per E-Mail stellten wir fest, dass Apache-Entwickler die Unterstützung für .htaccess-Dateien seit Version 2.3.9 deaktiviert hatten. Es stellt sich heraus, dass dies zur Verbesserung der Leistung durchgeführt wurde , sodass der Server diese Datei nicht jedes Mal überprüfen muss, wenn er auf das entsprechende Verzeichnis zugreift. Darüber hinaus wurde diese Änderung vorgenommen, um zu verhindern , dass Benutzer die auf dem Server konfigurierten Sicherheitseinstellungen überschreiben .
Daher hatte Apache gute Absichten beim Deaktivieren von .htaccess, aber ihre Änderungen gefährdeten auch einige Entwickler und ihre Projekte, insbesondere wenn sie auf die in .htaccess vorgenommenen Sicherheitseinstellungen zählen.
Im Fall dieser Bibliothek hat der Entwickler den Code so geändert, dass nur Bilddateien heruntergeladen werden können, um diese Situation richtig zu behandeln und die Sicherheitsanfälligkeit beim Hochladen von Dateien CVE-2018-9206 zu beheben.
Dieses Problem ist mehr als ein Projekt.
Es ist auch erwähnenswert, dass aufgrund der Änderungen in Apache einige der 7.800 verbleibenden Projekte möglicherweise für Probleme beim Hochladen von Dateien anfällig sind.

Die meisten dieser Gabeln weisen immer noch die ursprüngliche Sicherheitsanfälligkeit in ihrem Code auf. In einigen Fällen bleibt die Sicherheitsanfälligkeit auch dann bestehen, wenn der Entwickler den ursprünglichen Code von Blueimp bearbeitet hat, um ihn in sein Projekt einzubetten, sodass die Projekte mit geringfügigen Abweichungen weiterhin für mein Angriffsbeispiel anfällig sind.
Das heißt, wenn eines dieser Projekte in der Produktion verwendet wird, ist es der Sicherheitsanfälligkeit ausgesetzt, eine Datei bei ihrer anschließenden Ausführung herunterzuladen. Eröffnen Sie Möglichkeiten, Daten aus der Anwendung zu stehlen, Malware einzuschleusen, zu entstellen und andere Möglichkeiten zu nutzen, um Schaden zu verursachen.
Leider gibt es keine Möglichkeit, genau zu bestimmen, wie viele Projekte, die aus dem ursprünglichen jQuery-Datei-Upload stammen, noch aktiv unterstützt werden, und die im Hauptprojekt vorgenommenen Änderungen anzuwenden. Es ist auch nicht möglich, genau zu bestimmen, wo gegabelte Projekte in der Produktion verwendet werden, falls vorhanden. Darüber hinaus waren ältere Versionen des Projekts bis 2010 auch anfällig für Probleme beim Herunterladen von Dateien.
Fazit
Das Internet stützt sich auf viele Sicherheitsmechanismen, um unsere Systeme, Daten und Transaktionen sicher zu halten. Wenn einer dieser Mechanismen plötzlich verschwindet, kann dies die Sicherheit von Benutzern und Entwicklern gefährden, die sich darauf verlassen.
Für Entwickler ist es eine gute Idee, sich die Änderungen in den Systemen und Bibliotheken anzusehen, auf denen sie ihr Projekt basieren. In diesem Artikel wirkte sich der von Apache entfernte Sicherheitsmechanismus nicht nur auf das Hochladen der Jquery-Datei von Blueimp aus, sondern auch auf alle Gabeln und Zweige. Die Sicherheitsanfälligkeit betraf viele davon abhängige Projekte, von eigenständigen Webanwendungen bis hin zu Plugins für WordPress und andere CMS.