13dic
14

Alojamiento Wordpress con Soporte

codigo matrix hackeado

Nos avisa el bueno de Andrew Nacin de un grave error en sitios que han actualizado a WordPress 3.5 que, aunque no afecta a todos, es un potencial peligro de inyecciones SQL, así que no hay que tomarlo con ligereza.

El asunto es que hay usuarios que, debido a plugins o temas, están recibiendo un aviso bastante feo, este:

“PHP Warning: Missing argument 2 for wpdb::prepare().”

Pues bien, como se ha apuntado en los foros de soporte, esto es debido a que algo o alguien (un plugin) está usando incorrectamente la función $wpdb->prepare. Es un aviso de algo gordo, porque también indica un uso indebido de prepare(), y eso es un riesgo de seguridad.

No es un error de WordPress, más bien al revés, pues el equipo de desarrollo ha preferido que estos errores se muestren a que tengamos un agujero de seguridad por un plugin y no nos enteremos, así que en realidad está hecho por nuestro bien, mal que le pese a algún desarrollador que ahora tendrá que revisar su código.

Un ejemplo de esto sería esta línea de código en un plugin:

$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->comments SET comment_parent=$parentID WHERE comment_ID=$commentID;" ) );

El problema es que no se ha usado la declaración de prepare correctamente, pues incluye las variables $parentID y $commentID directamente en el SQL. Para hacerlo bien se tendrían que usar “placeholders” y luego ya incluir las variables.

El ejemplo anterior es un código peligroso, ya que conlleva la posibilidad de que abra la puerta a un exploit de inyección SQL, o sea, el primer paso para hackear tu sitio web.

El código anterior se puede solucionar de este modo:

$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->comments SET comment_parent=%d WHERE comment_ID=%d;", $parentID, $commentID ) );

Como ambos se supone que son integradores, se han reemplazado las variables en la declaración con el %d, y luego se ponen las variables al final de la declaración prepare(). Así es como se supone que se debe usar prepare. Si fueran cadenas entonces usas %s.

O sea, que si quieres arreglar momentáneamente el error tienes que encontrar la línea de código con el problema y corregirla. Con eso eliminas el exploit y el mensaje de aviso tan feo.

Por supuesto, lo anterior es un apaño temporal que solo te sirve a ti, no a toda la comunidad ni a WordPress en su conjunto, lo que hay que hacer en realidad si ves este error es lo siguiente:

  1. Desactivar todos los plugins
  2. Ir activando uno a uno hasta detectar el que provoca el error
  3. Avisar al desarrollador indicándole el enlace del artículo de Andrew Nacin para que lo arregle y suba una versión segura

Lo mismo también puede pasar con un tema WordPress así que si tras hacer lo anterior sigue el error cambia de tema para comprobarlo.

La peor solución es ocultar los errores, aunque puedes hacerlo simplemente añadiendo estas líneas al fichero wp-config.php:

ini_set( 'display_errors', false );
error_reporting( 0 );

Un ejemplo de este error, lamentablemente, es el plugin Akismet, pues aunque acaban de actualizalo ahora mismo y soluciona el fallo deberían haber estado más pendientes, por la estrecha relación de Automattic con el desarrollo de WordPress.


Valora este artículo para mejorar la calidad del blog ...

MaloPobreNo está malMe gustaExcelente (sin valoración aún)
Loading...Loading...
ba37402148979847c0bcf5b9710471b3
Share

Anúnciese aquí »


  • http://twitter.com/iBlogLabs iBlogLabs

    Fernando me gustaria saber si en el repositorio no hay un filtro donde se verifique que los plugins usan bien la api de WP y no crean vulnerabilidad? Digo, si no es asi deberian ser mas rigurosos a la hora de aceptar plugins en el repositorio.

    • http://tellado.es/ Fernando

      Lo hay pero no es perfecto, un tremendo ejemplo negativo es Akismet, que pecaba de esto siendo de Automattic

  • http://masalladelared.com/ Patrick Muñoz

    Donde sale el mensaje? Lo digo porque yo también uso Nexgen Gallery y no ve el mensaje de error por ningún lado.

    • vive2

      Eso me ha salido al actualizar wp 3.5 y nexgen gallery 1.9.8, si no has actualizado nexgen no hay problema de momento, por lo que el fallo está en nexgen gallery y no en wp 3.5.
      De todas formas si sigues el hilo del enlace verás como los desarrolladores hacen preguntas sobre la configuración del server etc, es decir que estan recopilando la maxima informacion para sacar un parche.

    • vive2

      Eso me ha salido al actualizar wp 3.5 y nexgen gallery 1.9.8, si no has actualizado nexgen no hay problema de momento, por lo que el fallo está en nexgen gallery y no en wp 3.5.
      De todas formas si sigues el hilo del enlace verás como los desarrolladores hacen preguntas sobre la configuración del server etc, es decir que estan recopilando la maxima informacion para sacar un parche.

      • http://masalladelared.com/ Patrick Muñoz

        Si, pero donde sale ese mensaje? Lo digo por que no lo veo por ningún lado…

        • byhanzo

          Sale en la parte de arriba en el panel de control/administración de WordPress. Es muy claro y se ve siempre hasta que no se solucionen los fallos, así que si no lo ves no estará dando el fallo.

          A mi me a salido y recomiendo actualizar todos los plugins primero antes de actualizar WordPress ya que muchos han parcheado el error. Una vez que he actualizado los plugins me ha desaparecido el mensaje sin tocar yo nada de código ni nada, por lo que actualizad los plugins porque en la mayoría lo han solucionado.

  • Arthur Shelby

    Lo primero que te dicen en el college “NO COCATENES SENTENCIAS DE SQL” y lo primero que haces :S

  • latrasweb.net

    Creo que wordpress asume algo que no es verdad.
    Puedes haber validado y sanado( como es recomendable hacer )
    tus variables antes de formar la consulta.
    Siendo por tanto innecesario los placeholders.

  • http://tellado.es/ Fernando

    La versión no tiene ningún problema a este respecto, sino plugins que tienen código inseguro

  • Armansio

    ¿Para cuando una actualizacion?

    • http://tellado.es/ Fernando

      Lo que necesita actualizarse son los plugins, no WordPress

  • alexander

    yo estoy usando esa version….

  • http://imojito.com/ iMojito

    Hola,
    muchos hostings desactivan estos mensajes por defecto. Yo me he topado con estos mensajes en el syslog pero bien podrían estar en los logs de apache o lo que tengáis configurado en el php.ini

    La versión actual de Disqus para wordpress muestra esta advertencia. No hay que alarmarse porque los riesgos son los mismos que antes de utilizar wordpress 3.5, solo que antes no lo sabías.