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-webauthn — phpMyAdmin 5.2.3 - Alta - Remota - Omisión de 2FA - Se puede omitir la ceremonia de WebAuthn | Kitploit
Herramientas/GitHubGitHub/abraxas/phpmyadmin-webauthn
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónAutenticaciónLabs y Práctica
GitHubabraxas/phpmyadmin-webauthn

phpmyadmin-webauthn

phpMyAdmin 5.2.3 - Alta - Remota - Omisión de 2FA - Se puede omitir la ceremonia de WebAuthn

Ver Repositorio
23hace 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-webauthn

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-webauthn

Write-up: https://abraxaslabs.tech/research/phpmyadmin-webauthn

phpmyadmin-webauthn

Clase: bypass de 2FA Alcance: Remoto

phpMyAdmin 5.2.3 (tag RELEASE_5_2_3). Tarball por defecto. web-auth/webauthn-lib es suggest / require-dev. composer install --no-dev no lo instala. Por lo tanto, createServer usa CustomServer. Esa clase parsea response.signature (el campo debe existir y decodificar) y nunca lo verifica con COSE. Nunca usa la credentialPublicKey almacenada. El propio CustomServerTest del producto acepta una aserción sin clave pública.

Las comprobaciones estructurales son reales: id de credencial en allowCredentials, clientData.type == webauthn.get, challenge coincide con la sesión, host de origen, rpIdHash, user-present. La firma se parsea y se ignora. Tras la contraseña de MySQL, una firma WebAuthn basura que aún coincida con esos campos es una sesión completa de phpMyAdmin. Eso es la base de datos. Si realmente instalaste web-auth/webauthn-lib, estás en WebauthnLibServer y no en este bug.

IDaún sin CVE
Clasebypass de 2FA / verificación de firma ausente
AlcanceRemoto (login por cookie, luego WebAuthn omitido)
CWECWE-347, CWE-287
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 tag RELEASE_5_2_3. Tarball por defecto / composer install --no-dev
AutenticaciónLogin por cookie (contraseña de MySQL), luego WebAuthn omitido
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1:18080

Qué puede hacer un atacante

Todavía necesita la contraseña de MySQL (login por cookie). Tras esa contraseña, envía por POST webauthn_request_response con challenge coincidente, host de origen, rpIdHash, user-present, id de credencial registrada y una firma basura. Aterriza en la interfaz normal. El 2FA ha desaparecido. Eso es la base de datos (SQL, usuarios, exportación), no una shell PHP en el host.

Si realmente instalaste web-auth/webauthn-lib, estás en WebauthnLibServer y no en este bug.

PrivilegioMétodo / rutaProbado en laboratorio o inferido
Completar el 2FA WebAuthn sin el autenticador (integridad del segundo factor)POST webauthn_request_response tras la contraseña, firma basuraProbado en laboratorio. still_2fa=False landed=True
PMA completo como ese usuario de MySQL (integridad + reconocimiento del servidor SQL)misma sesiónProbado en laboratorio. Marcadores de la interfaz de inicio presentes
Omitir la contraseña de MySQLPOST no autenticadoProbado en laboratorio, cerrado. Permanece en el login
Mismo bypass con web-auth/webauthn-lib instaladoWebauthnLibServerCerrado. No es este remanente
RCE en el SO / reverse shelleste remanenteCerrado

Cerrado en este remanente: PMA no autenticado, una shell PHP en el host, y tratar un tarball que realmente instaló web-auth/webauthn-lib como este bug.

Cómo lo encontré

Leí createServer, luego parseAndValidateAssertionResponse, luego el test unitario que no pasa una clave pública. Las comprobaciones estructurales son reales. La firma se parsea y se ignora.

Caminos equivocados: enviar por POST JSON de WebAuthn sin una sesión de contraseña previa; una firma que fallaba las comprobaciones estructurales; Webauthn\Server aún presente (clase de servidor equivocada); challenge que no era de esta sesión; host de origen no coincidente; flag user-present desactivado; id de credencial no presente en allowCredentials.

El Dockerfile del laboratorio copia 5.2.3, ejecuta composer install --no-dev y luego elimina vendor/web-auth para que CustomServer sea el que esté en juego. El último php -r sale con código 1 si existe Webauthn\Server. init.sql inscribe la 2FA de WebAuthn para appuser sin una clave de hardware. El PoC envía por POST la firma not-a-real-signature-PMA-WEBAUTHN-BYPASS.

Laboratorio

Clona el pin junto al Dockerfile y luego ejecuta:

cd lab
git clone --depth 1 --branch RELEASE_5_2_3 https://github.com/phpmyadmin/phpmyadmin.git src
./run.sh

o desde la raíz del paquete después de ese clon:

python3 phpmyadmin-webauthn-Abraxas-Labs.py

Solo loopback: http://127.0.0.1:18080. Proyecto Compose pma-webauthn-lab. Fijar RELEASE_5_2_3. No distribuir src/. Testigo PMA-WEBAUTHN-BYPASS.

SUCCESS PMA-WEBAUTHN-BYPASS WebAuthn 2FA accepted with garbage signature

La solución

Verificar authenticatorData || SHA-256(clientDataJSON) con la clave pública COSE almacenada; vincular userHandle; aplicar signCount. Convertir web-auth/webauthn-lib en una dependencia real y eliminar CustomServer, o fallar de forma segura si la biblioteca no está presente. Hasta entonces, deshabilitar el 2FA de WebAuthn o no exponer este phpMyAdmin.

Referencias

  • github.com/phpmyadmin/phpmyadmin etiqueta RELEASE_5_2_3
  • Plugins\TwoFactor\WebAuthn::createServer
  • CustomServer::parseAndValidateAssertionResponse
  • Restos del mismo pin: phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-setup-validate · phpmyadmin-csrf-sql
  • CWE-347 · CWE-287

Licencia

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

Descargar herramienta