Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
PMA-5.2.3-WebAuthn-2FA — phpMyAdmin - Élevé 8.1 - POST authentifié /index.php - Contournement de la 2FA | Kitploit
Outils/GitHubGitHub/abraxas/pma-5.2.3-webauthn-2fa
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionAuthentificationLabs et Pratique
GitHubabraxas/pma-5.2.3-webauthn-2fa

PMA-5.2.3-WebAuthn-2FA

phpMyAdmin - Élevé 8.1 - POST authentifié /index.php - Contournement de la 2FA

Voir le dépôt
2il y a 21 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - PMA-5.2.3-WebAuthn-2FA

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  PMA-5.2.3-WebAuthn-2FA

PMA-5.2.3-WebAuthn-2FA

phpMyAdmin 5.2.3 - phpMyAdmin

Tarball par défaut. web-auth/webauthn-lib est en suggest / require-dev. composer install --no-dev ne l'installe pas. createServer utilise donc CustomServer. Cette classe analyse response.signature (le champ doit exister et se décoder) et ne la vérifie jamais en COSE. Elle n'utilise jamais la credentialPublicKey stockée. Le CustomServerTest du produit lui-même accepte une assertion sans clé publique.

Après le mot de passe MySQL, une signature WebAuthn bidon qui correspond toujours au challenge, à l'origine, au rpIdHash et à user-present donne une session phpMyAdmin complète. C'est la base de données.

IDpas encore de CVE
CWECWE-347, CWE-287
CVSSÉlevé : 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProduitphpMyAdmin
Affecté5.2.3 tarball par défaut (web-auth/webauthn-lib absent)
Authmot de passe MySQL, puis WebAuthn contourné
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Il a toujours besoin du mot de passe MySQL (connexion par cookie). Après ce mot de passe, il envoie en POST webauthn_request_response avec un challenge correspondant, l'hôte d'origine, le rpIdHash, le flag user-present, l'identifiant de credential enrôlé et une signature bidon. Il atterrit dans l'interface normale. La 2FA a disparu. C'est de l'exécution de code sur les données, pas un shell PHP sur l'hôte.

Si vous avez réellement installé web-auth/webauthn-lib, vous êtes sur WebauthnLibServer et non concerné par ce bug.

Comment je l'ai trouvé

J'ai lu createServer, puis parseAndValidateAssertionResponse, puis le test unitaire qui ne passe pas de clé publique. Les vérifications structurelles sont réelles : identifiant de credential dans allowCredentials, clientData.type == webauthn.get, challenge correspondant à la session, hôte d'origine, rpIdHash, user-present. La signature est analysée puis ignorée.

Le premier client que j'ai pointé dessus était poli. Il a envoyé en POST un JSON WebAuthn sans session de mot de passe préalable. Page de connexion. Il a envoyé en POST route=/ avec une signature qui ne satisfaisait même pas les vérifications structurelles. Vous restez sur la 2FA. webauthn_request_response est toujours dans le HTML.

Fausses pistes déjà consignées : Webauthn\Server présent (mauvaise classe de serveur) ; challenge qui n'est pas celui de cette session ; hôte d'origine non concordant ; flag user-present à zéro ; identifiant de credential absent de allowCredentials ; non authentifié, sans mot de passe MySQL ; un reverse shell. Du théâtre. L'indice, c'est le champ 2FA disparu et une page de navigation phpMyAdmin.

Les bugs de client ressemblent à des bugs de produit. Un helper qui masque http.client n'envoie jamais de paquet. .recv() sur un HTTPResponse n'est pas .read(). Je le mentionne une fois parce que ça a coûté du temps et que, pendant une minute, on aurait dit que phpMyAdmin allait bien.

Ensuite : POST username/password/token. Récupérer le challenge de session depuis la page 2FA. Envoyer en POST l'assertion forgée. still_2fa=False landed=True. Le Dockerfile du lab copie 5.2.3, composer install --no-dev, puis supprime vendor/web-auth pour que CustomServer soit celle en jeu. Le dernier php -r sort en code 1 si Webauthn\Server existe. L'image doit faire échouer le build si la lib est toujours là. init.sql enrôle la 2FA WebAuthn pour appuser sans clé matérielle.

Lab

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:18080. Placez d'abord phpMyAdmin 5.2.3 en tant que src/ à côté du Dockerfile.

password-login status=200 webauthn=True
2fa-post status=200 still_2fa=False landed=True
SUCCESS PMA-WEBAUTHN-BYPASS WebAuthn 2FA accepted with garbage signature

Le correctif

Installez web-auth/webauthn-lib afin que createServer utilise la lib, ou vérifiez réellement la signature COSE de response.signature par rapport à la clé publique stockée dans CustomServer. D'ici là, désactivez la 2FA WebAuthn ou n'exposez pas ce phpMyAdmin.

Références

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3
  • CustomServer::parseAndValidateAssertionResponse · WebAuthn::createServer · CustomServerTest
  • WebAuthn-3 verifying assertion
  • CWE-347 · CWE-287

Licence

GNU Affero GPL v3.0. Voir LICENSE. Laboratoire en boucle locale uniquement. Aucune garantie.

Télécharger l’outil