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
phpmyadmin-config-set-2fa — phpMyAdmin 5.2.3 - Alta - Remota - 2FA - config/set borra la autenticación de dos factores | Kitploit
Herramientas/GitHubGitHub/abraxas/phpmyadmin-config-set-2fa
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónAutenticaciónLabs y Práctica
GitHub
abraxas/phpmyadmin-config-set-2fa

phpmyadmin-config-set-2fa

phpMyAdmin 5.2.3 - Alta - Remota - 2FA - config/set borra la autenticación de dos factores

Ver Repositorio
32hace 9 díasAú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

Abraxas Labs - phpmyadmin-config-set-2fa

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-config-set-2fa

Análisis: https://abraxaslabs.tech/research/phpmyadmin-config-set-2fa

phpmyadmin-config-set-2fa

Clase: Privilegio residual / falta de step-up Alcance: Remoto

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

POST index.php?route=/config/set escribe cualquier preferencia incluida en la lista de permitidas, incluida 2fa. UserPreferences::persistOption no realiza ninguna validación. Settings -> Two-factor sigue llamando a TwoFactor::check(true) antes de eliminar el factor. /config/set no lo hace.

Una sesión con sesión iniciada, o XSS/CSRF que pueda enviar por POST el token de la página, puede enviar key=2fa y value=null. El siguiente inicio de sesión con contraseña no tiene TOTP, WebAuthn ni solicitud Simple. Eliminación duradera, no un salto de una sola petición.

IDaún sin CVE
ClasePrivilegio residual / falta de step-up
AlcanceRemoto (inicio de sesión autenticado por cookie; se requiere token CSRF)
CWECWE-620
CVSSAlto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProductophpMyAdmin
Afectado5.2.3 etiqueta RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Autenticacióninicio de sesión por cookie. Se requiere token CSRF. Completa XSS o CSRF hacia una eliminación duradera de 2FA
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Eliminar 2FA de una cuenta de phpMyAdmin sin presentar TOTP, WebAuthn ni el campo de confirmación Simple. El siguiente inicio de sesión con contraseña es solo con contraseña. PMA completo como ese usuario de MySQL (SQL, usuarios, exportación).

PrivilegioMétodo / rutaReconocimiento / integridad / disponibilidadProbado en laboratorio o inferido
Persistir 2fa a null y eliminar el segundo factor de pmadbPOST index.php?route=/config/set autenticado key=2fa value=null más un token válidoIntegridad del almacén de preferenciasProbado en laboratorio. success:true, config_data de pmadb pasó a []
Iniciar sesión solo con contraseña tras esa escrituraNueva sesión por cookie, mismo usuario de MySQLIntegridad de la ruta de inicio de sesiónProbado en laboratorio. Sin 2fa_confirm, se accedió a la interfaz normal
Mantener la sesión actual mientras 2FA desaparece para inicios de sesión posterioresMismo handler; persistOption escribe el almacén, no el flag activo two_factor_checkIntegridad de sesiones posterioresProbado en laboratorio. La sesión A permaneció dentro. La sesión B había visto 2FA. La sesión C no
Encadenar desde XSS almacenado o CSRF que pueda enviar por POST con el token de la páginaRestos de la misma revisión, no de este laboratorioIntegridad de 2FA tras un POST del mismo origenInferido
Eliminar 2FA mediante SettingsPOST /preferences/two-factor 2fa_remove=1Integridad de 2FA mediante la interfaz documentadaProbado en laboratorio como cerrado. Sin el factor, PMA muestra la página de confirmación y pmadb sigue teniendo backend=simple

Cerrado en este resto: acceso no autenticado, omisión de la contraseña de MySQL, RCE del SO, lectura de filas de pmadb de otros usuarios. No necesité el resto #1 (firma CustomServer). No omití la contraseña de MySQL.

Misma versión fijada: resto de WebAuthn CustomServer.

Cómo lo encontré

Fijé la versión 5.2.3 después de PMASA-2025-1/2/3. Autenticación por cookie, pmadb pma__userconfig. El laboratorio activa $cfg['DBG']['simple2fa'] solo para que Settings pueda registrar el backend Simple sin una llave de hardware. TOTP y WebAuthn viven en la misma clave de preferencia 2fa.

SetConfigController toma key y el value en JSON y llama a Config::setUserValue. UserPreferences::persistOption está documentado como "¡No se realiza ninguna validación!" apply() incluye 2fa en la lista de permitidos para que la clave no sea descartada como una preferencia desconocida.

$result = $this->config->setUserValue(null, $key, json_decode($value));

json_decode('null') es null de PHP. persistOption('2fa', null, $default) entonces elimina config_data['2fa'] porque el valor predeterminado para esa ruta también es null.

Settings -> Two-factor es el contraste. TwoFactorController no hará configure('') hasta que TwoFactor::check(true) devuelva true.

Falsos caminos ya registrados: tratar Settings 2fa_remove como el agujero (sigue exigiendo el factor); afirmar acceso no autenticado; afirmar un salto de la contraseña de MySQL; tratar esto como el remanente #1 (CustomServer); una reverse shell. Teatro.

Lab

python3 phpmyadmin-config-set-2fa-Abraxas-Labs.py
# or: cd lab && ./run.sh

Apunta solo a http://127.0.0.1:19280. Compón el proyecto phpmyadmin-config-set-2fa. Fija RELEASE_5_2_3. run.sh copia o clona esa etiqueta en lab/src/ para la imagen. El stack se desmonta tras la ejecución.

La configuración registró Simple 2FA. Un segundo navegador accedió a la página 2fa_confirm. El POST a 2fa_remove sin el factor permaneció en la interfaz de confirmación y dejó backend=simple en pmadb. El POST a /config/set devolvió entonces success:true, pmadb quedó como [], y el siguiente inicio de sesión aterrizó en la interfaz normal.

SUCCESS phpmyadmin-config-set-2fa enroll=simple ui-remove-blocked=yes config-set-cleared=yes next-login-password-only=yes PMA-CONFIG-SET-2FA-WITNESS

La solución

Denegar 2fa (y otras claves de autenticación) en /config/set. Requerir TwoFactor::check(true) antes de cualquier mutación de 2FA. Mantener la ruta de Settings como el único escritor.

Referencias

  • github.com/phpmyadmin/phpmyadmin etiqueta RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/Controllers/Config/SetConfigController.php
  • libraries/classes/Config/UserPreferences.php
  • Mismo pin: PMA-5.2.3-WebAuthn-2FA
  • CWE-620

Licencia

GNU Affero GPL v3.0. Ver LICENSE. Solo para laboratorio en loopback. Sin garantía.

Descargar herramienta