Archive: Month 8, Year 2014

Bug in FormGet Contact Form Plugin erlaubt Persistive XSS

29.08.2014 yahe legacy security wordpress

Heute habe ich noch etwas spannendes für euch: eine Persistive-XSS-Lücke. Das bedeutet, dass man nicht jedem Benutzer den manipulierten Seiteninhalt unterschieben muss, sondern, dass diese permanent gespeichert wird und so bei jedem Aufruf der Originalwebseite aktiv wird. Gefunden habe ich diesen Fehler im FormGet Contact Form Plugin.

Das Plugin besteht nur aus der Datei "index.php" und bietet einen AJAX-Endpunkt in der Funktion "cf_text_ajax_process_request()". Dort werden einfach ungeprüft POST-Parameter in die Plugin-Konfiguration übernommen. Besonders spannend ist die Option "fg_embed_code", die über den POST-Parameter "value" gesetzt wird. Dabei handelt es sich um Code, der später über die Funktion "embeded_code()" in jeder Seite des Wordpress-Blogs eingebunden wird: Jackpot! Die Einbringung von eigenem Code funktioniert relativ einfach über ein HTML-Formular, das ein Angreifer einmalig benutzen muss:

<form action="http://example.com/wp-admin/admin-ajax.php" method="POST">
  <input type="hidden" name="action" value="request_response" />
  <input type="hidden" name="value" value="<script>alert('XSS.');//sideBar</script>" />
  <input type="hidden" name="value_hide" value="" />
  <input type="hidden" name="page_id" value="" />
  <input type="submit" />
</form>

Ich stand mit den Entwicklern in Kontakt, die mir auch mitgeteilt hatten, etwas auf der Serverseite gefixt zu haben. Auf meine Anmerkung hin, dass der Fehler im Plugin sei und nicht in ihrer Serveranwendung, erhielt ich jedoch keine Antwort mehr. Solange kein Patch verfügbar ist, kann der Rat deshalb nur lauten, das Plugin umgehend zu deaktivieren.


Bug in Login With Ajax Plugin erstellt Nutzeraccounts

29.08.2014 yahe legacy security wordpress

Anfang dieser Woche hatte ich über ein Plugin informiert, mit dem ein Angreifer ungefragt neue Nutzer anlegen kann. Damit ist das vorgestellte Plugin leider nicht allein. Denn auch das Login With Ajax Plugin hat diese unschöne Sonderfunktion.

In der Datei "login-with-ajax.php" befindet sich die Klasse "LoginWithAjax", die man mit einem präparierten Formular dazu bringen kann, neue Accounts anzulegen, selbst dann, wenn die Registrierung neuer Nutzer eigentlich in der Wordpress-Konfiguration ausgeschaltet wurde:

<form action="http://example.com/" method="POST">
  <input type="hidden" name="lwa" value="true" />
  <input type="hidden" name="login-with-ajax" value="register" />
  <input type="hidden" name="user_login" value="exploit" />
  <input type="hidden" name="user_email" value="exploit@example.com" />
  <input type="submit" />
</form>

Ich bekam vor mehreren Wochen von den Entwicklern die Aussage, dass sie das Problem ASAP beheben würden. Seitdem ist jedoch nichts mehr geschehen. Der Tipp an dieser Stelle kann deshalb nur lauten, das Plugin zu deaktivieren, bis es ein Update gegeben hat. Viele andere Plugins prüfen häufig lediglich, ob ein Nutzer eingeloggt ist, bevor sie ihre Funktionalität bereitstellen. diese Absicherung kann aufgrund des Bugs derzeit umgangen werden.

Update

In der Version 3.1.3 wurde dieser Fehler nun endlich behoben.


Bug in Quick Chat Plugin erlaubt SQL-Injection

27.08.2014 yahe legacy security wordpress

In dem WordPress-Plugin Quick Chat befinden sich Bugs, die es einem Angreifer ermöglichen, SQL-Injections durchzuführen. Das Plugin ist dafür gedacht, einen einfachen Chat im eigenen Blog bereitzustellen.

Das Problem beginnt im Constructor der Klasse "Quick_Chat", der sich in der Datei "quick-chat.php" befindet. Dort wird versucht, die IP-Adresse des Clients in Erfahrung zu bringen. Dabei wird auch der HTTP-Header "X-Forward-For" mit berücksichtigt. Dieser Wert wird dann ungeprüft in der Methode "new_message_ajax_handler()" in einem INSERT-Statement verwendet. Diese wird immer dann aufgerufen, wenn ein Nutzer eine neue Nachricht schreibt. Auch in der Methode "update_users_ajax_handler()" kommt dieser Wert ungeprüft zum Einsatz. Sie wird regelmäßig aufgerufen, wenn der Status der Clients aktualisiert wird. Ausnutzen kann man das ganze, indem man einfach den "X-Forward-For"-Header mit seinem SQL-Injection-Code versieht. Das ganze kann dann zum Beispiel so aussehen:

Quick Chat Injection

Hier habe ich das Tool Charles verwendet, um einen präparierten Header einzufügen. Dieser bewirkt, dass nicht der vom Nutzer geschriebene Text im Chatraum erscheint, sondern das gehashte Passwort vom WordPress-User mit der ID "1".

Auch das Plugin Quick Count verwendet in der Datei "quick-counter.php" einen ähnlichen Code in der Methode "report()" und sollte dadurch mit ähnlichen Problemen zu kämpfen haben.

Der Rat an dieser Stelle lautet, die Plugins sofort zu deaktivieren und auf ein Update zu warten.


Bug in WP Modal Login Plugin erstellt Nutzeraccounts

25.08.2014 yahe legacy security wordpress

Heute mal ein spannender Bug: Das WP Modal Login Plugin bietet einem die Möglichkeit, überall auf der Seite einen Login-Screen aufzurufen. Dafür richtet man an der entsprechenden Stelle einfach einen Shortcode ein. Das Login-Formular wird dann einfach als Overlay angezeigt:

[wp-modal-login login_text="Login" logout_text="Logout"]

Leider hat das ganze einen kleinen Schönheitsfehler, denn die Klasse "./includes/class-wp-modal.php" enthält nicht nur die Funktion, sich einzuloggen, sondern sie kann auch neue Nutzer anlegen. Das funktioniert sogar dann, wenn die Registrierung neuer Nutzer in der Wordpress-Konfiguration deaktiviert wurde. Die Funktion wird zwar nicht über das Login-Formular bereitgestellt, aber es verarbeitet trotzdem entsprechende Anfragen.

Exploit mit Charles Proxy

Das ist sehr unglücklich, denn viele andere Plugins verlassen sich darauf, dass ein Angreifer keinen Account für die Webseite hat. Oft bestehen Sicherheitsabfragen nur daraus, zu prüfen, ob ein Nutzer eingeloggt ist oder nicht. Da der Entwickler keine Zeit mehr für die Pflege des Plugins hat, hat er sich dazu entschlossen, das Plugin aus dem Plugin-Repository zu entfernen.


Bug in WordPress File Upload Plugin erlaubt XSS

22.08.2014 yahe legacy security wordpress

Manchmal kann bereits das Bereitstellen von Fehlerinformationen zu viel des Guten sein, so zum Beispiel beim WordPress File Upload Plugin. Dieses bietet Nutzern 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:

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:

<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.


Search

Links

RSS feed

Categories

administration (40)
arduino (12)
calcpw (2)
code (33)
hardware (16)
java (2)
legacy (113)
linux (27)
publicity (6)
review (2)
security (58)
thoughts (21)
windows (17)
wordpress (19)