Una vulnerabilidad en el plugin ThemeGrill Demo Importer permite acceder a WordPress como administrador

Vulnerabilidad ThemeGrill Demo Importer
4
(4)

El pasado 6 de febrero se detectó y se reportó una vulnerabilidad en el plugin ThemeGrill Demo Importer, un complemento que viene integrado en un montón de temas gratuitos de WordPress, así como plantillas oficiales de ThemeGrill. Una vez reportado el error, el domingo 16 de febrero el desarrollador del plugin lanzó una nueva versión para corregir este fallo de seguridad.

Actualmente se estima que este plugin está activo en más de 100.000 instalaciones de WordPress (datos extraídos del repositorio oficial de WordPress), por lo que es una vulnerabilidad que podría afectar a la seguridad de muchas webs si consiguen eliminar el sitio y conseguir el acceso como administrador.

Una vulnerabilidad que permite obtener acceso como administrador a tu WordPress

Según el informe publicado por la empresa de seguridad web WebARX afecta a las versiones superiores a 1.3.4 y anteriores a 1.6.1, permitiendo a cualquier usuario no autenticado borrar toda la base de datos a su estado predeterminado, pudiendo tomar el control como administrador de la web.

Eso sí, para que suceda esto y puedan acceder con el usuario administrador a tu web, es necesario que haya registrado un usuario «admin» en la base de datos. De no haberlo, tan solo podrían realizar el borrado de la misma.

Detalles técnicos

Cuando se instala y se activa una plantilla de ThemeGrill, el plugin carga el archivo /includes/class-demo-importer.php que ejecuta la función reset_wizard_actions en admin_init en la línea 44.

De esta forma, admin_init se ejecuta no solo en el entorno de administración de WordPress, sino también en /wp-admin/admin-ajax.php, donde no es necesario que un usuario se autentique. Algo como:

 public function reset_wizard_actions() {
    global $wpdb, $current_user;

    if ( ! empty( $_GET['do_reset_wordpress'] ) ) {

        ///

        if ( 'admin' != $current_user->user_login ) {
            $user = get_user_by( 'login', 'admin' );
        }

        if ( empty( $user->user_level ) || $user->user_level < 10 ) {
            $user = $current_user;
        }

        // Drop tables.
        $drop_tables = $wpdb->get_col( sprintf( "SHOW TABLES LIKE '%s%%'", str_replace( '_', '\_', $wpdb->prefix ) ) );
        foreach ( $drop_tables as $table ) {
            $wpdb->query( "DROP TABLE IF EXISTS $table" );
        }

        // Installs the site.
        $result = wp_install( $blogname, $user->user_login, $user->user_email, $blog_public );

        // Updates the user password with a old one.
        $wpdb->update(
            $wpdb->users,
            array(
                'user_pass'           => $user->user_pass,
                'user_activation_key' => '',
            ),
            array( 'ID' => $result['user_id'] )
        );

        // Set up the Password change nag.
        $default_password_nag = get_user_option( 'default_password_nag', $result['user_id'] );
        if ( $default_password_nag ) {
            update_user_option( $result['user_id'], 'default_password_nag', false, true );
        }

        ///

        // Update the cookies.
        wp_clear_auth_cookie();
        wp_set_auth_cookie( $result['user_id'] );

        // Redirect to demo importer page to display reset success notice.
        wp_safe_redirect( admin_url( 'themes.php?page=demo-importer&browse=all&reset=true' ) );
        exit();
    }
}

Información extraída de WebARX.

Tal y como acabamos de ver, no se requiere autenticación y solo el parámetro do_reset_wordpress tiene que estar presente en cualquier URL que contenga «admin». Por ejemplo, basta con acceder a la URL www.tudominio.com/wp-admin/admin-post.php?do_reset_wordpress=1 y tu web estaría hackeada y tu base de datos vacía.

Una vez hackeado es posible rellenar la base de datos con la configuración predeterminada y establecer una nueva contraseña para el usuario «admin». Como ya te hemos comentado, para que esto suceda es necesario que exista este tipo de usuario creado en WordPress.

También te puede interesar: Cómo proteger el login de WordPress

¿Tengo que tener ThemeGrill Demo Importer instalado en mi web?

Este plugin ha sido diseñado con el objetivo de facilitar la personalización de cualquier tema de ThemeGrill incluyendo contenido demo, tanto a nivel de copy como widgets. Esto incluye la importación de posts de demostración, páginas, imágenes,  custom post type, menús, etiquetas, categorías e incluso comentarios.

Si ya tienes tu web hecha no es necesario que lo mantengas en tu web, ni siquiera desactivado. Como te decimos siempre, si tienes algún plugin instalado, pero que ya no estás utilizando, lo mejor de todo es que lo elimines por completo de tu instalación para evitar males mayores.

Aunque un plugin esté desactivado, puede suponer un riesgo potencial para tu web. Por ejemplo, en este caso, aunque esté desactivado si no lo actualizas o lo eliminas de tu instalación un usuario malintencionado podría aprovechar este agujero de seguridad para hacer de las suyas.

Por tanto, puede ser que haya sido un complemento que te haya ayudado con la creación de tu web, pero si ya tienes tu sitio encaminado, te recomendamos que lo desinstales el plugin de WordPress por completo.

¿Tienes tu hosting con nosotros?

En LucusHost nos tomamos la seguridad de tu web muy en serio, es por ello que ya hemos llevado a cabo las medidas necesarias para evitar que tu web sea víctima de esta vulnerabilidad.

Nuestro equipo de sistemas ha eliminado este complemento de todas las instalaciones de WordPress en nuestros planes de Hosting web y Hosting SSD. Como te hemos indicado, es un plugin de un solo uso por lo que no va a afectar en absoluto al funcionamiento de tu página.

¿Tienes dudas? Ya sabes que nuestro equipo de soporte disponible 24/7 para echarte una mano en todo lo que necesites.

¡Puntúa este artículo!

Total votos: 4. Promedio: 4

No hay comentarios

Escribe un comentario