🔒 Sécurité

security-threat-modeling

Modélisation des menaces pour applications et systèmes — identification des surfaces d'attaque, classification STRIDE, arbres d'attaque, scoring DREAD/CVSS et stratégies de mitigation priorisées.

⚡ 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 -- security-threat-modeling --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } security-threat-modeling -Launch"

🚀 Déjà installé ?

claude "/security-threat-modeling"

Ou tapez /security-threat-modeling 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 :

threat modelingmodélisation des menacessurface d'attaqueSTRIDErisques de sécuritéanalyse de menacesDREAD

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/security-threat-modeling ~/.claude/skills/

Payload du plugin : skills/security-threat-modeling · source éditable : security-skills/threat-modeling

📖 Manuel

Modélisation des Menaces

Workflow en 5 étapes

1. Cartographier le système (DFD)

Décompose l'architecture en éléments atomiques avant tout classement.

[Utilisateur] --HTTPS--> [API Gateway] --> [Service Auth]
                                      --> [Service Métier] --> [DB PostgreSQL]
                                                           --> [Queue RabbitMQ] --> [Worker]
Limite de confiance : Internet / DMZ / Réseau interne

Règle : toute flèche qui traverse une limite de confiance est une surface d'attaque.


2. Appliquer STRIDE par composant

Pour chaque flux/composant, passe en revue les 6 catégories.

MenacePropriété violéeCible typiqueExemples concrets
SpoofingAuthentificationIdentity provider, tokensJWT forgé, session fixation, SSRF via redirect
TamperingIntégritéRequêtes, DB, fichiersSQL injection, mass assignment, prototype pollution
RepudiationNon-répudiationLogs, auditLogs désactivables, absence de correlation ID
Information DisclosureConfidentialitéAPI, logs, erreursStack trace en prod, over-fetching GraphQL, verbose errors
Denial of ServiceDisponibilitéEndpoints, DB, queuesRegex catastrophique, N+1 queries non bornées, XML bomb
Elevation of PrivilegeAutorisationRBAC, ressourcesIDOR, JWT alg:none, path traversal, SSTI

Mnémotechnique : Spoofing → qui es-tu ? / Tampering → est-ce intact ? / Repudiation → qui a fait quoi ? / Info Disclosure → qui voit quoi ? / DoS → est-ce disponible ? / EoP → que peux-tu faire ?


3. Scorer avec DREAD (+ CVSS si besoin)

DREAD (score 1-10 par critère, moyenne finale) :

CritèreQuestion cléBas (1-3)Moyen (4-6)Élevé (7-10)
DamageQuel est l'impact si exploité ?Log polluéDonnées utilisateurAccès root / fuite PII masse
ReproducibilityReproductible à chaque tentative ?Rare/aléatoireConditions spécifiquesSystématique
ExploitabilityNiveau requis pour exploiter ?Expert + accès physiqueDev moyenScript kiddie
Affected usersCombien d'utilisateurs touchés ?Un seulGroupe restreintTous les utilisateurs
DiscoverabilityFacilité à trouver la faille ?Code source requisTest manuelVisible sans auth

Score ≥ 7 → critique, corriger avant release. Score 4-6 → moyen, sprint suivant. Score < 4 → faible, backlog.

Quand utiliser CVSS plutôt que DREAD : si tu dois communiquer avec des équipes sécurité externes, CVSSv3.1 est le standard. DREAD reste plus rapide pour les revues internes.


4. Construire l'arbre d'attaque (optionnel, pour menaces critiques)

Objectif attaquant : Accéder aux données de paiement
├── Via API (STRIDE: I + E)
│   ├── Bypass authentification
│   │   ├── JWT alg:none           [CRITIQUE]
│   │   └── Brute-force refresh token [MOYEN]
│   └── IDOR sur /api/payments/{id} [CRITIQUE]
└── Via base de données
    ├── SQL Injection dans filtre   [CRITIQUE]
    └── Credentials exposés en env  [ÉLEVÉ]

5. Définir les mitigations et les tracker

