====== JavaScript - Authentification ======
===== Description =====
**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.**
===== Pré-requis d'exploitation =====
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.
==== Connaissances nécessaires ====
* Connaissances de base du langage JavaScript ;
* Connaissances en matière de sécurité liée à l'authentification.
==== Outils nécessaires ====
* Avoir accès à une console de navigateur (Firefox, Chrome).
===== Flux d'exécution =====
==== Explorer ====
Naviguer sur l’application afin d’identifier le/les script(s) d'authentification JavaScript et essayer de comprendre comment il(s) fonctionne(nt).
==== Expérimenter ====
Tester les champs de formulaire d'authentification en y injectant du code tout en observant comment l'application réagit.
==== Exploiter ====
===== Conséquences potentielles =====
Une exploitation réussie de ce type de vulnérabilité peut permettre :
* L'accès à des données sensibles ;
* L'accès à un espace restreint de l'application.
===== Contre-mesures =====
Les contre-mesures suivantes peuvent être mises en œuvre :
* Utiliser une base de données ou un service d'authentification tiers pour stocker les noms d'utilisateur et les mots de passe autorisés au lieu de les stocker en clair dans un script ;
* Chiffrer les mots de passe avant de les stocker dans la base de données ou le service d'authentification ;
* Utiliser l'authentification par jeton ou l'authentification à deux facteurs pour renforcer la sécurité de l'application.
====== Comment cela fonctionne ======
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.
===== Exemple 1 =====
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/';
}
}
===== Exemple 2 =====
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');
}
});
====== Références ======
URL :
* https://www.reveillere.fr/M2WEB/cours/JavaScript.pdf
* https://profdoc.iddocs.fr/IMG/pdf/billiejoe_javascript_fiches.pdf
* https://www.tutorialspoint.com/javascript/javascript_tutorial.pdf
====== Retour fiches vulnérabilités ======
* [[cyber:vulnerabilite:accueil|Cyber fiches vulnérabilités]]