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
9hace 4 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

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: credential id 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.

IDsin CVE todavía
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
AuthLogin por cookie (contraseña de MySQL), luego WebAuthn omitido
LicenciaGNU Affero GPL v3.0
Labsolo 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, hace POST de webauthn_request_response con challenge coincidente, host de origen, rpIdHash, user-present, credential id enrolado y una firma basura. Aterrizan en la UI normal. El 2FA desaparece. Eso es la base de datos (SQL, usuarios, export), 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 lab o inferido
Completar el 2FA WebAuthn sin el autenticador (integridad del segundo factor)POST webauthn_request_response tras la contraseña, firma basuraProbado en lab. still_2fa=False landed=True
PMA completo como ese usuario de MySQL (integridad + reconocimiento de la caja SQL)misma sesiónProbado en lab. Marcadores de la UI Home presentes
Omitir la contraseña de MySQLPOST no autenticadoProbado en lab, cerrado. Se queda en el login
Mismo bypass con web-auth/webauthn-lib instaladoWebauthnLibServerCerrado. No es este remanente
RCE del 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: hacer POST de JSON WebAuthn sin una sesión de contraseña previa; una firma que falló las comprobaciones estructurales; Webauthn\Server todavía presente (clase de servidor equivocada); challenge que no era de esta sesión; host de origen no coincidente; flag user-present sin activar; credential id que no estaba en allowCredentials.

El Dockerfile del lab copia 5.2.3, composer install --no-dev, luego borra vendor/web-auth para que CustomServer sea el que está en juego. El último php -r sale con 1 si existe Webauthn\Server. init.sql enrola el 2FA WebAuthn para appuser sin una llave de hardware. El PoC hace POST de la firma not-a-real-signature-PMA-WEBAUTHN-BYPASS.

Lab

Clona el pin junto al Dockerfile, 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 pack tras ese clone:

python3 phpmyadmin-webauthn-Abraxas-Labs.py

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

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

La solución

Verifica authenticatorData || SHA-256(clientDataJSON) con la clave pública COSE almacenada; vincula userHandle; aplica signCount. Haz que web-auth/webauthn-lib sea una dependencia real y elimina CustomServer, o falla en cerrado si falta la librería. Hasta entonces, desactiva el 2FA WebAuthn o no expongas este phpMyAdmin.

Referencias

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3
  • Plugins\TwoFactor\WebAuthn::createServer
  • CustomServer::parseAndValidateAssertionResponse
  • Remanentes 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. Ver LICENSE. Solo lab en loopback. Sin garantía.

Descargar herramienta