OWASP Top 10 = liste 10 vulns web les plus critiques mise à jour par OWASP Foundation. Édition 2024-2025 active. 90 % breaches PME exploitent une de ces vulns. Voici guide remediation pour SaaS PME Africa.
TL;DR
1. Broken Access Control
2. Cryptographic Failures
3. Injection
4. Insecure Design
5. Security Misconfiguration
6. Vulnerable Components
7. Identification & Auth Failures
8. Software & Data Integrity Failures
9. Security Logging Failures
10. SSRF
A01 — Broken Access Control
#1 vuln 2024. 94 % apps testées affectées.
Vulns typiques :
- IDOR (Insecure Direct Object Reference)
- Missing function level access control
- Force browsing
Exemple Africa SaaS :
`
GET /api/invoices/12345
→ Tu accèdes à invoice d'un autre tenant
`
Fix :
`typescript
// ❌ Vulnérable
async function getInvoice(req, res) {
const invoice = await db.invoices.findOne({ id: req.params.id });
res.json(invoice);
}
// ✅ Sécurisé
async function getInvoice(req, res) {
const invoice = await db.invoices.findOne({
id: req.params.id,
tenantId: req.user.tenantId // Crucial
});
if (!invoice) return res.status(404).end();
res.json(invoice);
}
`
A02 — Cryptographic Failures
Vulns typiques :
- Mots de passe en clair / hashés faiblement (MD5, SHA1)
- TLS 1.0/1.1 (deprecated)
- Données sensibles en HTTP
Fix :
`typescript
import bcrypt from 'bcrypt';
// ❌
const hash = md5(password);
// ✅
const hash = await bcrypt.hash(password, 12); // Cost factor 12+
`
TLS 1.3 minimum 2026. Cloudflare le force.
A03 — Injection
SQL, NoSQL, LDAP, OS command.
Fix :
`typescript
// ❌
const users = await db.query(SELECT * FROM users WHERE name = '${name}');
// ✅
const users = await db.query('SELECT * FROM users WHERE name = ?', [name]);
// ✅ ORM Prisma / Mongoose protègent automatiquement
const users = await prisma.user.findMany({ where: { name } });
`
A04 — Insecure Design
Design flaws qui ne se patchent pas par lib update.
Exemples :
- Reset password avec questions sécurité easy guess
- API publique sans rate limit
- Workflows business logic exploitable
Fix : Threat modeling au design phase.
A05 — Security Misconfiguration
Vulns typiques :
- Cloud bucket S3 public par erreur
- Default credentials non changés
- Verbose error messages
- Headers manquants (CSP, HSTS, X-Frame-Options)
Fix :
`typescript
// Express middleware
import helmet from 'helmet';
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "https://js.stripe.com"],
},
},
hsts: { maxAge: 31536000 },
}));
`
A06 — Vulnerable Components
Dépendances avec CVE connus.
Fix :
`bash
# Audit régulier
npm audit
yarn audit
pip-audit
# Dependabot GitHub
# Renovate bot
# Snyk
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
# Update régulier
npm update
`
PME devraient run npm audit au CI/CD.
A07 — Identification & Auth Failures
Vulns typiques :
- Brute-force login
- Session fixation
- JWT secret faible
- Pas de 2FA
Fix :
`typescript
// Rate limit login
import rateLimit from 'express-rate-limit';
app.post('/login', rateLimit({
windowMs: 15 * 60 * 1000,
max: 5,
message: 'Trop de tentatives, réessayez dans 15min'
}), loginHandler);
// JWT strong secret + rotation
const JWT_SECRET = process.env.JWT_SECRET; // 256-bit min
// 2FA via TOTP (Google Authenticator)
import speakeasy from 'speakeasy';
`
A08 — Software & Data Integrity
Vulns typiques :
- CI/CD compromis
- Update auto sans signature
- Désérialisation insecure
Fix :
- Sign artifacts (cosign, sigstore)
- SLSA framework
- Dependency provenance
A09 — Security Logging Failures
Pas de logs = pas de detection breach.
Fix :
`typescript
// Structured logging
import pino from 'pino';
const logger = pino({
level: 'info',
redact: ['password', 'token', '*.creditCard'], // Mask sensitive
});
// Log auth events
logger.info({
event: 'login_success',
userId: user.id,
ip: req.ip,
userAgent: req.headers['user-agent']
});
logger.warn({
event: 'login_failed',
email: req.body.email,
ip: req.ip
});
// Ship to Datadog / Loki / CloudWatch
`
Retention 90j-1y selon compliance.
A10 — SSRF (Server-Side Request Forgery)
Server fait requêtes à URLs user-controlled.
Vuln :
`typescript
// ❌
app.get('/proxy', async (req, res) => {
const data = await fetch(req.query.url); // SSRF !
res.send(await data.text());
});
`
Fix :
`typescript
// ✅ Whitelist domains
const ALLOWED = ['api.partner.com'];
const url = new URL(req.query.url);
if (!ALLOWED.includes(url.hostname)) return res.status(400).end();
// Bloquer IPs internes
if (isInternalIP(url.hostname)) return res.status(400).end();
`
Outils audit OWASP
- OWASP ZAP (gratuit DAST)
- Burp Suite Pro ($499/year)
- Nessus / Nuclei (vuln scan)
- Snyk / Dependabot (deps)
- SonarQube (SAST)
- Semgrep (SAST custom rules)
Checklist OWASP PME 2026
- [ ] Tenant scoping vérifié toutes routes API
- [ ] Bcrypt cost 12+ passwords
- [ ] TLS 1.3 obligatoire
- [ ] Helmet middleware Express
- [ ] CSP headers strict
- [ ] Rate limiting login + APIs sensibles
- [ ] 2FA admin obligatoire
- [ ] Dependabot / Renovate activé
- [ ] SAST (Semgrep) au CI/CD
- [ ] DAST (ZAP) staging weekly
- [ ] Pentest annuel
- [ ] Logs auth + actions sensibles
- [ ] Backup encrypted + tested
FAQ
Q : OWASP Top 10 obligatoire compliance ?
R : Référence dans PCI-DSS, SOC2, ISO 27001. Pas légalement obligatoire mais standard de facto.
Q : Auditeur OWASP coût ?
R : Pentest grey-box ~5-15K€ couvre OWASP Top 10.
Q : Mobile apps OWASP différent ?
R : Oui, OWASP Mobile Top 10. M1 Improper Platform Usage, M2 Insecure Data Storage, etc.
Conclusion
OWASP Top 10 2024 = standard sécurité SaaS Africa 2026. Broken Access Control + Cryptographic Failures + Injection = 80 % breaches. Stack défensive : Helmet + bcrypt + rate limiting + WAF + audit régulier + pentest annuel.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.