Retour au blog
Sécurité7 min

OWASP A04:2021 – Conception Insecure

Comprendre les failles de conception et comment intégrer la sécurité dès la phase de design.

Équipe Eurinhash

Analyste en Cybersécurité

Qu'est-ce que la Conception Insecure ?

La conception insecure (Insecure Design) est une catégorie introduite dans l'OWASP Top 10 2021. Elle concerne les failles qui proviennent d'un manque de réflexion sur la sécurité lors de la phase de conception de l'application.

Cette vulnérabilité ne concerne pas les erreurs d'implémentation, mais bien l'absence de contrôles de sécurité ou une architecture défaillante dès le départ.

Exemples Courants de Failles

  1. Absence de rate limiting : Permet les attaques par force brute.
  2. Pas de ségrégation des rôles : Tous les utilisateurs ont les mêmes privilèges.
  3. Flux métier non sécurisé : Un utilisateur peut sauter des étapes critiques (ex: passer le paiement).
  4. Stockage de données sensibles en clair : Mots de passe, tokens, ou données personnelles non chiffrés.

Comment se protéger ?

Adoptez une approche Security by Design :

  • Threat Modeling : Identifiez les menaces potentielles avant de coder.
  • User Stories de sécurité : Intégrez des exigences de sécurité dans vos critères d'acceptation.
  • Bibliothèques de composants sécurisés : Réutilisez des modules déjà audités.
  • Tests de conception : Validez l'architecture via des revues de code et des audits.

[!IMPORTANT] La sécurité ne peut pas être "ajoutée" après coup. Elle doit être pensée dès les premières ébauches de l'application.

// MAUVAISE PRATIQUE : Pas de limite de tentatives de connexion
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  // L'attaquant peut essayer 10 000 mots de passe sans être bloqué
  authenticate(username, password);
});
 
// BONNE PRATIQUE : Rate limiting implémenté
const rateLimit = require('express-rate-limit');
 
const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5, // 5 tentatives maximum
  message: 'Trop de tentatives, réessayez dans 15 minutes'
});
 
app.post('/login', loginLimiter, (req, res) => {
  const { username, password } = req.body;
  authenticate(username, password);
});

Méthodologie STRIDE

Pour structurer votre threat modeling, utilisez le modèle STRIDE :

MenaceDescription
SpoofingUsurpation d'identité
TamperingAltération de données
RepudiationAction non traçable
Information DisclosureDivulgation d'informations
Denial of ServiceDéni de service
Elevation of PrivilegeÉlévation de privilèges

Restez en veille

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