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
Herramientas/GitHubGitHub/aorozco-sys/cve-2026-90907
Autenticación y AutorizaciónEscáneres de VulnerabilidadesAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de Penetración
GitHubaorozco-sys/cve-2026-90907

CVE-2026-90907

CLI de Python que detecta y explota CVE-2026-90907, un bypass de autorización en Joomla! com_users que permite la creación de cuentas sin autenticación; modo de comprobación no destructivo más PoC.

Ver Repositorio
11hace 1 mesAú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-2026-90907 — Creación no autorizada de cuentas de usuario en Joomla! CMS

Python Severity Fixed

SOLO PARA PRUEBAS DE SEGURIDAD AUTORIZADAS. Ejecutar el modo de explotación contra sistemas que no son de su propiedad o para los que no cuenta con permiso escrito explícito para probar es ilegal. El modo predeterminado (CHECK) no es destructivo y no crea nada.

Herramienta CLI que detecta y (opcionalmente, con -U) explota CVE-2026-90907, una omisión de autorización de severidad media (CVSS 6.9) en el núcleo de Joomla! CMS que permite a un atacante remoto no autenticado desencadenar la creación no autorizada de cuentas de usuario a través del controlador com_users → profile.save — incluso cuando el registro público está deshabilitado en la Configuración Global.

Resumen de la vulnerabilidad

CampoValor
ID de CVECVE-2026-90907
SeveridadMedia — CVSS 6.9
TipoOmisión de autorización / control de acceso inadecuado (CWE-862)
ComponenteComponente com_users, tarea profile.save
Vector de ataqueRemoto, no autenticado, POST de dos pasos en la misma sesión
Corregido enJoomla! 5.4.9 y 6.1.4 (versión de seguridad, 2026-09-29)

Versiones afectadas

Según el boletín de seguridad de Joomla! (2026-09-29) y las fuentes de avisos públicos:

  • Joomla! 1.5.0 – 5.4.8
  • Joomla! 6.0.0 – 6.1.3

Joomla! 3.x también está afectado pero se encuentra al final de su vida útil (End-of-Life): no recibirá un parche oficial — planifique una migración. La comprobación del banner de versión de la herramienta es informativa; el veredicto es conductual (véase más abajo).

Impacto

La cuenta controlada por el atacante es una cuenta de front-end con bajos privilegios y sin acceso administrativo ni al backend. Sin embargo, esto permite a un atacante:

  • Crear cuentas incluso cuando el registro está explícitamente deshabilitado
  • Reservar nombres de usuario / direcciones de correo electrónico
  • Desencadenar inesperadamente plugins de enganche (hook) de registro
  • Sondear la lógica interna de la aplicación como una sesión autenticada

Causa raíz

ProfileModel::save() solo hace unset() de $data['username'] cuando el nombre de usuario se considera conforme. isUsernameCompliant se deriva del estado de usuario com_users.edit.profile.data, que el controlador rellena con la solicitud completa cuando falla la validación del formulario. El controlador tampoco verifica el estado de inicio de sesión de la solicitud entrante. Por lo tanto, dentro de una sesión de invitado:

  1. W1 (semilla) — POST con un nombre de usuario no conforme y sin privacyconsent → la validación falla → el nombre de usuario sucio se persiste en el estado de usuario de la sesión (todavía no se crea nada).
  2. W2 (explotación) — misma sesión, reenviar con un nombre de usuario limpio más jform[privacyconsent][privacy]=1 → se omite la protección unset() → INSERT INTO #__users → redirección 303 con user_id > 0.
  3. Verificación diferencial de inicio de sesión — POST user.login (el nombre del campo es password, no passwd) con la contraseña correcta frente a una incorrecta y leer el mensaje flash: correcta → "you cannot access the private section" (autenticación OK, ACL bloquea) / incorrecta → "do not match". El diferencial es la evidencia.

Instalación

git clone https://github.com/aorozco-sys/CVE-2026-90907.git
cd CVE-2026-90907
pip install -r requirements.txt   # only dependency: requests

Uso

