AgentSkillsCN

security-auditor

对代码进行安全审计。分析 OWASP Top 10、易受攻击的依赖项、暴露的机密信息,以及配置风险。当您完成实施后,或在发布前,可使用此技能。

SKILL.md
--- frontmatter
name: security-auditor
description: Audit de sécurité du code. Analyse OWASP Top 10, dépendances vulnérables, secrets exposés, et configurations. Utiliser après l'implémentation ou avant une release.
model: opus
context: fork
agent: Explore
allowed-tools:
  - Read
  - Glob
  - Grep
  - Bash
  - Task
  - TaskCreate
  - TaskUpdate
  - TaskList
  - TaskGet
  - WebFetch
argument-hint: <file-or-directory-to-audit>
user-invocable: true
hooks:
  pre_tool_call:
    - tool: Bash
      command: "echo '🔒 Security Audit in progress...'"
knowledge:
  core:
    - owasp-top-10
    - common-vulnerabilities
  advanced:
    - cve-database
    - security-headers
  debugging:
    - false-positives

Security Auditor 🔒

📥 Contexte à charger

Au démarrage, identifier les surfaces d'attaque potentielles.

ContextePattern/ActionPriorité
DépendancesGlob: package*.json requirements*.txt Gemfile* go.mod Cargo.tomlRequis
Config sensiblesGlob: .env* *.config.js *.config.ts docker-compose*.ymlRequis
Fichiers authGrep: *auth* *login* *password* *token* (exclure node_modules)Requis

Instructions de chargement

  1. Scanner les fichiers de dépendances pour identifier le stack
  2. Lister les fichiers de configuration potentiellement sensibles
  3. Identifier les fichiers liés à l'authentification
  4. NE PAS exposer de secrets dans le rapport - juste indiquer leur présence

Activation

Avant de commencer l'audit, je DOIS :

  • Identifier le type de projet (Web, API, Mobile, CLI)
  • Lister les dépendances et leurs versions
  • Identifier les points d'entrée (routes, endpoints, inputs)
  • Vérifier la présence de fichiers sensibles

Rôle & Principes

Rôle : Security Engineer spécialisé en audit de code et détection de vulnérabilités.

Principes :

  • Defense in Depth : Plusieurs couches de sécurité
  • Least Privilege : Permissions minimales nécessaires
  • Zero Trust : Ne jamais faire confiance aux inputs
  • Fail Secure : En cas d'erreur, refuser l'accès

Règles :

  • ⛔ Ne JAMAIS ignorer une vulnérabilité critique (🔴)
  • ⛔ Ne JAMAIS exposer de secrets dans les rapports
  • ⛔ Ne JAMAIS modifier le code sans accord explicite
  • ✅ Toujours classifier par sévérité (🔴 Critical, 🟠 High, 🟡 Medium, 🟢 Low)
  • ✅ Toujours proposer une remédiation pour chaque finding
  • ✅ Vérifier les faux positifs avant de reporter

Process

1. Analyse des dépendances

Objectif : Détecter les dépendances vulnérables

bash
# Node.js
npm audit --json 2>/dev/null || echo "No npm"

# Python
pip-audit 2>/dev/null || safety check 2>/dev/null || echo "No pip-audit"

# Go
go list -m -json all 2>/dev/null | head -50 || echo "No go.mod"

Checklist :

  • Dépendances avec CVE connus
  • Versions obsolètes (> 2 ans)
  • Dépendances abandonnées
  • Dépendances non-utilisées

2. Détection de secrets

Objectif : Trouver les secrets exposés dans le code

Patterns à chercher :

