Retour au blog
Sécurité8 min

OWASP A07:2021 – Défaillances d'Authentification

Sécuriser les mécanismes d'authentification contre les attaques courantes.

Équipe Eurinhash

Analyste en Cybersécurité

Qu'est-ce que les Défaillances d'Authentification ?

Les défaillances d'authentification (Authentication and Session Management Failures) concernent les failles permettant aux attaquants de compromettre des identités utilisateur : vols de session, force brute, ou contournement des mécanismes de connexion.

Cette catégorie était précédemment nommée "Broken Authentication" dans l'OWASP Top 10 2017.

Exemples Courants de Failles

  1. Mots de passe faibles : Absence de politique de complexité.
  2. Session fixation : Réutilisation d'un ID de session après authentification.
  3. Tokens prévisibles : Génération de tokens de session non aléatoires.
  4. Absence de MFA : Authentification à facteur unique uniquement.
  5. Déconnexion inefficace : Les sessions restent actives après logout.

Comment se protéger ?

Renforcez vos mécanismes d'authentification :

  • Mots de passe forts : Exigez une longueur minimale (12+ caractères).
  • Multi-Factor Authentication (MFA) : Implémentez TOTP, WebAuthn, ou SMS.
  • Gestion sécurisée des sessions : Régénérez l'ID de session après login.
  • Protection contre le brute force : Rate limiting et verrouillage de compte.
  • Stockage sécurisé : Hachez les mots de passe avec bcrypt, Argon2, ou scrypt.

[!IMPORTANT] Ne stockez jamais les mots de passe en clair. Utilisez toujours un algorithme de hachage lent et salé.

// MAUVAISE PRATIQUE : Hachage faible (MD5, SHA1)
const crypto = require('crypto');
const hash = crypto.createHash('md5').update(password).digest('hex');
 
// BONNE PRATIQUE : bcrypt avec salt et coût élevé
const bcrypt = require('bcrypt');
const saltRounds = 12;
 
// Hachage du mot de passe
const hash = await bcrypt.hash(password, saltRounds);
 
// Vérification du mot de passe
const isValid = await bcrypt.compare(password, hash);

Bonnes Pratiques pour les Sessions

// Configuration sécurisée des cookies de session
app.use(session({
  secret: process.env.SESSION_SECRET, // Clé forte et aléatoire
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: true,         // HTTPS uniquement
    httpOnly: true,       // Inaccessible au JavaScript
    sameSite: 'strict',   // Protection CSRF
    maxAge: 15 * 60 * 1000 // Expiration après 15 minutes
  }
}));
 
// Régénérer la session après authentification
app.post('/login', (req, res) => {
  req.session.regenerate((err) => {
    if (err) return next(err);
    req.session.userId = user.id;
    res.redirect('/dashboard');
  });
});

Restez en veille

Inscrivez-vous pour recevoir nos prochaines analyses techniques directement dans votre terminal.