Audit OWASP PME Sénégal : pourquoi en 2026
Les PME sénégalaises mettent en ligne sites e-commerce (Wave/Orange Money), portails clients (banques, assurances, cliniques), apps métier (logistique, RH). 78 % de ces apps n'ont jamais été auditées sécurité (échantillon 65 audits Kolonell 2024-2025).
Conséquences observées : 2 fuites de données patient cliniques Dakar (2024), 1 compromission base e-commerce (CB exposés), 6 défacements politiques (2024-2025 cycles ANSSI Sénégal).
Cadre réglementaire : CDP (Commission Données Personnelles) — Loi 2008-12 + décret 2008-721 — sanction jusqu'à 100 M FCFA. ANSSI Sénégal publie depuis 2024 des bulletins vulnérabilités secteur (banques, télécoms, santé).
Cette checklist couvre OWASP Top 10 2021 + 15 vulnérabilités contextuelles Sénégal. Outils open source seulement (0 FCFA licence).
H2 : Les 25 vulnérabilités à auditer
A01 — Broken Access Control (le plus critique)
- IDOR (Insecure Direct Object Reference). URL \
/api/invoices/123\accessible sans vérifier que invoice 123 appartient à l'utilisateur authentifié. Test : changer ID dans URL. Fix : middleware autorisation côté serveur, jamais côté client.
- Path traversal. Paramètre \
?file=../../etc/passwd\lit fichiers système. Fix : whitelist fichiers, \path.resolve\+ check préfixe.
- Force browsing. \
/admin/dashboard\accessible sans rôle admin. Fix : middleware role-check sur toute route privée.
- Privilege escalation. User normal peut s'auto-attribuer rôle admin via API \
PATCH /users/me {role: 'admin'}\. Fix : whitelist champs modifiables, jamais \Object.assign(user, req.body)\.
A02 — Cryptographic Failures
- Mots de passe stockés en clair / MD5 / SHA1. Audité 4 PME en 2024 stockant MD5. Fix : bcrypt cost 12 minimum, ou Argon2id.
- TLS faible (TLS 1.0/1.1, ciphers RC4). Test : \
testssl.sh https://votresite.sn\. Fix : TLS 1.2+ uniquement, ciphers Mozilla intermediate.
- Secrets en clair dans repo Git. API keys, DB passwords commitées. Test : \
git log -p | grep -i "password\\|api_key"\. Fix : \.env.local\gitignored, rotation immédiate si exposé.
A03 — Injection
- SQL Injection. \
SELECT * FROM users WHERE id = ${req.query.id}\. Test : \sqlmap -u "https://site.sn/?id=1"\. Fix : requêtes paramétrées (Prisma, parameterized queries).
- NoSQL Injection. \
db.users.find({email: req.body.email})\avec body \{email: {$ne: null}}\. Fix : valider type (zod), refuser objets là où string attendu.
- Command Injection. \
exec(\convert ${userFile} out.pdf\)\avec userFile = \; rm -rf /\. Fix : pas de shell, utiliser \spawn\avec array args.
- XSS (Cross-Site Scripting) stockée. Commentaire \
\rendu non-échappé. Fix : échapper output (React le fait par défaut), CSP strict, HttpOnly cookies.
A04 — Insecure Design
- Pas de rate limiting login. Brute force possible. Fix : 5 tentatives / 15 min / IP + email (utiliser \
express-rate-limit\ou middleware Next).
- Recovery password prévisible. Token = MD5(email+timestamp). Fix : \
crypto.randomBytes(32).toString('hex')\, expiration 1h, single-use.
A05 — Security Misconfiguration
- Headers HTTP manquants. Pas de HSTS, CSP, X-Frame-Options. Test : securityheaders.com. Fix : middleware Helmet ou config Next.js \
headers()\.
- Erreurs verboses en prod. Stack trace exposée. Fix : page erreur générique, logs côté serveur uniquement.
- Endpoints debug exposés. \
/api/debug\, \/phpinfo.php\. Test : \nikto -h https://site.sn\. Fix : supprimer en prod.
A06 — Vulnerable Components
- Dépendances obsolètes. Test : \
npm audit\, \pip-audit\, \composer audit\. Fix : Dependabot/Renovate auto-PR mise à jour.
A07 — Authentication Failures
- Pas de MFA. Compte admin sans 2FA. Fix : TOTP obligatoire admin (cf article MFA PME ci-dessous).
- Session ID dans URL. \
?sessionid=abc123\leak via referer. Fix : cookie HttpOnly Secure SameSite=Lax.
A08 — Software & Data Integrity Failures
- CDN non signés. \