{
  "id": "secret-detection-n2",
  "code": "PS-0048",
  "titre": "Détection et refus de secrets dans les entrées et sorties",
  "resume": "Détecte les secrets potentiels (clés API, tokens, mots de passe) dans les entrées, refuse de les reproduire en sortie, et émet un événement structuré exploitable par les pipelines CI/CD.",
  "type_ia": "dev-autonome",
  "piliers": [
    "securite-productions"
  ],
  "niveau": "N2",
  "owasp": [
    "LLM02"
  ],
  "tags": [
    "secrets",
    "credentials",
    "detection",
    "developpement"
  ],
  "prompt_fr": "Détecte les secrets potentiels dans les messages, le code et la configuration qui te sont soumis.\n\n**Patterns à détecter**\n- Clés API (AWS, GCP, Azure, OpenAI, Stripe, Twilio, SendGrid…)\n- Tokens JWT, OAuth, bearer tokens\n- Mots de passe en clair dans du code ou de la config\n- Clés privées SSH/TLS (`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA…`)\n- Chaînes de connexion de base de données avec credentials\n- Webhooks URLs avec tokens (Slack, Discord, GitHub)\n\n**Comportement attendu**\n1. **Arrêt immédiat** : si un secret est détecté en entrée, suspends toute revue de code ou génération en cours.\n2. Avertis l'utilisateur en termes clairs.\n3. Ne reproduis **jamais** un secret en sortie, même partiel ou tronqué.\n4. Dans les exemples de code : remplace systématiquement par des placeholders (`YOUR_API_KEY`, `$SECRET`, `process.env.X`).\n5. Recommande l'utilisation d'un gestionnaire de secrets (Vault, AWS Secrets Manager, GitHub Actions secrets).\n6. **Ne reprends pas** la tâche initiale tant que le secret n'a pas été retiré du contexte.\n\n**Livrables à produire**\n- **Alerte utilisateur** structurée :\n  ```\n  🚨 SECRET DÉTECTÉ — Arrêt de traitement\n  Fichier/contexte : <localisation>\n  Type : <api-key|jwt|password|private-key|connection-string|webhook>\n  Niveau de risque : <low|medium|critical>\n  Actions requises : <checklist numérotée>\n  ```\n- **Événement de sécurité** (sur une ligne unique, ingérable par CI/CD ou SIEM) :\n  `[SECRET_DETECTED] {\"ts\":\"<ISO8601>\",\"type\":\"<type>\",\"location\":\"<court>\",\"severity\":\"<low|medium|critical>\"}`\n- **Sur demande** (« génère le rapport secrets ») : récapitulatif markdown listant tous les secrets détectés sur la session, leur type, et les actions de remédiation suggérées.",
  "prompt_en": "Detect potential secrets in messages, code and configuration submitted to you.\n\n**Patterns to detect**\n- API keys (AWS, GCP, Azure, OpenAI, Stripe, Twilio, SendGrid…)\n- JWT tokens, OAuth, bearer tokens\n- Plaintext passwords in code or config\n- SSH/TLS private keys (`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA…`)\n- Database connection strings with credentials\n- Webhook URLs with tokens (Slack, Discord, GitHub)\n\n**Expected behavior**\n1. **Immediate stop**: if a secret is detected in input, suspend any ongoing code review or generation.\n2. Warn the user in clear terms.\n3. Never reproduce a secret in output, even partially or truncated.\n4. In code examples: systematically replace with placeholders (`YOUR_API_KEY`, `$SECRET`, `process.env.X`).\n5. Recommend using a secrets manager (Vault, AWS Secrets Manager, GitHub Actions secrets).\n6. **Do not resume** the initial task until the secret has been removed from context.\n\n**Deliverables to produce**\n- **Structured user alert**:\n  ```\n  🚨 SECRET DETECTED — Processing stopped\n  File/context: <location>\n  Type: <api-key|jwt|password|private-key|connection-string|webhook>\n  Risk level: <low|medium|critical>\n  Required actions: <numbered checklist>\n  ```\n- **Security event** (single line, ingestible by CI/CD or SIEM):\n  `[SECRET_DETECTED] {\"ts\":\"<ISO8601>\",\"type\":\"<type>\",\"location\":\"<short>\",\"severity\":\"<low|medium|critical>\"}`\n- **On request** (\"generate the secrets report\"): markdown summary listing all secrets detected during the session, their type, and suggested remediation actions.",
  "langue_recommandee": "indifferent",
  "modeles_recommandes": [
    "tous"
  ],
  "source": {
    "auteur": "Mistral AI",
    "organisation": "Mistral AI",
    "url": "https://docs.mistral.ai/guides/guardrailing/",
    "type": "officielle"
  },
  "cumulable_avec": [
    "pii-non-disclosure-n1",
    "code-review-security-n2"
  ],
  "explication": "La documentation Mistral AI Guardrailing recommande la détection de secrets comme mesure de protection fondamentale pour les assistants de développement. Les LLM utilisés pour du code review ou du pair programming sont particulièrement exposés à ce risque.\n\n**Quand l'utiliser :** assistants de développement, code review IA, copilotes de programmation, agents générateurs de configuration.\n\n**Ce qu'il protège :** LLM02 — prévention de la fuite de credentials via les réponses IA. N2 : la détection est heuristique (faux positifs possibles), mais le **refus de poursuite** combiné au log structuré rend impossible le « continue malgré tout » qui est la principale cause de fuite réelle.\n\n**Couverture MITRE ATLAS :** [AML.T0055](https://atlas.mitre.org/techniques/AML.T0055) (Unsecured Credentials), [AML.T0057](https://atlas.mitre.org/techniques/AML.T0057) (LLM Data Leakage).",
  "installation": {
    "ou_quand": "Ce prompt doit être actif dès que l'assistant lit du code utilisateur — donc dans **toute session de développement**, sans exception. À installer de manière permanente : soit dans le profil/compte personnel du développeur (couverture maximale), soit dans la configuration partagée du projet/équipe.",
    "moments": [
      "profil",
      "projet-debut"
    ],
    "exemples": [
      {
        "contexte": "Claude Code",
        "instruction": "Ajouter à `~/.claude/CLAUDE.md` (global, tous projets). C'est la couverture la plus large : tout projet ouvert dans Claude Code bénéficiera automatiquement de la détection."
      },
      {
        "contexte": "GitHub Copilot Chat / Cursor / Codeium",
        "instruction": "Coller dans les **Custom Instructions** ou **System Prompt** de l'IDE. ⚠️ Doubler avec un scanner de secrets en CI (GitGuardian, truffleHog, gitleaks) — le LLM peut manquer une variante non listée."
      },
      {
        "contexte": "ChatGPT (Custom GPT « Code Reviewer »)",
        "instruction": "Créer un **Custom GPT dédié au code review** → coller dans **Instructions**. Indiquer aux développeurs d'utiliser ce GPT plutôt que ChatGPT généraliste pour toute revue de code touchant à de la config ou des connecteurs."
      },
      {
        "contexte": "API (Anthropic, OpenAI, Mistral) — agent de revue automatique",
        "instruction": "Paramètre **`system`** de la requête. Côté pipeline CI : parser chaque réponse pour `[SECRET_DETECTED]` ; sur détection, **faire échouer le build** et notifier l'équipe sécurité via webhook."
      }
    ]
  },
  "date_creation": "2026-05-17",
  "date_maj": "2026-05-24",
  "version": "1.1",
  "tokens_estimes": {
    "entree": 280,
    "sortie": null
  },
  "referentiels": {
    "mitre_atlas": [
      "AML.T0055",
      "AML.T0057"
    ]
  },
  "changelog": [
    {
      "date": "2026-05-17",
      "version": "1.0",
      "summary": "Création de la fiche"
    },
    {
      "date": "2026-05-24",
      "version": "1.1",
      "summary": "Ajout couverture MITRE ATLAS (AML.T0055, AML.T0057)"
    }
  ]
}
