Authentification et autorisation
Vulnérabilités liées à l'authentification et à l'autorisation
Notions théoriques
L’authentification et l’autorisation sont 2 concepts essentiels en sécurité informatique.
attention
Une mauvaise implémentation peut entraîner des failles critiques, comme l’accès non autorisé à des données sensibles.
Authentification vs Autorisation
| Concept | Définition |
|---|---|
| Authentification | Vérifie l’identité d’un utilisateur (ex : login/mot de passe). |
| Autorisation | Détermine ce qu’un utilisateur peut faire après authentification. |
Vulnérabilités courantes
Attaque par force brute
- Un attaquant essaie de deviner un mot de passe en testant de nombreuses combinaisons.
- Exemple : Tester
admin,admin123,password,123456.
Attaque par interception (Man-in-the-Middle)
- Un attaquant intercepte les identifiants si la connexion n’est pas sécurisée (ex : HTTP au lieu de HTTPS).
- Exemple : Un mot de passe envoyé en clair peut être volé sur un réseau Wi-Fi public.
Réutilisation de sessions
- Un attaquant vole un cookie de session pour se faire passer pour un utilisateur légitime.
- Exemple : Si un site ne régénère pas la session après connexion, un attaquant peut exploiter un cookie volé.
Contournement de l’authentification
- Une faille dans le code permet d’accéder à un compte sans mot de passe.
- Exemple : Une URL comme
site.com/profil?id=1permet d’accéder à d’autres comptes en changeantid.
Escalade de privilèges
- Un utilisateur normal obtient des droits administrateur par erreur.
- Exemple : Modifier une requête HTTP pour passer de
role=useràrole=admin.
Bonnes pratiques pour sécuriser l’authentification
✔️ Utiliser HTTPS pour chiffrer les communications.
✔️ Limiter les tentatives de connexion (ex : 3 essais avant blocage).
✔️ Utiliser un hachage sécurisé pour stocker les mots de passe (bcrypt, argon2).
✔️ Régénérer la session après connexion pour éviter le vol de session.
✔️ Vérifier les permissions sur chaque action pour éviter l’escalade de privilèges.
Exemple pratique
Nous allons analyser un système d’authentification vulnérable et le corriger.
Code d’un système vulnérable
<?php
$pdo = new PDO("mysql:host=localhost;dbname=security_test", "root", "");
// ⚠️ Problème : Requête non sécurisée
$query = "SELECT * FROM users WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'";
$result = $pdo->query($query);
if ($result->rowCount() > 0) {
echo "✔️ Connexion réussie !";
} else {
echo "❌ Échec de la connexion.";
}
?>