Parent : [[INDEX-CYBERSECU]]
Anti-Pattern : Secrets JWT par défaut et CORS ouvert
Description
Utiliser des secrets JWT avec des valeurs par défaut prévisibles (votre_cle_secrete_jwt, changez_cette_cle_secrete_en_production_2026), configurer CORS avec origin: '*', et réutiliser le même secret pour les sessions Express. Cela permet la forgery de tokens JWT, le vol de sessions via XSS/CSRF, et l'accès non autorisé depuis n'importe quel site web.
Exemple réel - Archive Ygg
// config.js
module.exports = {
jwtSecret: process.env.JWT_SECRET || 'votre_cle_secrete_jwt', // ❌
secretKey: process.env.SECRET_KEY || 'votre_cle_secrete_hash', // ❌
corsOrigin: process.env.CORS_ORIGIN || '*', // ❌
};
// server.js
app.use(cors({
origin: config.corsOrigin, // '*' par défaut
credentials: true // ❌ + * = catastrophe
}));
app.use(session({
secret: config.jwtSecret, // ❌ Même secret pour JWT et sessions
}));
# .env
JWT_SECRET=changez_cette_cle_secrete_en_production_2026 # ❌ Prévisible
SECRET_KEY="hAb0xu&#O2pYevZ65Rid9NuhC09WD8" # ❌ Trop court
CORS_ORIGIN=* # ❌ Ouvert
Conséquences
- JWT Forgery : Secret connu = création de tokens JWT valides
- Session Hijacking : Secret de session connu = forgery de cookies
- CSRF : CORS ouvert + credentials = requêtes cross-site authentifiées
- Privilege Escalation : Création de tokens admin
- API Abuse : Accès depuis n'importe quel site
Quand c'est acceptable
JAMAIS en production. Les fallbacks sont dangereux même en développement.
Solution
Utiliser KNOW-PAT-061 — API Express avec JWT hardening :
- Secrets ≥ 64 caractères aléatoires
- CORS strict avec whitelist
- Secrets distincts pour JWT, sessions, refresh tokens
- Pas de fallback prévisible
Références
- Archive Ygg :
01_SOURCE_CODE/02b_express_api/config.js,dotenv.txt - OWASP : JWT Security