💻 Développement

dev-owasp-checker

Vérifie un projet contre le OWASP Top 10 (2021) et propose des remédiations concrètes avec exemples de code.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- dev-owasp-checker --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } dev-owasp-checker -Launch"

🚀 Déjà installé ?

claude "/dev-owasp-checker"

Ou tapez /dev-owasp-checker dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

OWASPtop 10failles websécurité webA01 broken accessinjectionvérifier OWASP

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/dev-owasp-checker ~/.claude/skills/

Payload du plugin : skills/dev-owasp-checker · source éditable : dev-skills/owasp-checker

📖 Manuel

OWASP Checker

Workflow

Étape 1 — Cadrage initial

Avant d'auditer, demande (ou infère du contexte) :

Adapte les catégories à auditer : une API sans UI n'a pas de XSS stocké, un monolithe sans Docker n'a pas de misconfiguration container.


Étape 2 — A01 Broken Access Control (criticité : critique)

Vérifications clés :

Exemple de faille IDOR — Node.js Express :

// ❌ Vulnérable
app.get('/orders/:id', auth, (req, res) => {
  db.query('SELECT * FROM orders WHERE id = ?', [req.params.id]);
});

// ✅ Corrigé
app.get('/orders/:id', auth, (req, res) => {
  db.query('SELECT * FROM orders WHERE id = ? AND user_id = ?',
    [req.params.id, req.user.id]);
});

Commande de test rapide :

# Tester l'accès cross-user avec curl
curl -H "Authorization: Bearer <token_user_A>" https://api.example.com/orders/42
# 42 appartient à user B → doit retourner 403, pas les données

Étape 3 — A02 Cryptographic Failures (criticité : critique)

Checklist :

Scan de secrets dans git :

# Installer gitleaks et scanner le repo complet
docker run -v $(pwd):/path zricethezav/gitleaks:latest detect --source /path --verbose

Hashing correct en Node.js :

import bcrypt from 'bcrypt';
// ✅ cost factor 12, résistant aux GPU
const hash = await bcrypt.hash(password, 12);
const ok   = await bcrypt.compare(input, hash);

Étape 4 — A03 Injection (criticité : critique)

Vecteurs à couvrir :

SQL injection — Python SQLAlchemy :

# ❌ Injection directe
query = f"SELECT * FROM users WHERE email = '{email}'"

# ✅ Paramétré
result = db.execute(text("SELECT * FROM users WHERE email = :e"), {"e": email})

Test NoSQL injection (MongoDB) :

# Tester un login — envoyer un objet au lieu d'une string
curl -X POST https://api.example.com/login \
  -H "Content-Type: application/json" \
  -d '{"username": {"$gt": ""}, "password": {"$gt": ""}}'
# Si 200 → injection confirmée

Étape 5 — A04 Insecure Design (criticité : haute)

Points de contrôle :

Rate limiting — Express (exemple) :

import rateLimit from 'express-rate-limit';
app.use('/auth/login', rateLimit({
  windowMs: 15 * 60 * 1000, // 15 min
  max: 10,
  message: { error: 'Trop de tentatives, réessayez plus tard.' }
}));

Étape 6 — A05 à A10 (synthèse actionnable)

IDNomVérifications prioritairesOutil/commande rapide
A05Security MisconfigurationHeaders de sécurité, comptes par défaut, stack trace exposée, permissions fichierscurl -I https://site.com ; securityheaders.com
A06Vulnerable ComponentsDépendances avec CVE connues, packages abandonnésnpm audit --audit-level=high / pip-audit / trivy fs .
A07Auth FailuresBrute force, credential stuffing, tokens prévisibles, session fixation, MFA absentVérifier logs de tentatives échouées ; tester reset password flow
A08Data Integrity FailuresDésérialisation non sécurisée, vérification de signature des updates, CI/CD pipeline poisoningÉviter pickle.loads(user_data) ; vérifier checksums des assets
A09Logging FailuresLogs insuffisants sur auth/accès, absence d'alertes sur anomalies, PII dans les logsVérifier que login fail / 403 / 500 sont logués avec contexte
A10SSRFValidation stricte des URLs distantes, metadata cloud accessible, rebind DNSTester http://169.254.169.254/latest/meta-data/ depuis un champ URL

Headers de sécurité — configuration Nginx minimale :

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Content-Security-Policy "default-src 'self'" always;
add_header Permissions-Policy "geolocation=(), microphone=()" always;

Audit dépendances NPM/Python :

npm audit --audit-level=high
pip-audit --requirement requirements.txt
trivy fs . --severity HIGH,CRITICAL

Étape 7 — Matrice de conformité

Produis un tableau récapitulatif :

CatégorieStatutCriticitéEffort remédiation
A01 Broken Access Control✅ Conforme
A02 Cryptographic Failures⚠️ PartielCritiqueMoyen
A03 Injection❌ Non conformeCritiqueFaible

Score global : X/10 catégories conformes. Catégories bloquantes (critiques non conformes) à traiter avant mise en production.


Étape 8 — Plan de remédiation priorisé

Classe les actions selon la matrice Impact × Effort :

  1. Immédiat (< 1 semaine) : failles critiques exploitables (injection, IDOR, secrets exposés)
  2. Court terme (1–4 semaines) : misconfiguration, composants vulnérables, headers manquants
  3. Long terme (1–3 mois) : refonte design (rate limiting, threat modeling, logging structuré)

Pour chaque item : fournir l'extrait de code avant/après + la référence OWASP officielle (ex : A03:2021).


Garde-fous et anti-patterns

Bonnes pratiques 2026