PHP-Nuke es un paquete open source que permite crear y administrar un
portal con noticias y artículos totalmente adaptable, y con un sistema
de control de usuarios. Se ha descubierto una vulnerabilidad que de
forma sencilla puede permitir a un atacante ganar acceso de
administrador y acceder a todos los aspectos de la aplicación.
La sencillez con la que se puede crear y mantener un portal gracias a
este software hace que sea ampliamente empleado por un gran número de
sitios web para desarrollar sus contenidos. Por lo que hemos podido
comprobar un gran número de dichos sistemas son vulnerables ante este
ataque.
El problema recae cuando un atacante accede mediante la URL
http://sitio_vulnerable.com/admin.php3?admin=cualquiera lo que le puede
dar acceso total como administrador, con permisos para añadir o editar
noticias, crear secciones y cualquiera de las acciones que puede
llevar a cabo el administrador.
Para comprobar por que ocurre esto basta con mirar el código encargado
de realizar la autenticación del administrador, en el archivo
auth.inc.php3 a partir de la línea 31:
$admintest = 0;
if(isset($admin)) {
if(!IsSet($mainfile)) { include(«mainfile.php3»); }
$admin = base64_decode($admin);
$admin = explode(«:», $admin);
$admin becomes null
$aid = «$admin[0]»;
$pwd = «$admin[1]»;
dbconnect();
$result=mysql_query(«select pwd from authors where aid=’$aid'»);
if(!$result) {
echo «Selection from database failed!»;
exit;
} else {
list($pass)=mysql_fetch_row($result);
if($pass == $pwd) {
$admintest = 1;
}
}
}
El problema reside en un error en la programación, ya que basta con
hacer $pass==$pwd. El valor de $pass proviene del valor de
mysql_fetch_row() que puede ser cualquier valor, o puede ser FALSE si
no existen más filas. Por lo que basta conseguir que $pwd (tipo cadena)
y $pass (tipo booleano) iguales a falso para que se cumpla la
condición. La expresión «if($pass == $pwd)» sólo compara valores, no el
tipo de los valores, por lo que si $pwd=»» (null) será igual (no
idéntico) a el valor falso de $pass.
Simplemente bastará con introducir cualquier valor como valor de admin
para que deje acceder al sistema como tal. Al introducir la URL
http://sitio_vulnerable.com/admin.php3?admin=cualquiera ya permitirá el
acceso al menú de administración y bastará seguir combinando y
añadiendo el parámetro admin=cualquiera en las urls del sistema de
administración para que permita realizar cualquier acción.
Para remediarlo se puede instalar la versión PHP-Nuke 3.0 recientemente
publicada o bien añadir la línea 37 del archivo auth.inc.php3 para que
ponga :
if($aid==»» || $pwd==»») exit;
antonior@hispasec.com
Más información:
Securityfocus:
http://www.securityfocus.com/vdb/?id=1592
PHP-Nuke:
http://www.ncc.org.ve/php-nuke.php3
Bugtraq:
http://www.securityfocus.com/templates/archive.pike?list=1&msg=Pine.LNX.
.4.20.0008211558160.3828-100000@Ono-Sendai.hack.net
Deja una respuesta