# CHECK mode (default) — non-destructive: never sends consent, never creates an account
python3 joomla_cve_2026_90907.py https://ejemplo.com

# Verbose CHECK (full request/response log on stderr)
python3 joomla_cve_2026_90907.py https://ejemplo.com --no-color -v

# EXPLOIT mode (-U) — creates a real account in #__users (authorized targets only!)
python3 joomla_cve_2026_90907.py https://ejemplo.com \
    -U audit.user -E [email protected] -N "CVE Audit"

# Through a proxy (e.g. Burp Suite) with a custom timeout
python3 joomla_cve_2026_90907.py https://ejemplo.com -U audit.user \
    --proxy http://127.0.0.1:8080 --timeout 30

# Exploit without the differential login verification
python3 joomla_cve_2026_90907.py https://ejemplo.com -U audit.user \
    --no-verify-login

Flags

FlagDescripción
TARGETURL base (normalizada; sin barra final)
-U/--usernameHabilita el modo EXPLOIT. Sin -U → CHECK no destructivo
-P/--passwordPredeterminado: generado con secrets, 16 caracteres alfanuméricos+símbolos, siempre se imprime
-E/--emailPredeterminado: <username>@example.invalid
-N/--namePredeterminado: CVE Audit
-o/--outputDirectorio de evidencias (predeterminado evidence_cve90907_<ts> bajo el cwd)
--proxy URLProxy para las peticiones (Burp: http://127.0.0.1:8080)
--timeoutPredeterminado 20 s
--uaUser-Agent (predeterminado cve-2026-90907-audit/1.0)
--no-verify-loginOmite el diferencial de login (modo exploit)
--verify-sslVerifica TLS (predeterminado: no verificar)
--no-colorSin colores ANSI
-v/--verboseRegistro completo de req/resp en stderr

Códigos de salida (compatibles con CI)

CódigoSignificado
0Ok / no vulnerable / desconocido
1Vulnerable (LIKELY en check, CONFIRMED en exploit)
2Error operativo (red, dependencia, etc.)

Veredictos

  • VULNERABLE (LIKELY) — check: token OK + W1 procesado de forma anónima (303 con profile en Location, sin redirección al login) + flash de error de validación (p. ej. mensaje de política de privacidad requerida). La confirmación definitiva = modo exploit.
  • NOT VULNERABLE (behavioral) — W1 redirige al login o responde 401/403/404: procesamiento anónimo bloqueado.
  • UNKNOWN — señales faltantes (sin token, versión ilegible, etc.). Las carencias se listan en la consola y en summary.json.
  • VULNERABLE (CONFIRMED) — exploit: Location con user_id > 0 tras W2.

Artefactos de evidencia

Cada ejecución escribe un directorio -o con marca de tiempo que contiene 00_token.txt, 01_version.txt, 02_w1_seed.txt, 03_w2_exploit.txt, 04_login_correct.txt, 05_login_wrong.txt y summary.json. Cada archivo registra la REQUEST completa (método/URL/cabeceras clave/cuerpo), la RESPONSE (estado, Location, Server, flash extraído, primeros 500 bytes del cuerpo) y marcas de tiempo ISO — listo para adjuntar a un informe de pentest.

Seguridad operativa

  • El modo CHECK nunca envía privacyconsent y usa un nombre de usuario no conforme (probe()): el guardado falla por las reglas del formulario y nada se persiste.
  • Protección de aborto: si W1 alguna vez devolvió user_id > 0 (no debería), el modo exploit aborta antes de W2.
  • Tras un exploit exitoso, la herramienta imprime una advertencia de limpieza: elimine la cuenta creada mediante Joomla Admin → Users (esto también elimina la fila user_usergroup_map).

Remediación

  • Actualice las instancias en producción a Joomla! 5.4.9 o 6.1.4 de inmediato.
  • En sitios donde el registro estaba deshabilitado, ordene los Usuarios del backend por fecha de registro y audite el grupo predeterminado en busca de cuentas no reconocidas creadas antes del parcheo.

Referencias

Descargar herramienta