Skip to main content

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *