Software Guide

Die besten Tipps, Anleitungen und Downloads

Ihre Werbung auf Software Guide

Sie möchten in dieser Box oder an anderer Stelle dieser Webseiten eine Werbung schalten? Sehen Sie sich dazu am besten einfach mal die verschiedenen Möglichkeiten an.


Lösung zu WordPress-Sicherheitslücken

2. März 2006 von Michael | Wordpress

Gemäß einem Advisory vom Neo Security Team wurden in WordPress Sicherheitslücken entdeckt, die z.T. als kritisch eingestuft wurden:

  1. Über Kommentare lässt sich aufgrund einer unzreichenden Filterung JavaScript-Code einbetten. Besucher könnten sich damit möglicherweise einen administrativen Zugang zum Blog verschaffen. Allerdings ist dieses Sicherheitsrisiko überbewertet, da die Lücke nur dann entsteht, wenn der JavaScript-Code von einem Administrator gepostet wird.
  2. Beim direkten Aufrufen einer Reihe von Dateien erscheint aufgrund einer PHP-Fehlermeldung der vollständige Pfad der WordPress-Installation. Angreifer könnten dies u.U. ausnutzen, um das Blogsystem bzw. den Server anzugreifen.
  3. Beim Aufrufen des Verzeichnis wp-includes/ wird der Verzeichnisinhalt angezeigt. Dies wurde jedoch als unkritisch eingestuft.

Die Fehler wurden in WordPress 2.0.1 nachgewiesen, lt. Advisory sind aber auch alle älteren Versionen davon betroffen.

(via BasicThinking, Heise: Sicherheitslücken im Blog-System WordPress)

Im folgenden zeige ich, wie man die Lücken schließen kann (getestet unter WordPress 2.0.1):

1. JavaScript-Code in Kommentaren verhindern

In der Datei wp-comments-post.php die Zeilen

$comment_author       = trim($_POST['author']);
$comment_author_email = trim($_POST['email']);
$comment_author_url   = trim($_POST['url']);
$comment_content      = trim($_POST['comment']);

durch diese ersetzen:

$comment_author       = htmlspecialchars(trim($_POST['author']));
$comment_author_email = htmlspecialchars(trim($_POST['email']));
$comment_author_url   = htmlspecialchars(trim($_POST['url']));
$comment_content      = htmlspecialchars(trim($_POST['comment']));

Achtung: Dadurch sind keine (X)HTML-Tags in den Kommentaren mehr möglich.

2. Anzeige des vollständigen Pfad der WordPress-Installation verhindern

Bei den Dateien

  • wp-admin/admin-footer.php
  • wp-admin/admin-functions.php
  • wp-admin/edit-form.php
  • wp-admin/edit-form-advanced.php
  • wp-admin/edit-form-comment.php
  • wp-admin/edit-link-form.php
  • wp-admin/edit-page-form.php
  • wp-admin/menu.php
  • wp-admin/menu-header.php
  • wp-includes/default-filters.php
  • wp-includes/kses.php
  • wp-includes/locale.php
  • wp-includes/rss-functions.php
  • wp-includes/template-loader.php
  • wp-includes/vars.php
  • wp-includes/wp-db.php
  • wp-settings.php

folgenden Code in die erste Zeile eintragen:

<?php if (eregi('Dateiname.php', $_SERVER['PHP_SELF'])) die('You are not allowed to see this page directly'); ?>

Dabei den Platzhalter Dateiname.php durch den jeweiligen Dateinamen ersetzen.

Hinweis: Läuft PHP auf dem Server nicht als Apache-Modul, sondern als CGI, dann funktioniert diese Lösung leider nicht.

3. Frei zugängliches Directory-Listing verhindern

Eine leere Datei index.php im Verzeichnis /wp-includes/ erstellen.

Kritik

U.a. Blogging Tom kritisiert zurecht die schnelle, ungeprüfte Übernahme des Advisory durch Heise. Insbesondere das Ausführen von JavaScript-Code in Kommentaren ist reichlich überbewertet, da das Einschleusen nur durch einen Administrator möglich ist.

Fazit

Eine aktuelle Gefahr droht wohl nicht, wenn man die Lücken nicht schließt. Dennoch ist oben der Weg aufgezeigt, wie man die Lücken schließen kann.

Artikel-Aktualisierungen:

  • 02.03.2006 — Um das Problem mit den Umlauten unter Punkt 1 zu lösen, habe ich gemäß Kommentar von BloggingTom htmlentities durch htmlspecialchars ersetzt.
  • 03.03.2006 — Läuft PHP auf dem Server nicht als Apache-Modul, sondern als CGI, dann funktioniert das Script unter Punkt 2 lt. Kommentar nicht.

Informationen zum Artikel:

Weiterblättern im Blog:

Was ist ein Trackback?

2 Trackbacks/Pings: