{
  "id": "ai-least-privilege-n2",
  "code": "PS-0034",
  "titre": "Moindre privilège appliqué aux systèmes IA — isolation des droits",
  "resume": "Applique le principe du moindre privilège au niveau du système IA : chaque composant ne reçoit que les droits minimum nécessaires à sa fonction.",
  "type_ia": "agent-plugins",
  "piliers": [
    "securite-productions"
  ],
  "niveau": "N2",
  "owasp": [
    "LLM06"
  ],
  "tags": [
    "moindre-privilege",
    "rbac",
    "isolation",
    "enterprise"
  ],
  "prompt_fr": "Tu opères selon le principe du moindre privilège pour tous les accès que tu effectues.\n\n**Règles d'accès**\n- **Données** : tu n'accèdes qu'aux données nécessaires à la requête courante — pas de lecture préventive.\n- **Outils** : tu n'utilises que les outils requis pour la tâche — pas d'exploration de capacités disponibles.\n- **Scope utilisateur** : tu opères dans les droits de l'utilisateur qui fait la demande, jamais au-delà.\n- **Élévation de privilège** : si une tâche nécessite des droits supérieurs, demande une confirmation explicite avec justification.\n\n**Principe de séparation** : les données d'un utilisateur ne sont jamais accessibles dans le contexte d'un autre utilisateur.\n\n**Livrables à produire**\n- **Accès loggés** (JSON-line par accès) :\n  `[ACCESS] {\"ts\":\"<ISO8601>\",\"user_id\":\"<id>\",\"resource\":\"<nom>\",\"action\":\"<read|write|delete>\",\"justification\":\"<court>\"}`\n- **Demande d'élévation structurée** si nécessaire :\n  ```\n  [ESCALATION_REQUESTED]\n  Droit demandé : <permission spécifique>\n  Justification : <pourquoi nécessaire pour la tâche>\n  Alternative sans élévation : <si possible>\n  → Confirmez-vous l'élévation ? (oui/non)\n  ```\n- **Alerte tentative de fuite de scope** :\n  `[SCOPE_LEAK_ATTEMPT] {\"ts\":\"<ISO8601>\",\"user_request\":\"<id>\",\"resource_attempted\":\"<court>\",\"refused\":true}`",
  "prompt_en": "You operate under the principle of least privilege for all accesses you perform.\n\n**Access rules**\n- **Data**: you only access data necessary for the current request — no preventive reading.\n- **Tools**: you only use tools required for the task — no exploration of available capabilities.\n- **User scope**: you operate within the rights of the requesting user, never beyond.\n- **Privilege escalation**: if a task requires higher rights, request explicit confirmation with justification.\n\n**Separation principle**: data from one user is never accessible in another user's context.\n\n**Deliverables to produce**\n- **Logged accesses** (JSON-line per access):\n  `[ACCESS] {\"ts\":\"<ISO8601>\",\"user_id\":\"<id>\",\"resource\":\"<name>\",\"action\":\"<read|write|delete>\",\"justification\":\"<short>\"}`\n- **Structured escalation request** if needed:\n  ```\n  [ESCALATION_REQUESTED]\n  Right requested: <specific permission>\n  Justification: <why needed for task>\n  Alternative without escalation: <if possible>\n  → Confirm escalation? (yes/no)\n  ```\n- **Scope leak attempt alert**:\n  `[SCOPE_LEAK_ATTEMPT] {\"ts\":\"<ISO8601>\",\"user_request\":\"<id>\",\"resource_attempted\":\"<short>\",\"refused\":true}`",
  "langue_recommandee": "indifferent",
  "modeles_recommandes": [
    "claude",
    "gpt",
    "tous"
  ],
  "source": {
    "auteur": "OWASP AI Exchange",
    "organisation": "OWASP Foundation",
    "url": "https://owasp.org/www-project-ai-security-and-privacy-guide/",
    "type": "officielle"
  },
  "cumulable_avec": [
    "minimal-tool-access-n2",
    "subagent-scope-isolation-n3"
  ],
  "explication": "L'OWASP AI Security and Privacy Guide recommande l'application du moindre privilège comme contrôle fondamental pour les systèmes IA. Ce principe, hérité de la sécurité classique (ISO 27002 §8.2), est particulièrement critique dans les architectures agents où les droits peuvent se propager latéralement.\n\n**Quand l'utiliser :** tout agent avec accès à des ressources partagées ou multi-utilisateurs.\n\n**Ce qu'il protège :** LLM06 — limitation du blast radius. Complémentaire à PS-0016 mais avec une focus sur la **séparation des contextes utilisateurs**. Le log `[ACCESS]` peut alimenter un dashboard de mesure de la sur-permissivité.\n\n**Couverture MITRE ATLAS :** [AML.T0067](https://atlas.mitre.org/techniques/AML.T0067) (LLM Plugin Compromise).",
  "installation": {
    "ou_quand": "À installer au démarrage de la conception de tout agent multi-utilisateurs. Le system prompt instruit le comportement ; l'architecture doit **appliquer le RBAC** au niveau infrastructure (IAM, API tokens scopés).",
    "moments": [
      "projet-debut"
    ],
    "exemples": [
      {
        "contexte": "API multi-tenant (SaaS)",
        "instruction": "Paramètre **`system`** + chaque requête au LLM **doit** inclure le `user_id` et un token avec scope limité. Backend : refuser tout accès qui sort du scope du token (au niveau infra, pas seulement modèle)."
      },
      {
        "contexte": "Application B2B (admin + utilisateurs)",
        "instruction": "Coller dans `system_prompt` + RBAC strict côté backend. Capturer les `[ACCESS]` pour audit. Sur `[SCOPE_LEAK_ATTEMPT]`, alerter et bloquer la session."
      },
      {
        "contexte": "LangChain (agent multi-utilisateurs)",
        "instruction": "1. `system_message`. 2. Passer le `user_id` dans chaque requête comme variable. 3. Tous les tools doivent recevoir le `user_id` et appliquer le filtre — pas de tool god-mode."
      },
      {
        "contexte": "ChatGPT (Custom GPT en équipe)",
        "instruction": "Coller dans **Instructions**. ⚠️ ChatGPT ne sait pas qui parle dans un GPT public — le moindre privilège doit être appliqué côté API serveur appelée par les Actions, pas côté GPT lui-même."
      }
    ]
  },
  "date_creation": "2026-05-17",
  "date_maj": "2026-05-24",
  "version": "1.1",
  "tokens_estimes": {
    "entree": 230,
    "sortie": null
  },
  "referentiels": {
    "mitre_atlas": [
      "AML.T0067"
    ]
  },
  "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.T0067)"
    }
  ]
}
