Marketing Digital9 min de lecture

Audit OWASP application web PME Sénégal : checklist 25 vulnérabilités (2026)

Mohamed Bah·Fondateur, Kolonell
2 juin 2026
Partager :
Audit OWASP application web PME Sénégal : checklist 25 vulnérabilités (2026)

Audit OWASP application web PME Sénégal : checklist 25 vulnérabilités (2026)

Marketing Digital

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. \