ok-webhosting Forum

Normale Version: Kritische Lücke in Content Management System Mambo/Joomla
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Nicht immer erhöht unter PHP das Deaktivieren von register_globals die Sicherheit. Manchmal öffnet sich dadurch erst eine Schwachstelle. So auch im Falle des Content Management System Mambo, das laut eines Postings auf der Sicherheits-Mailing-Liste Full Disclosure eine Schwachstelle enthält, mit der es Angreifern möglich ist, eigenen Code auf dem Server auszuführen.

Ursache des Problems soll die Emulationsschicht des Moduls globals.php sein, in dem sich bestimmte Arrays überschreiben lassen. Laut Peter Tachatte, Entdecker der Lücke, sollen sich dadurch beliebige lokale und externe Skripte über den Parameter mosConfig_absolute_path einbinden lassen. Für einen erfolgreichen Angriff muss register_global=off definiert sein. Der Sicherheitsdienstleister Secunia bestätigt, dass die aktuelle Mambo-Version 4.5.2.3 betroffen ist, wahrscheinlich auch vorhergehende.

Ein Patch steht derzeit nicht zur Verfügung. Ob der Hersteller informiert wurde, gibt Tachatte in seinem Advisory nicht an.

Quelle: Heise.de
Für Mambo-Nutzer gibt es bereits ein Workarround, das die Sicherheitslücke schliessen sollte:

Zitat:<?php
/**
* @version $Id: globals.php,v 1.2 2005/06/27 23:56:30 muffin Exp $
* @package Mambo
* @copyright © 2000 - 2005 Miro International Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* Mambo is Free Software
*/

$raw = phpversion();
list($v_Upper,$v_Major,$v_Minor) = explode(".",$raw);

if (($v_Upper == 4 && $v_Major < 1) || $v_Upper < 4) {
$_FILES = $HTTP_POST_FILES;
$_ENV = $HTTP_ENV_VARS;
$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
$_COOKIE = $HTTP_COOKIE_VARS;
$_SERVER = $HTTP_SERVER_VARS;
$_SESSION = $HTTP_SESSION_VARS;
$_FILES = $HTTP_POST_FILES;
}

if (!ini_get('register_globals')) {
while(list($key,$value)=each($_FILES)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
while(list($key,$value)=each($_ENV)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
while(list($key,$value)=each($_GET)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
while(list($key,$value)=each($_POST)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
while(list($key,$value)=each($_COOKIE)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
while(list($key,$value)=each($_SERVER)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
while(list($key,$value)=@each($_SESSION)) $GLOBALS[$key] = ($key=="mosConfig_absolute_path") ? "Fuck You" : $value;
foreach($_FILES as $key => $value){
$GLOBALS[$key]=($key=="mosConfig_absolute_path") ? "Fuck You" : $_FILES[$key]['tmp_name'];
foreach($value as $ext => $value2){
$key2 = $key . '_' . $ext;
$GLOBALS[$key2] = $value2;
}
}
}
?>

Für Joomla findet sich eine globals.php-off unter den Installationsdateien, die man bei Installationen mit register_globals off einsetzen sollte.