L'utilisation abusive de scripts d'authentification en JavaScript consiste à utiliser des scripts malveillants ou non autorisés pour contourner les contrôles d'authentification et accéder à des ressources protégées ou sensibles. Les scripts d'authentification en JavaScript peuvent être utilisés pour automatiser l'authentification, falsifier des informations d'identification ou déjouer les contrôles de sécurité mis en place pour protéger les ressources.
Pour exploiter cette famille de vulnérabilité, il est nécessaire d’avoir accès à une application comportant un script JavaScript générant une authentification.
Naviguer sur l’application afin d’identifier le/les script(s) d'authentification JavaScript et essayer de comprendre comment il(s) fonctionne(nt).
Tester les champs de formulaire d'authentification en y injectant du code tout en observant comment l'application réagit.
Une exploitation réussie de ce type de vulnérabilité peut permettre :
Les contre-mesures suivantes peuvent être mises en œuvre :
Les scénarios suivants peuvent être joués via l’exploitation de cette vulnérabilité : -* Retrouver les identifiants de connexion en clair à partir du script d’authentification. -* Obtenir un accès sur l'espace restreint /flag.
Voici un exemple d'un script vérifiant un identifiant et un mot de passe en clair :
function login() { if (username == 'admin' && password == 'Str0ngP4ss') { window.location = '/admin/'; } else { window.location = '/login/'; } }
Voici un exemple d'un script d'authentification avec les noms d'utilisateurs et les mots de passe en clair :
// Tableau contenant les noms d'utilisateur et les mots de passe autorisés const users = [ { username: 'utilisateur1', password: 'motdepasse1' }, { username: 'utilisateur2', password: 'motdepasse2' } ]; // Récupération des champs de formulaire de connexion const usernameField = document.getElementById('username'); const passwordField = document.getElementById('password'); const loginButton = document.getElementById('login-button'); // Fonction qui vérifie si les champs de formulaire sont remplis et active le bouton de connexion si c'est le cas function checkForm() { if (usernameField.value && passwordField.value) { loginButton.disabled = false; } else { loginButton.disabled = true; } } // Écouteurs d'événements pour vérifier le formulaire chaque fois que les champs de formulaire sont modifiés usernameField.addEventListener('input', checkForm); passwordField.addEventListener('input', checkForm); // Écouteur d'événement pour soumettre le formulaire lorsque le bouton de connexion est cliqué loginButton.addEventListener('click', function(event) { event.preventDefault(); // Vérification de l'existence de l'utilisateur dans le tableau "users" const user = users.find(u => u.username === usernameField.value && u.password === passwordField.value); if (user) { // Connexion réussie, redirection vers la page flag window.location.replace('/flag'); } else { // Afficher un message d'erreur à l'utilisateur alert('Nom d\'utilisateur ou mot de passe incorrect'); } });
URL :