Vulnerabilidad de inyección de SQL descubierta y corregida en Slimstat Analytics y Paid Memberships Pro

Durante una auditoría interna de los plugins Slimstat Analytics y Paid Memberships Pro, descubrimos dos vulnerabilidades de inyección de SQL que podrían permitir a usuarios con pocos privilegios, como los suscriptores, filtrar información sensible de la base de datos de un sitio.

Si se explotara, la vulnerabilidad podría dar a los atacantes acceso a información privilegiada de las bases de datos de los sitios afectados (por ejemplo, nombres de usuario y contraseñas con hash).

Informamos de las vulnerabilidades a los autores de los plugins, que recientemente han publicado las versiones 4.9.3.3 de Slimstat Analytics y 2.9.12 de Paid Memberships Pro para solucionarlas. Te recomendamos encarecidamente que actualices los plugins afectados a sus respectivas versiones más recientes y que tengas en tu sitio una solución de seguridad consolidada, como Jetpack Security.

Inyección de SQL para suscriptores o usuarios con más privilegios en Slimstat Analytics

Nombre del pluginSlimstat Analytics
URI del pluginhttps://wordpress.org/plugins/wp-slimsta
Autorhttps://wp-slimstat.com
Versiones afectadasTodas las versiones entre la 4.1 y la 4.9.3.3
CVE-IDCVE-2023-0630
ID de WPScanb82bdd02-b699-4527-86cc-d60b56ab0c55
CVSSv3.17.7
// Init the database library with the appropriate filters
        if ( strpos ( $_content, 'WHERE:' ) !== false ) {
            $where = html_entity_decode( str_replace( 'WHERE:', '', $_content ), ENT_QUOTES, 'UTF-8' );
        }
        else{
            wp_slimstat_db::init( html_entity_decode( $_content, ENT_QUOTES, 'UTF-8' ) );
        }

        switch( $f ) {
            case 'count':
            case 'count-all':
                $output = wp_slimstat_db::count_records( $w, $where, strpos( $f, 'all') === false ) + $o;
                break;

El slimstat shortcode permite a los usuarios añadir cierta lógica de filtrado en forma de instrucciones SQL WHERE buscando un token «WHERE:» dentro del contenido del shortcode. Esta funcionalidad es problemática porque, como hemos informado anteriormente en otro aviso de vulnerabilidad, cualquier usuario que haya iniciado sesión en un sitio, como los suscriptores, puede procesar shortcodes en WordPress.

Una prueba de concepto para aprovechar esta vulnerabilidad estará disponible en esta entrada de WPScan de la vulnerabilidad.

Inyección de SQL para suscriptores o usuarios con más privilegios en Paid Memberships Pro

Nombre del pluginPaid Memberships Pro
URI del pluginhttps://wordpress.org/plugins/paid-memberships-pro/
Autorhttps://www.paidmembershipspro.com/
Versiones afectadasTodas las versiones entre la 1.5.5 y la 2.9.12
CVE-IDCVE-2023-0631
ID de WPScan19ef92fd-b493-4488-91f0-e6ba51362f79
CVSSv3.17.7
if($hasaccess && !empty($delay))
    {        
        //okay, this post requires membership. start by getting the user's startdate
        if(!empty($levels))
            $sqlQuery = "SELECT UNIX_TIMESTAMP(CONVERT_TZ(startdate, '+00:00', @@global.time_zone)) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND membership_id IN(" . implode(",", array_map( 'esc_sql', $levels ) ) . ") AND user_id = '" . esc_sql( $current_user->ID ) . "' ORDER BY id LIMIT 1";
        else
            $sqlQuery = "SELECT UNIX_TIMESTAMP(CONVERT_TZ(startdate, '+00:00', @@global.time_zone)) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND user_id = '" . esc_sql( $current_user->ID ) . "' ORDER BY id LIMIT 1";

Aunque a primera vista pueda parecer que el shortcode `membership` escapa correctamente la variable $levels antes de concatenarla a una consulta SQL, el contenido que añade no se inserta en el contexto de una cadena. Esto significa que un atacante puede aprovechar esta función para inyectar instrucciones SQL, siempre que no contengan comillas.

Dado que cualquier usuario que haya iniciado sesión, como los suscriptores, puede procesar shortcodes, esto permite a los atacantes con pocos privilegios filtrar información sensible de la base de datos, como nombres de usuario y contraseñas con hash.

Una prueba de concepto para aprovechar esta vulnerabilidad estará disponible en esta entrada de WPScan de la vulnerabilidad.

Conclusión

¡Te recomendamos que compruebes qué versiones de los plugins utiliza tu sitio y, si se encuentran dentro de los rangos afectados, los actualices cuanto antes!

En Jetpack, nos esforzamos para garantizar que tus sitios web estén protegidos frente a este tipo de vulnerabilidades. Te recomendamos que tengas un plan de seguridad para tu sitio que incluya el análisis de archivos maliciosos y copias de seguridad. Jetpack Security es una excelente opción de seguridad de WordPress para garantizar la seguridad de tu sitio y de sus visitantes.

Créditos

Investigador original: Marc Montpas

Gracias al resto del equipo de WPScan por sus comentarios, ayuda y correcciones.

Explora las ventajas de Jetpack

Descubre cómo Jetpack puede ayudarte a proteger, acelerar y hacer crecer tu sitio de WordPress.

Explorar planes

¿Tienes alguna pregunta?

La sección de comentarios está cerrada para este artículo, pero seguimos aquí para ayudarte. ¡Visita el foro de soporte y estaremos encantados de responder a tus preguntas!

Ver foro de soporte