Anuncia aquí

7 nuevos problemas de seguridad en WordPress

Actualización: g30rg3_x me comenta que ya están disponibles los parches oficiales para estos problemas de seguridad, pueden ver los archivos modificados para las versiones 2.2.x (zip) y 2.0.x (zip).

Hace algunas horas acaban de reportar 7 problemas de seguridad en WordPress:

  1. WordPress Persistant XSS Vulnerability in the Default Theme (v.2.2): Los parámetros para la imagen y color de la cabecera en el tema por omisión de WordPress (Kubrick) son vulnerables. Aunque no lo probé, me parece que es parecido al que reporté hace tiempo.
  2. WordPress /options.php SQL Injection Vulnerability: El parámetro page_options no está correctamente validado en wp-admin/options.php. Sólo los usuarios con nivel Administrador pueden explotar esta vulnerabilidad.
  3. WordPress /options.php Information Disclosure: Esta vulnerabilidad se deriva de la anterior, porque en wp-admin/options.php se asume que el nombre de las opciones son seguras.
  4. WordPress /edit-comments.php Database Error (Bug): Simplemente muestra un error en la consulta si el valor de la página es negativo.
  5. WordPress /link-import.php XSS Vulnerability: El parámetro cat_id no es filtrado adecuadamente, para explotarlo requiere tener un valor adecuado para el parámetro _wpnonce.
  6. WordPress /upload.php XSS Vulnerability: En este caso el parámetro style es inseguro.

La misma persona que reportó estos bugs se tomó el trabajo de realizar un gusano que se encarga de parchar los blogs vulnerables, siempre y cuando se el servidor web tenga permisos de escritura en los archivos afectados.

En cada uno de los tickets abiertos ya existen parches oficiales disponibles (4689, 4690, 4691 y 4692). Mi parche para corregir esos problemas es ligeramente diferente:

diff:
Index: wp-admin/edit-comments.php
===================================================================
--- wp-admin/edit-comments.php  (revision 5825)
+++ wp-admin/edit-comments.php  (working copy)
@@ -76,7 +76,7 @@
 endif;
 
 if ( isset( $_GET['apage'] ) )
-       $page = (int) $_GET['apage'];
+       $page = (int) abs($_GET['apage']);
 else
        $page = 1;
 
Index: wp-admin/link-import.php
===================================================================
--- wp-admin/link-import.php    (revision 5825)
+++ wp-admin/link-import.php    (working copy)
@@ -73,7 +73,7 @@
 
 <h2><?php _e('Importing...') ?></h2>
 <?php
-              $cat_id = $_POST['cat_id'];
+              $cat_id = (int) $_POST['cat_id'];
               if ( $cat_id == '' || $cat_id == 0 )
                      $cat_id  = 1;
 
Index: wp-admin/options.php
===================================================================
--- wp-admin/options.php        (revision 5825)
+++ wp-admin/options.php        (working copy)
@@ -143,6 +143,7 @@
               $options_to_update[] = $option->option_name;
               $class = 'all-options';
        }
+       $option->option_name = attribute_escape($option->option_name);
        echo "
 <tr>
        <th scope='row'><label for='$option->option_name'>$option->option_name</label></th>