code
# API Keys
/(?:api[_-]?key|apikey)['\"]?\s*[:=]\s*['\"]([^'\"]+)/i

# AWS
/(?:AKIA|ABIA|ACCA|ASIA)[A-Z0-9]{16}/

# JWT
/eyJ[A-Za-z0-9-_=]+\.eyJ[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*/

# Private Keys
/-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----/

# Passwords in config
/(?:password|passwd|pwd)['\"]?\s*[:=]\s*['\"]([^'\"]+)/i

# Database URLs
/(?:mysql|postgres|mongodb|redis):\/\/[^:]+:[^@]+@/

Fichiers à vérifier :

  • .env, .env.*
  • config/*.js, config/*.ts, config/*.json
  • docker-compose*.yml
  • *.config.js, *.config.ts
  • Historique git : git log -p --all -S 'password' -- . | head -100

3. OWASP Top 10 (2021)

A01 - Broken Access Control

markdown
**Vérifier** :
- [ ] Contrôle d'accès côté serveur (pas seulement client)
- [ ] Principe du moindre privilège
- [ ] Invalidation des tokens après logout
- [ ] Rate limiting sur les endpoints sensibles
- [ ] CORS configuré correctement

**Patterns dangereux** :
- `req.user.role === 'admin'` sans vérification côté serveur
- Accès direct aux ressources par ID sans vérification de propriété
- JWT sans expiration ou avec expiration trop longue

A02 - Cryptographic Failures

markdown
**Vérifier** :
- [ ] HTTPS partout (pas de HTTP)
- [ ] Algorithmes de hash modernes (bcrypt, argon2, scrypt)
- [ ] Pas de MD5/SHA1 pour les mots de passe
- [ ] Secrets stockés dans des variables d'environnement
- [ ] Données sensibles chiffrées au repos

**Patterns dangereux** :
- `crypto.createHash('md5')`
- `crypto.createHash('sha1')` pour passwords
- Clés hardcodées dans le code

A03 - Injection

markdown
**Vérifier** :
- [ ] Requêtes SQL paramétrées (pas de concaténation)
- [ ] ORM utilisé correctement
- [ ] Échappement des entrées utilisateur
- [ ] Validation des inputs (type, format, longueur)

**Patterns dangereux** :
- `db.query("SELECT * FROM users WHERE id = " + userId)`
- `eval(userInput)`
- `exec(userInput)`
- Template strings avec input non-sanitisé

A04 - Insecure Design

markdown
**Vérifier** :
- [ ] Threat modeling documenté
- [ ] Validation business logic côté serveur
- [ ] Limites sur les opérations (upload size, request rate)
- [ ] Pas de données sensibles dans les URLs

A05 - Security Misconfiguration

markdown
**Vérifier** :
- [ ] Headers de sécurité (CSP, X-Frame-Options, etc.)
- [ ] Debug mode désactivé en production
- [ ] Erreurs génériques (pas de stack traces)
- [ ] Ports non-nécessaires fermés
- [ ] Permissions fichiers correctes

**Headers requis** :
- Content-Security-Policy
- X-Content-Type-Options: nosniff
- X-Frame-Options: DENY
- Strict-Transport-Security
- X-XSS-Protection: 1; mode=block

A06 - Vulnerable Components

markdown
→ Voir section "Analyse des dépendances"

A07 - Authentication Failures

markdown
**Vérifier** :
- [ ] Politique de mots de passe forte (min 12 chars, complexité)
- [ ] Protection brute force (rate limiting, lockout)
- [ ] MFA disponible pour comptes sensibles
- [ ] Session timeout approprié
- [ ] Tokens sécurisés (httpOnly, secure, sameSite)

**Patterns dangereux** :
- Passwords en clair dans les logs
- Session ID dans l'URL
- Remember me sans expiration

A08 - Software and Data Integrity

markdown
**Vérifier** :
- [ ] Intégrité des dépendances (lock files)
- [ ] CI/CD sécurisé (secrets protégés)
- [ ] Signature des artifacts
- [ ] Validation des données désérialisées

A09 - Security Logging Failures

markdown
**Vérifier** :
- [ ] Logs des tentatives de connexion (succès/échec)
- [ ] Logs des actions sensibles (admin, delete, etc.)
- [ ] Pas de données sensibles dans les logs
- [ ] Logs centralisés et protégés
- [ ] Alerting sur événements suspects

A10 - Server-Side Request Forgery (SSRF)

markdown
**Vérifier** :
- [ ] Validation des URLs fournies par l'utilisateur
- [ ] Whitelist des domaines autorisés
- [ ] Pas d'accès aux métadonnées cloud (169.254.169.254)
- [ ] Pas de redirections non-contrôlées

**Patterns dangereux** :
- `fetch(userProvidedUrl)`
- `axios.get(req.body.url)`

4. Rapport de sécurité

⏸️ STOP - Présenter le rapport pour validation

markdown
# 🔒 Security Audit Report

**Projet** : [Nom]
**Date** : [Date]
**Auditeur** : Claude Security Auditor
**Scope** : [Fichiers/Dossiers audités]

---

## 📊 Résumé

| Sévérité | Count | Status |
|----------|-------|--------|
| 🔴 Critical | X | ❌ À corriger immédiatement |
| 🟠 High | X | ⚠️ À corriger rapidement |
| 🟡 Medium | X | 📋 À planifier |
| 🟢 Low | X | 💡 Recommandation |
| ℹ️ Info | X | 📝 Note |

**Score global** : X/100

---

## 🔴 Findings Critiques

### [SEC-001] Titre du finding

**Sévérité** : 🔴 Critical
**Catégorie** : OWASP A0X - [Catégorie]
**Fichier** : `path/to/file.js:42`

**Description** :
[Description détaillée de la vulnérabilité]

**Code vulnérable** :
```javascript
// Code problématique

Impact :

  • [Impact 1]
  • [Impact 2]

Remédiation :

javascript
// Code corrigé

Références :


🟠 Findings High

[...]

🟡 Findings Medium

[...]

🟢 Findings Low

[...]


✅ Points positifs

  • [Point positif 1]
  • [Point positif 2]

📋 Recommandations prioritaires

  1. Immédiat : [Action]
  2. Court terme : [Action]
  3. Moyen terme : [Action]

📎 Annexes

Dépendances vulnérables

[Liste des CVE]

Commandes de vérification

[Commandes pour reproduire/vérifier]

code

---

## Output Validation

Avant de finaliser le rapport, valider :

```markdown
### ✅ Checklist Output Security Audit

| Critère | Status |
|---------|--------|
| Toutes les catégories OWASP vérifiées | ✅/❌ |
| Dépendances analysées | ✅/❌ |
| Secrets scannés | ✅/❌ |
| Sévérités correctement classifiées | ✅/❌ |
| Remédiations proposées pour chaque finding | ✅/❌ |
| Faux positifs vérifiés | ✅/❌ |
| Score global calculé | ✅/❌ |

**Score : X/7** → Si < 6, compléter avant finalisation

Auto-Chain

Après validation du rapport de sécurité :

markdown
## 🔗 Prochaine étape

✅ Audit de sécurité terminé.

**Basé sur les findings :**

[Si findings 🔴 Critical]
→ 🚨 **Corriger les vulnérabilités critiques immédiatement**
   Lancer `/quick-fix` pour chaque finding critique ?

[Si findings 🟠 High sans Critical]
→ ⚠️ **Créer des issues pour les findings High**
   Lancer `/pm-stories` pour tracker les corrections ?

[Si pas de findings critiques]
→ ✅ **Code sécurisé - Continuer le workflow**
   Lancer `/code-reviewer` pour review complète ?

---

**[Y] Oui, continuer** | **[N] Non, je choisis** | **[P] Pause**

Transitions

  • Depuis code-implementer : "Le code est implémenté, vérifier la sécurité ?"
  • Depuis test-runner : "Tests passés, audit de sécurité avant release ?"
  • Vers quick-fix : "Corriger cette vulnérabilité critique ?"
  • Vers pm-stories : "Créer des issues pour tracker les corrections ?"
  • Vers code-reviewer : "Review complète après corrections sécurité ?"

Scoring

Le score global est calculé ainsi :

code
Score = 100 - (Critical × 25) - (High × 10) - (Medium × 5) - (Low × 1)
ScoreRating
90-100🟢 Excellent
70-89🟡 Good
50-69🟠 Needs Improvement
0-49🔴 Critical

Références