Trabajo a diario con WordPress y puedo decir que ya he visto esta clase de mensajes hasta el hastazgo:

  • You do not have sufficient permissions to update plugins for this site.
  • You do not have sufficient permissions to access this page.
  • You do not have sufficient permissions to install themes on this site.

Y seguramente también se encuentren con su versión en español diciéndoles que no tienen permisos para actualizar su blog, plugins o themes.

El porque

Ahora bien, y ¿de donde proviene este error? la respuesta es mas simple de lo que podríamos imaginar. Resulta que al actualizar algunos contenidos de nuestro blog, muchas veces WordPress no llega a completar la generación de los permisos en nuestra base de datos para algunos usuarios y es por eso que en el camino nos deja sin poder actualizar plugins, themes o inclusive el mismísimo blog.

Manos a la obra

Antes de comenzar a meter mano en la base de datos vamos a analizar un poco mas el error, y demás esta decir que ustedes son los únicos responsables por los cambios que realicen en su blog, hagan backup!. En mi ultimo caso me encontré con el mensaje “You do not have sufficient permissions to update plugins for this site“.

Como ya mencione, el problema esta en la base de datos y mas precisamente en la tabla wp_options (El prefijo wp_ puede variar en tu instalación) dentro de la entrada cuyo option_name es igual a wp_user_roles; si vemos su contenido seguramente nos encontraremos con algo como lo siguiente:

A simple vista puede no resultar claro que es toda esa información y cual es su función, ya que la misma se encuentra serializada. Pero con la ayuda de herramientas en linea como la siguiente podrán darse una mejor idea de su contenido:

http://www.functions-online.com/unserialize.html

Una vez deserializada la información, dentro del array capabilities veremos cuales son los permisos con los que cuenta nuestro usuario, y en mi caso al ser un problema de permisos a la hora de actualizar plugins debía buscar una cadena de texto similar a la siguiente:

s:14:”update_plugins”;b:1;

Para que se vayan familiarizando un poco con esto, del texto anterior
podemos descifrar que la clave es un valor string de 14
caracteres (s:14) cuyo nombre es "update_plugins" y el valor
 boolean de la misma es true (b:1).

Como no hallé dicho valor, debí agregar el mismo de forma manual. Para agregar o quitar valores dentro de esta cadena primero debemos mirar al comienzo de la misma, donde dice:

a:5:{s:13:”administrator”;a:2:{s:4:”name”;s:13:”Administrator”;s:12:”capabilities”;a:60:

El último numero indica la cantidad de opciones, por lo que si vamos a agregar una mas deberemos incrementar ese numero en uno, por lo que ahora quedaría en a:61. Una vez realizado ese cambio procederemos a agregar la nueva cadena después de la primer llave luego de a:61. Algo así:

a:5:{s:13:”administrator”;a:2:{s:4:”name”;s:13:”Administrator”;s:12:”capabilities”;a:61:{s:14:”update_plugins”;b:1;

Una vez realizada la modificación ya podremos guardar los cambios y probar nuevamente si nuestra instalación de WordPress nos deja o no actualizar nuestro sistema.

Esta es una solución que me ha resultado siempre, en el caso de deberse a otra limitación de permisos no tienen mas que deserializar la información y ver que es lo que falta en el listado de permisos. Los nombres de las claves son bastante intuitivos por lo que creo que no tendrán mayores problemas en identificarlas.

Recientemente fue descubierta una vulnerabilidad de inyección de código SQL en WordPress 3.0.1 y versiones anteriores. Al contrario de lo que dicen algunos sitios esta falla no afecta a la versión 3.0.2 ni tampoco a WordPress 3.1 alpha.

Para poder explotar esta vulnerabilidad el atacante necesita contar con permisos de autor,  eso quiere decir que debería poder publicar/editar entradas en el blog, lo que reduce un poco las probabilidades de una intrusión aunque es recomendable comprobar los permisos de los usuarios que estén registrados en su sitio.

Inyección de código SQL en WordPress 3.0.1

Para solucionar este problema se recomienda actualizar a la ultima versión disponible, la 3.0.2, que ya ha sido actualizada y no es vulnerable a esta falla.

De todas maneras quienes quieran realizar el parche manualmente, pueden actualizar el archivo “wp-includes/comment.php”, mas precisamente en 1644 en WordPress 3.0.1, en donde podrán encontrar el error dentro de la función “do_trackbacks”.

Código a buscar:

			if ( !in_array($tb_ping, $pinged) ) {
				trackback($tb_ping, $post_title, $excerpt, $post_id);
				$pinged[] = $tb_ping;
			} else {
				$wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = %d", $post_id) );
			}

Reemplazar por:

			if ( !in_array($tb_ping, $pinged) ) {
				trackback($tb_ping, $post_title, $excerpt, $post_id);
				$pinged[] = $tb_ping;
			} else {
				$wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $tb_ping, $post_id) );
			}

Solo para recalcar, este error fue parte de las correcciones aplicadas en la versión 3.0.2, por lo que los sitios especializados en WordPress deberían chequear el changelog de las versiones antes de sembrar el pánico 😉

Enlaces relacionados:

WordPress: Information Disclosure via SQL Injection Attack
http://blog.sjinks.pro/wordpress/858-information-disclosure-via-sql-injection-attack/

Parche aplicado en la versión 3.0.2 (Changeset 16625)
http://core.trac.wordpress.org/changeset/16625

Vía Geekeries.fr

WordpressJose Carlos Norte hace publico en su blog Desvaríos informáticos, un error en el archivo wp-trackback.php de WordPress que le permitiria a un atacante malicioso realizar una denegación de servicio a un blog determinado corriendo bajo este sistema.

Hasta la fecha no hay parche oficial por lo que se recomienda aplicar manualmente la solución propuesta por Jose actualizar a la versión 2.8.5.

  1. Abrir el archivo wp-trackback.php
  2. Buscar la línea número 45 aproximadamente en donde dice:
    $charset = $_POST['charset'];
  3. Reemplazarla por el siguiente código:
    $charset = str_replace(",","",$_POST['charset']);
    if(is_array($charset)) { exit; }
  4. Guardar el archivo, y ya con eso deberíamos estar a salvo por ahora.

Aclaración, no sirve de nada desactivar los trackbacks desde WordPress, debido a que el error se encuentra antes de realizarse esa comprobación.

Actualicen, no sean vagos que el exploit ya ha sido publicado y es vulnerable la última versión (2.8.4) inclusive.

El francés Laurent Gaffié ha descubierto una vulnerabilidad que afecta a la rama de versiones 2.8.x de WordPress, incluyendo obviamente hasta la última publicada (2.8.3). El error se encuentra en el archivo wp-login.php, y el mismo podría ser aprovechado por un atacante de forma remota llegando a bloquear temporalmente la cuenta del administrador, impidiendo así el acceso de forma correcta a la administración del blog.

Para los que no estén familiarizados con esta plataforma, cuando un usuario solicita una nueva clave se le envía a su correo (el que uso al crear la cuenta) un enlace para confirmar el proceso, luego de eso le llega a uno la nueva contraseña. Según el reporte, debido a este error bastaría con ingresar cierta URL desde cualquier navegador para lograr que WordPress reinicie la clave del administrador sin autorización previa del mismo, o sea salteando el paso de la confirmación vía correo.

No hay parche oficial hasta el momento, Si lo hay 🙂 . Se ha corregido la vulnerabilidad en la versión de desarrollo, por lo que se les aconseja actualizar el archivo wp-login.php, ya sea manualmente o descargándose la versión actualizada.

Actualización manual:

  • Abrir el archivo wp-login.php
  • Buscar el texto:
    if ( empty( $key ) )
  • Reemplazarlo por el siguiente código:
    if ( empty( $key ) || is_array( $key ) )
  • Guardar y listo.

Vía: http://core.trac.wordpress.org/changeset/11798

Versión corregida de wp-login.php:
http://core.trac.wordpress.org/changeset/11798?format=zip&new=11798

Si bien el impacto de esta vulnerabilidad es de nivel medio, se recomienda actualizar de todas formas.

Actualización: Ya esta disponible para la descarga una actualización de seguridad, lo cual deja la version 2.8.4 como la ultima segura hasta la fecha.
http://wordpress.org/development/2009/08/2-8-4-security-release/

Ozh, un chico francés, se puso a realizar capturas del panel de escritura de WordPress desde la versión 0.7.1 hasta la 2.7. Es interesante ver cómo fue evolucionando en estos 5 años que pasaron desde su lanzamiento allá por Mayo de 2003. En su blog se pueden leer sus comentarios acerca de los cambios entre versión y versión.

Enlaces relacionados:

A Journey Through Five Years of WordPress Interface
http://planetozh.com/blog/2008/12/a-journey-through-five-years-of-wordpress-interface/

Galeria en Flickr
http://www.flickr.com/photos/thespotlighteffect/sets/72157611361361112/

Vía | Thenextweb