Index: wp-admin/upload-functions.php
===================================================================
--- wp-admin/upload-functions.php       (revision 5825)
+++ wp-admin/upload-functions.php       (working copy)
@@ -104,6 +104,8 @@
 function wp_upload_form() {
        $id = get_the_ID();
        global $post_id, $tab, $style;
+       $style = attribute_escape($style);
+       $post_id = (int) $post_id;
        $enctype = $id ? '' : ' enctype="multipart/form-data"';
 ?>
        <form<?php echo $enctype; ?> id="upload-file" method="post" action="<?php echo get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=upload&post_id=$post_id"; ?>">
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php   (revision 5825)
+++ wp-includes/functions.php   (working copy)
@@ -206,6 +206,7 @@
 function get_option($setting) {
        global $wpdb;
 
+       $setting = $wpdb->escape(stripslashes($setting));
        // Allow plugins to short-circuit options.
        $pre = apply_filters( 'pre_option_' . $setting, false );
        if ( $pre )
@@ -305,6 +306,7 @@
 function update_option($option_name, $newvalue) {
        global $wpdb;
 
+       $name = preg_replace('/[^a-z\d_-]/i', '', trim($name));
        wp_protect_special_option($option_name);
 
        if ( is_string($newvalue) )
@@ -352,6 +354,7 @@
 function add_option($name, $value = '', $description = '', $autoload = 'yes') {
        global $wpdb;
 
+       $name = preg_replace('/[^a-z\d_-]/i', '', trim($name));
        wp_protect_special_option($name);
 
        // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
@@ -391,6 +394,7 @@
 
        wp_protect_special_option($name);
 
+       $name = $wpdb->escape(stripslashes($name));
        // Get the ID, if no ID then return
        $option = $wpdb->get_row("SELECT option_id, autoload FROM $wpdb->options WHERE option_name = '$name'");
        if ( !$option->option_id ) return false;
 

Los que no sepan -- o no quieran -- aplicar manualmente este parche no oficial, pueden descargar el conjunto de archivos modificados para la versión 2.2.1, úsenlo bajo vuestra propia responsabilidad. :)

Actualización (03/08/2007): Miquel encontró un bug en el parche que publiqué.

Esta entrada fue publicada en Seguridad, Sql Injection, Web, Wordpress, XSS

17 Comentarios

  1. 1 phpleo (31 de julio de 2007, 07:25:32 pm) http://blog.phpleo.com

    Hola, quería hacer una pregunta. Hace un rato navegando en unos blogs vi lo siguiente:

    http://blog.sitio.net/$url/page/2/

    Me apareció con ese $url en un blog con wordpress 2.1.2

    Probé a reemplazar $url por alert(), pero no paso nada haber si esto no provoca algo serio.

    Saludos.

  2. 2 alex (31 de julio de 2007, 08:31:56 pm) http://www.buayacorp.com

    Probablemente es un error del tema que está usando, de todos modos la versión 2.1.2 es bastante vieja.

  3. 3 mybeNi websecurity (1 de agosto de 2007, 02:57:05 am) http://mybeni.rootzilla.de/mybeNi/

    Hey, I got the first Weblog XSS Worm based on several new WordPress 2.2.1 Security Vulnerabilities I found these days.

    Oh your page sucks, please let my worm fix the code!
    Just visit my page by clicking the link in your admin panel - you will be excited.

    cheers benjamin

  4. 4 alex (1 de agosto de 2007, 09:01:00 am) http://www.buayacorp.com

    benjamin: you are right, this page sucks :D but I've already patched this bugs ;)

  5. 5 Armonth (1 de agosto de 2007, 09:27:35 am) http://sigt.net

    Alex te has dejado un detalle importante: ¿alguna de estas vulnerabilidades afecta a la rama 2.0.x? Concretamente la última (2.0.11-RC3).

    He estado mirando el código y creo que salvo el penúltimo no hay riesgo por no existir el código afectado o por otros motivos (por ejemplo yo no tengo kubrick :-P ).

  6. 6 alex (1 de agosto de 2007, 10:15:09 am) http://www.buayacorp.com

    Armonth, a simple vista me parece es posible reproducir los bugs 2, 3 y 5 en la versión que mencionas.

  7. 7 Ubuzy (1 de agosto de 2007, 02:22:09 pm) http://www.casiunblog.com.ar

    Alex, cuantos son los fallos encontrados? el titulo de la entrada dice 7 y solo veo que hablas de 6 :S Gracias

  8. 8 alex (1 de agosto de 2007, 02:27:34 pm) http://www.buayacorp.com

    Me olvidé de poner este "Wordpress /options.php Persistant XSS Vulnerability", pero en mi opinión es lo mismo que "Wordpress /options.php Information Disclosure".

  9. 9 g30rg3_x (1 de agosto de 2007, 06:35:24 pm) http://g30rg3x.com/

    Hola alex, lleguando y checando de nuevo esta lluvia de bugs...

    sinceramente ninguno me parece tan severo como el usuario dice para la mayoria se requiere autenticacion-previa y/o interraccion media con lo cual para mi gusto son de bajo riesgo pero si de alto impacto, voy a ver si en unas horas trabajo en un parche mas completo para la 2.2 basado en el del /trunk ya que como sabes ahora a wordpress le interesa mas sacar los parches para el /trunk y no tanto para las otras ramas, si puedo tambien hare uno para la 2.0, asi que seguimos pendientes..

    Saludos

  10. 10 g30rg3_x (1 de agosto de 2007, 06:44:12 pm) http://g30rg3x.com/

    bueno ya esta la mayoria resuelto, eso me pasa por llegar a destiempo :P

    de todos voy a checar que hace falta pra nuestra rama

  11. 11 Alex (1 de agosto de 2007, 07:03:52 pm) http://alexseo.com/

    @Armonth
    Si afecta, revisa timeline de WordPress

  12. 12 alex (1 de agosto de 2007, 08:22:15 pm) http://www.buayacorp.com

    g30rg3_x, como dices, ninguno parece tan severo como este :P

    Por cierto, de antemano te agradezco el parche para 2.2.1 ;) , porque ahora que veo me faltaron corregir algunas cosas en el mío.

  13. 13 g30rg3_x (1 de agosto de 2007, 10:23:33 pm) http://g30rg3x.com/

    Bueno acabo de checar y terminar de subir los parches que hacen falta para la serie 2.2...

    Casi todos los bugs (o los que puedo ver mejor dicho) han sido cubiertos oficialmente para la rama 2.2 a excepción de dos uno relacionado al importe de links (4691) y el otro el error producido en error comments con numeros negativos (4692), he dejado para su revision (e inclusion) en el trac dos parches...
    http://trac.wordpress.org/attachment/ticket/4691/for_22.patch
    http://trac.wordpress.org/attachment/ticket/4692/for_22.patch

    A tus parches les falto un poco (muy poco) mas, al ratito hago una recoleccion de parches con archivos preparcheados y las diferencias y la publico en mi website...

    Saludos alex

  14. 14 g30rg3_x (2 de agosto de 2007, 10:55:51 am) http://g30rg3x.com/

    Hola alex...
    Hace unos momentos se aprobaron mis parches asi que ya estan las soluciones oficiales de manera completa para la rama 2.2, puedes checar las diferencias aqui...
    http://trac.wordpress.org/changeset?old_path=branches%2F2.2&old=5828&new_path=branches%2F2.2&new=5841

    Saludos alex..

  15. 15 alex (2 de agosto de 2007, 11:03:17 am) http://www.buayacorp.com

    Gracias por el aviso g30rg3_x, en un momento actualizo la entrada y el blog. :)

    Saludos

  16. 16 gafeman (3 de agosto de 2007, 05:51:41 am) http://www.viciao2k3.net/

    hola a todos,

    puede que me equivoque, pero creo que esto esta mal:

    @@ -305,6 +306,7 @@
    function update_option($option_name, $newvalue) {
    global $wpdb;

    + $name = preg_replace('/[^a-z\d_-]/i', '', trim($name));
    wp_protect_special_option($option_name);

    tendria que ser asi:

    $option_name = preg_replace('/[^a-z\d_-]/i', '', trim($option_name));
    wp_protect_special_option($option_name);

    gracias por publicar las rectificaciones !!!

  17. 17 alex (3 de agosto de 2007, 08:26:21 am) http://www.buayacorp.com

    Tienes toda la razón gafeman, pero como ya existe parche oficial me parece que ya no corregiré el mío.

9 Trackbacks

  1. Por meneame.net el 31 julio 2007 a las 6:54 pm

    7 nuevos problemas de seguridad en WordPress...

    Hace algunas horas acaban de reportar 7 problemas de seguridad en WordPress: 1. WordPress Persistant XSS Vulnerability in the Default Theme (v.2.2): Los parámetros para la imagen y color de la cabecera en el tema por omisión de WordPress (Kubrick) so...

  2. [...] acabo de leer en buayacorp hace algunas horas acaban de reportar 7 problemas de seguridad en [...]

  3. Por CalinSoft el 1 agosto 2007 a las 10:57 am

    7 nuevos problemas de seguridad en WordPres...

    (BuayaCorp) ha informa del reporte que hacen mencion a 7 nuevos problemas de seguridad en WordPress XSS y SQL Injection. Bastaría con aplicar los parches oficiales disponibles (4689, 4690, 4691 y 4692).

    ......

  4. Por El Primer gusano para Wordpress | La WeB de DragoN el 1 agosto 2007 a las 12:26 pm

    [...] en el trac de wordpress mas específicamente en los # 4689, 4690, 4691, 4692, tambien he recopilado gracias a buyacorp los archivos que tienes que reemplazar para solucionar este GRAVE fallo de seguridad para el [...]

  5. [...] 1: Mi tocayo Alex también hablo sobre el tema y tiene una descarga de parches para los usuarios de WordPress [...]

  6. Por g30rg3 Blog » Otra lluvia de bugs de WordPress el 2 agosto 2007 a las 12:46 am

    [...] mucho sobre ellas por que aparte de que son muy fáciles de entender alex concha ya lo ha hecho y pues volver a escribir lo escrito es algo tonto, también la pagina del autor lo dice muy [...]

  7. Por BloggingTom el 2 agosto 2007 a las 1:01 am

    Wurm fixt aktuelle WordPress-Lücken...

    Sieben neue Sicherheitslücken hat beNi in den letzten Tagen in der aktuellen WordPress-Version 2.1.1 entdeckt und publik gemacht. Doch nicht nur das: Er hat auch gleich einen “gutmütigen” Wurm geschrieben, der die Lücken patchen soll:
    ...

  8. Por SigT el 2 agosto 2007 a las 8:32 pm

    Siete fallos de seguridad para WordPress 2.2 y 2.0...

    La noticia no es “nueva” ya que es de hace unos días pero no la he tratado hasta ahora porque estaba ocupado revisando (dentro de mis limitaciones) código para ver cómo afectaba a la rama 2.0.x.

    Como sabeis actualmente se usan dos ramas...

  9. Por Problemas de seguridad en Wordpress | gEEK tHE pLANET el 3 agosto 2007 a las 12:49 am

    [...] en buayacorp me doy cuenta de estos “nuevos” problemas de [...]

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>