Bug in WordPress File Upload Plugin erlaubt XSS

Manchmal kann bereits das Bereitstellen von Fehlerinformationen zu viel des Guten sein - so zum Beispiel beim WordPress File Upload.

Dieses bietet Nutzern - wie der Name schon sagt - die Möglichkeit, Dateien hochzuladen. Dafür kommt AJAX zum Einsatz. In der Datei "./lib/wfu_ajaxactions.php" werden dazu die entsprechenden Handler bereitgestellt. Sollte etwas fehlgeschlagen (zum Beispiel die Session-Prüfung) bekommt der Nutzer nützliche Informationen als Rückantwort. Dies sah bisher so aus:

1
2
3
4
5
6
7
if ( $_SESSION["wfu_token_".$arr['shortcode_id']] != $_POST['session_token'] ) {
     echo "Session failed!<br/><br/>Session Data:<br/>";
     print_r($_SESSION);
     echo "<br/><br/>Post Data:<br/>";
     print_r($_POST);
     die();
}

Das ist jedoch ziemlich problematisch, denn "print_r()" escaped Ausgaben nicht. Es ist also möglich, mit einem präparierten POST-Request beliebige Texte ausgeben zu lassen. Das ganze lässt sich zum Beispiel mit einem einfachen HTML-Formular realisieren:

1
2
3
4
5
<form action="http://example.com/wp-admin/admin-ajax.php" method="POST">
  <input type="hidden" name="action" value="wfu_ajax_action" />
  <input type="hidden" name="session_token" value="<script>alert(1+1);</script>" />
  <input type="submit" />
</form>

In der nun veröffentlichten Version 2.4.4 ist das Problem beseitigt worden. Es ist daher anzuraten, das Plugin so schnell wie möglich upzudaten.

Präparierte Grüße, Kenny