lunes, 31 de marzo de 2014

WordPress Backdoors VI: bloquear actualización de un plugin

¡Saludos!

   Continuamos con esta saga de post sobre backdoors en WordPress. Antes de empezar, quisiera recordad que este viernes 4 de Abril es la HighSec Con III en Madrid, y que tanto @JorgeWebsec como yo vamos a estar por allí para solventar cualquier duda que haya con WordPressa Security Plugin. ¡Vayamos al grano de esta entrada!


    Cuando se realiza una intrusión en una plataforma WordPress, o ésta es atacada por un malware automatizado, se va a intentar siempre mantener la permanencia y el control de sistema comprometido el mayor lapso de tiempo posible. Esto puede convertirse en un gran impedimento si, por ejemplo, la intrusión se ha realizado (como en la mayoría de los casos) por un plugin vulnerable y los desarrolladores sacan una actualización que solventa el problema. ¿Qué pasaría si hemos incluido el malware o el backdoor en ese plugin? Que al actualizar, por suerte para nosotros, se eliminaría. A menos que el atacante haya usando alguna triquiñuela.

    Como todo en esta vida hay dos vías: la vía sencilla y vía elaborada. Cada una con sus pro y sus contras. El método más sencillo es sin duda editar, dentro del código fuente del plugin al que queremos deshabilitarle las actualizaciones, la versión. En la cabecera del plugin debemos de poner un número elevado para que nunca haya una versión superior a la nuestra. El problema de usar esta técnica, simple y eficaz, es que el administrador cuando visite la sección de plugins en el panel de administración verá que el plugin tiene una versión muy alta. Poco probable que se cuenta si usamos cifras lógicas. No como ocurrió en este caso:

(llamadme escéptico, pero creo que Akismet no va por la versión 99.5.8)

   El otro método, más elaborado, tiene que ver en cómo WordPress comprueba si hay una versión disponible. Para esta tarea WordPress manda una petición cada 12 horas para realizar la comprobación, y los datos son guardados en la tabla wp_options, en un campo de nombre _site_transient_update_plugins. En realidad lo que tenemos en este campo es un transient, que de forma simple podemos entenderlos como datos que quedan "cacheados" por un tiempo limitado en la base de datos para poder acceder a ellos rápidamente. Si le echais un ojo, vereis que es interesante. Para más info sobre cómo trabajar con transient, podeis visitar la documentación de la Transients API de WordPress ( https://codex.wordpress.org/Transients_API ).



  Añadiendo este sencillo código (extraído de una respuesta de StackOverflow) podemos eliminar la información de actualización del transient, de tal forma que nunca más le aparecerá la notificación de que existe un update :)

add_filter('site_transient_update_plugins', 'remove_update_notification_1234');
function remove_update_notification_1234($value) {
    unset($value->response[ plugin_basename(__FILE__) ]);
    return $value;
}


  ¡Nos vemos por la HighSec CON!

Byt3z!
5 0verl0ad Labs: WordPress Backdoors VI: bloquear actualización de un plugin ¡Saludos!    Continuamos con esta saga de post sobre backdoors en WordPress. Antes de empezar, quisiera recordad que este viernes 4 de Abr...
< >