Skip to main content

Vulnerabilidad grave en WordPress

Hoy 28 de abril de 2015 se ha publicado una vulnerabilidad tipo zeroday de wordpres la cual afecta a todas las versiones.

Éste bug permite acceso total al cms para el atacante, permitiendo enviar spam entre otras cosas.

Aconsejamos actualizar cuanto antes su instalación de wordpress con la actualización de seguridad publicado hoy.

Saludos,

Elliot

Nueva vulnerabilidad en WordPress

Éste es mi primer Post en el blog, me presento, me llamo Elliot Morales, soy Ingeniero aeronautico de formación y programador y sysadmin de professión.

Recientemente se ha publicado una nueva vulnerabilidad en WordPress, en este caso un bug del tipo zeroday que solo afecta a los WordPress que tengan instalado el plugin “FancyBox for WordPress”.

Una vulnerabiliad zeroday es un error desconocido por los usuarios y por el creador del software que permite ejecutar código malicioso en el sistema, en este caso un atacante puede inyectar código al sistema para que los usuarios de MS Internet Explorer añadan un iframe en la pagina a 203koko.eu.

Mi consejo para los usuarios es no usar Internet Explorer, pero como nosotros somos sysadmins también podemos hacerlo mas fácil para los users que usan IE.

Os traigo un script que funciona en Cpanel.

En este caso es con el usuario root de mysql sin password

1
2
3
4
5
6
7
8
updatdb;locate fancybox.php|grep wp-content | awk -F'plugins' '{print $1}' | \
while read in; do \
UDB=`cat $in../wp-config.php |grep DB_NAME|cut -d"'" -f4`; \
TPF=`cat $in../wp-config.php |grep table_prefix|cut -d"'" -f2`; \
PLUGS=`mysql -uroot -D$UDB -se "SELECT option_value FROM "$(echo $TPF)"options WHERE option_name = 'active_plugins';"|cut -f1`; \
PLUGSC=$(php -r "\$var=unserialize('$PLUGS'); foreach(\$var as \$i=>&\$v){if(strpos(\$v,'fancybox.php')!==false)unset(\$var[\$i]);} echo serialize(\$var);") \
mysql -uroot -D$UDB -se "UPDATE "$(echo $TPF)"options SET option_value='"$(echo $PLUGSC)"' WHERE option_name = 'active_plugins';";\
done;unset UDB;unset TPF;unset PLUGS;unset PLUGSC;

Y en caso de que tengais password en el usuario root de MySQL:

1
2
3
4
5
6
7
8
updatdb;read -s -p Mysql root password: pwd;locate fancybox.php|grep wp-content | awk -F'plugins' '{print $1}' | \
while read in; do \
UDB=`cat $in../wp-config.php |grep DB_NAME|cut -d"'" -f4`; \
TPF=`cat $in../wp-config.php |grep table_prefix|cut -d"'" -f2`; \
PLUGS=`mysql -uroot -p$pwd -D$UDB -se "SELECT option_value FROM "$(echo $TPF)"options WHERE option_name = 'active_plugins';"|cut -f1`; \
PLUGSC=$(php -r "\$var=unserialize('$PLUGS'); foreach(\$var as \$i=>&\$v){if(strpos(\$v,'fancybox.php')!==false)unset(\$var[\$i]);} echo serialize(\$var);") \
mysql -uroot -p$pwd -D$UDB -se "UPDATE "$(echo $TPF)"options SET option_value='"$(echo $PLUGSC)"' WHERE option_name = 'active_plugins';";\
done;unset pwd;unset UDB;unset TPF;unset PLUGS;unset PLUGSC;

Y para acabar, el caso mas global para desactivar un plugin de wordpress a todas las cuentas de Cpanel (Que tengan wordpress y ese plugin instalado y activo, claro)

Este te va a pedir un archivo principal del plugin: en el caso de akismet por ejemplo es:
akismet/akismet.php

Aqui depende del plugin. Aún así igual os puede servir de utilidad, a mi me ha servido.

Sin password en root MySQL:

1
2
3
4
5
6
7
8
updatdb;read -p "Principal file of plugin:" plugin_file;locate $plugin_file|grep wp-content | awk -F'plugins' '{print $1}' | \
while read in; do \
UDB=`cat $in../wp-config.php |grep DB_NAME|cut -d"'" -f4`; \
TPF=`cat $in../wp-config.php |grep table_prefix|cut -d"'" -f2`; \
PLUGS=`mysql -uroot -D$UDB -se "SELECT option_value FROM "$(echo $TPF)"options WHERE option_name = 'active_plugins';"|cut -f1`; \
PLUGSC=$(php -r "\$var=unserialize('$PLUGS'); foreach(\$var as \$i=>&\$v){if(strpos(\$v,'$plugin_file')!==false)unset(\$var[\$i]);} echo serialize(\$var);") \
mysql -uroot -D$UDB -se "UPDATE "$(echo $TPF)"options SET option_value='"$(echo $PLUGSC)"' WHERE option_name = 'active_plugins';";\
done;unset pwd;unset UDB;unset TPF;unset PLUGS;unset PLUGSC;

Con password en MySQL root:

1
2
3
4
5
6
7
8
updatdb;read -p "Principal file of plugin:" plugin_file;read -s -p Mysql root password: pwd;locate $plugin_file|grep wp-content | awk -F'plugins' '{print $1}' | \
while read in; do \
UDB=`cat $in../wp-config.php |grep DB_NAME|cut -d"'" -f4`; \
TPF=`cat $in../wp-config.php |grep table_prefix|cut -d"'" -f2`; \
PLUGS=`mysql -uroot -p$pwd -D$UDB -se "SELECT option_value FROM "$(echo $TPF)"options WHERE option_name = 'active_plugins';"|cut -f1`; \
PLUGSC=$(php -r "\$var=unserialize('$PLUGS'); foreach(\$var as \$i=>&\$v){if(strpos(\$v,'$plugin_file')!==false)unset(\$var[\$i]);} echo serialize(\$var);") \
mysql -uroot -p$pwd -D$UDB -se "UPDATE "$(echo $TPF)"options SET option_value='"$(echo $PLUGSC)"' WHERE option_name = 'active_plugins';";\
done;unset pwd;unset UDB;unset TPF;unset PLUGS;unset PLUGSC;

Un saludo,
Elliot Morales