Pour chaque menace, une mitigation doit être spécifique, testable et assignée.

### Menace: IDOR sur /api/payments/{id}

- **Type STRIDE**: Elevation of Privilege + Information Disclosure
- **Composant**: Service Paiements — endpoint GET /api/payments/{id}
- **Score DREAD**: D=9, R=9, E=7, A=8, D=8 → **8.2 / CRITIQUE**
- **Scénario**: Un utilisateur authentifié incrémente l'ID pour accéder aux paiements d'un autre compte.
- **Impact**: Fuite de données de paiement (RGPD), fraude potentielle.
- **Mitigation**:
  1. Vérifier `payment.userId == currentUser.id` avant chaque retour.
  2. Utiliser des UUIDs non-séquentiels comme identifiants publics.
  3. Ajouter un test automatisé avec deux comptes distincts.
- **Ticket**: #SEC-42
- **Statut**: Non traité

Mitigations par type de composant

API REST / GraphQL

Spoofing         → JWT RS256 (pas HS256 avec secret partagé), rotation des clés, MFA
Tampering        → Validation stricte (FluentValidation, Zod), parameterized queries
Info Disclosure  → DTO de réponse (jamais d'entité directe), masquer stack traces en prod
EoP              → RBAC + ownership check sur chaque ressource, pas de rôles admin implicites
DoS              → Rate limiting par IP + par user, timeout sur toutes les requêtes externes

Base de données

-- Moindre privilège : un compte par service, pas de compte DBO en prod
GRANT SELECT, INSERT, UPDATE ON schema.table TO app_user;

-- Toujours des paramètres nommés, jamais de concaténation
-- .NET : new SqlCommand("SELECT * FROM users WHERE id = @id")
-- Python : cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

File d'attente (RabbitMQ, Azure Service Bus, Kafka)

Spoofing         → Authentification TLS mutuelle, tokens de publication
Tampering        → HMAC sur le payload, validation du schéma à la consommation
Repudiation      → Correlation ID obligatoire, dead-letter queue avec logs
DoS              → Prefetch limité, consumer circuit-breaker, TTL sur les messages

Authentification / Sessions

- Utiliser des bibliothèques éprouvées (OAuth2 + OIDC), jamais de crypto maison
- Tokens : expiry court (15 min access), refresh token rotation + révocation
- Sessions : HttpOnly + Secure + SameSite=Strict, régénération après login
- Mots de passe : Argon2id (préféré), bcrypt (cost ≥ 12), jamais MD5/SHA1

Garde-fous et anti-patterns

Anti-patternRisqueCorrection
"On sécurisera après le MVP"Surface d'attaque figée dès la conceptionIntégrer STRIDE dès la phase de design
Confiance implicite au réseau interneLateral movement si un service est compromisZero Trust : chaque service s'authentifie
IDs séquentiels (1, 2, 3…) dans les URLsIDOR trivialUUIDs v4 ou IDs opaques signés
Logs qui contiennent des tokens/PIIExfiltration via logsMasquer automatiquement les champs sensibles
Erreurs verboseuses en productionInformation disclosureMessages génériques + correlation ID loggué côté serveur
Dépendances non mises à jourCVEs connues exploitablesdependabot ou renovate + npm audit / dotnet list package --vulnerable
RBAC sans ownership checkUn utilisateur accède aux ressources d'un autreToujours vérifier resource.ownerId == currentUser.id
Secrets dans le code / .env commitéFuite GitHubgit-secrets, variables d'environnement injectées au runtime

Bonnes pratiques 2026


Commandes utiles

# Détection de secrets dans le dépôt
gitleaks detect --source . --report-format json --report-path gitleaks-report.json

# Audit des dépendances npm
npm audit --audit-level=high

# Audit des dépendances .NET
dotnet list package --vulnerable --include-transitive

# Scan SAST avec Semgrep
semgrep scan --config=auto --error

# Générer un SBOM (Software Bill of Materials)
syft . -o spdx-json > sbom.json
Ce skill est un outil d'analyse de sécurité défensif. Il ne fournit pas de techniques d'exploitation.