Sécurité
Primauté de la portée : modèle de sécurité de l’assistant personnel
Section intitulée « Primauté de la portée : modèle de sécurité de l’assistant personnel »Les conseils de sécurité de OpenClaw supposent un déploiement d’assistant personnel : une seule frontière d’opérateur de confiance, potentiellement plusieurs agents.
- Posture de sécurité prise en charge : un utilisateur/frontière de confiance par passerelle (de préférence un utilisateur/hôte/VPS OS par frontière).
- Frontière de sécurité non prise en charge : une passerelle/agent partagé utilisé par des utilisateurs mutuellement non fiables ou adverses.
- Si une isolation entre utilisateurs adverses est requise, divisez par frontière de confiance (passerelle + identifiants séparés, et idéalement utilisateurs/hôtes OS séparés).
- Si plusieurs utilisateurs non fiables peuvent envoyer des messages à un seul agent avec outils activés, considérez qu’ils partagent la même autorité d’outil déléguée pour cet agent.
Cette page explique le durcissement dans ce modèle. Elle ne prétend pas à une isolation multi-locataires hostile sur une passerelle partagée.
Avant de modifier l’accès à distance, la stratégie DM, le proxy inverse ou l’exposition publique, utilisez le runbook d’exposition du Gateway comme liste de contrôle préalable et de retour en arrière.
Vérification rapide : openclaw security audit
Section intitulée « Vérification rapide : openclaw security audit »Voir aussi : Vérification formelle (Modèles de sécurité)
Exécutez ceci régulièrement (surtout après avoir modifié la configuration ou exposé des surfaces réseau) :
openclaw security auditopenclaw security audit --deepopenclaw security audit --fixopenclaw security audit --jsonsecurity audit --fix reste volontairement étroit : il inverse les politiques de groupe ouvert courantes
pour passer à des listes d’autorisation, restaure logging.redactSensitive: "tools", resserre
les autorisations d’état/configuration/fichier inclus et utilise les réinitialisations ACL Windows au lieu de
POSIX chmod lors de l’exécution sur Windows.
Il signale les pièges courants (exposition de l’authentification du Gateway, exposition du contrôle du navigateur, listes d’autorisation élevées, autorisations du système de fichiers, approbations d’exécution permissives et exposition d’outils sur des canaux ouverts).
OpenClaw est à la fois un produit et une expérience : vous connectez le comportement des modèles de pointe à des surfaces de messagerie réelles et à des outils réels. Il n’y a pas de configuration “parfaitement sécurisée”. L’objectif est d’être délibéré à propos de :
- qui peut parler à votre bot
- où le bot est autorisé à agir
- ce que le bot peut toucher
Commencez par le plus petit accès qui fonctionne encore, puis élargissez-le au fur et à mesure que vous gagnez en confiance.
Verrouillage des dépendances des packages publiés
Section intitulée « Verrouillage des dépendances des packages publiés »Les extractions de code source OpenClaw utilisent pnpm-lock.yaml. Le package npm publié openclaw et
les packages de plugins OpenClaw appartenant à npm incluent npm-shrinkwrap.json,
le fichier de verrouillage des dépendances publiables de npm, de sorte que les installations de packages utilisent le graphe
de dépendances transitives examiné à partir de la version au lieu de résoudre un nouveau graphe
au moment de l’installation.
Shrinkwrap est une limite de durcissement de la chaîne d’approvisionnement et de reproductibilité des versions, non un bac à sable (sandbox). Pour le modèle en anglais clair, les commandes de maintenance et les vérifications d’inspection de package, voir npm shrinkwrap.
Déploiement et confiance de l’hôte
Section intitulée « Déploiement et confiance de l’hôte »OpenClaw suppose que l’hôte et la limite de configuration sont fiables :
- Si quelqu’un peut modifier l’état/la configuration de l’hôte du Gateway (
~/.openclaw, y comprisopenclaw.json), considérez-le comme un opérateur fiable. - Exécuter un Gateway pour plusieurs opérateurs mutuellement non fiables ou adverses n’est pas une configuration recommandée.
- Pour les équipes à confiance mixte, séparez les limites de confiance avec des passerelles distinctes (ou au minimum des utilisateurs/hôtes OS distincts).
- Par défaut recommandé : un utilisateur par machine/hôte (ou VPS), une passerelle pour cet utilisateur, et un ou plusieurs agents dans cette passerelle.
- Dans une instance Gateway, l’accès opérateur authentifié est un rôle de plan de contrôle fiable, et non un rôle locataire par utilisateur.
- Les identifiants de session (
sessionKey, IDs de session, étiquettes) sont des sélecteurs de routage, et non des jetons d’autorisation. - Si plusieurs personnes peuvent envoyer un message à un même agent avec des outils activés, chacune d’elles peut piloter ce même ensemble d’autorisations. L’isolation de session/mémoire par utilisateur contribue à la confidentialité, mais ne convertit pas un agent partagé en une autorisation hôte par utilisateur.
Opérations sécurisées sur les fichiers
Section intitulée « Opérations sécurisées sur les fichiers »OpenClaw utilise @openclaw/fs-safe pour l’accès aux fichiers borné par la racine, les écritures atomiques, l’extraction d’archives, les espaces de travail temporaires et les assistants de fichiers secrets. OpenClaw désactive par défaut l’assistant Python POSIX facultatif de fs-safe ; ne définissez OPENCLAW_FS_SAFE_PYTHON_MODE=auto ou require que si vous souhaitez le durcissement supplémentaire contre les mutations relatives aux descripteurs de fichiers et si vous pouvez prendre en charge un environnement d’exécution Python.
Détails : Opérations sécurisées sur les fichiers.
Espace de travail Slack partagé : un risque réel
Section intitulée « Espace de travail Slack partagé : un risque réel »Si « tout le monde dans Slack peut envoyer un message au bot », le risque principal réside dans l’autorité déléguée aux outils :
- tout expéditeur autorisé peut déclencher des appels d’outils (
exec, navigateur, outils réseau/fichiers) dans la limite de la politique de l’agent ; - l’injection de prompt/contenu par un expéditeur peut provoquer des actions affectant l’état partagé, les appareils ou les sorties ;
- si un agent partagé possède des informations d’identification ou des fichiers sensibles, tout expéditeur autorisé peut potentiellement piloter une exfiltration via l’utilisation d’outils.
Utilisez des agents/passerelles distincts avec un minimum d’outils pour les flux de travail d’équipe ; gardez les agents de données personnelles privés.
Agent partagé par l’entreprise : modèle acceptable
Section intitulée « Agent partagé par l’entreprise : modèle acceptable »C’est acceptable lorsque tous les utilisateurs de cet agent se trouvent dans la même limite de confiance (par exemple, une équipe d’entreprise) et que l’agent est strictement limité au contexte professionnel.
- exécutez-le sur une machine/VM/conteneur dédié ;
- utilisez un utilisateur du système d’exploitation dédié + un navigateur/profil/comptes dédiés pour cet environnement d’exécution ;
- ne connectez pas cet environnement d’exécution à des comptes personnels Apple/Google ou à des profils personnels de gestionnaire de mots de passe/navigateur.
Si vous mélangez des identités personnelles et d’entreprise sur le même environnement d’exécution, vous réduisez la séparation et augmentez le risque d’exposition des données personnelles.
Concept de confiance entre Gateway et nœud
Section intitulée « Concept de confiance entre Gateway et nœud »Traitez Gateway et le nœud comme un seul domaine de confiance de l’opérateur, avec des rôles différents :
- Le Gateway est le plan de contrôle et la surface de stratégie (Gateway
gateway.auth, stratégie d’outil, routage). - Le Node est la surface d’exécution distante appariée à ce Gateway (commandes, actions d’appareil, capacités locales à l’hôte).
- Un appelant authentifié auprès du Gateway est approuvé au niveau du scope du Gateway. Après l’appariement, les actions du nœud sont des actions d’opérateur approuvées sur ce nœud.
- Les niveaux de scope de l’opérateur et les vérifications au moment de l’approbation sont résumés dans Operator scopes.
- Les clients backend en boucle directe authentifiés avec le jeton/mot de passe partagé du gateway peuvent effectuer des RPC de plan de contrôle interne sans présenter d’identité d’appareil utilisateur. Ce n’est pas un contournement de l’appariement distant ou navigateur : les clients réseau, les clients nœud, les clients de jeton d’appareil et les identités d’appareil explicites passent toujours par l’appariement et l’application de l’upgrade de scope.
sessionKeyest une sélection de routage/contexte, pas une auth par utilisateur.- Les approbations d’exécution (allowlist + ask) sont des garde-fous pour l’intention de l’opérateur, pas une isolation multilocataire hostile.
- Par défaut, pour les configurations à opérateur unique approuvé, le produit OpenClaw autorise l’exécution hôte sur OpenClaw
gateway/nodesans invites d’approbation (security="full",ask="off"sauf si vous le restreignez). Ce défaut est une UX intentionnelle, pas une vulnérabilité en soi. - Les approbations d’exécution lient le contexte exact de la requête et les opérandes de fichiers locaux directs au mieux ; elles ne modélisent pas sémantiquement chaque chemin de chargeur d’exécution/interpréteur. Utilisez le sandboxing et l’isolation de l’hôte pour des limites strictes.
Si vous avez besoin d’une isolation des utilisateurs hostiles, divisez les limites de confiance par utilisateur/hôte OS et exécutez des gateways séparés.
Matrice des limites de confiance
Section intitulée « Matrice des limites de confiance »Utilisez ceci comme le modèle rapide lors du triage des risques :
| Limite ou contrôle | Ce que cela signifie | Mauvaise lecture courante |
|---|---|---|
gateway.auth (token/mot de passe/trusted-proxy/auth appareil) | Authentifie les appelants auprès des API du gateway | ”Nécessite des signatures par message sur chaque trame pour être sécurisé” |
sessionKey | Clé de routage pour la sélection de context/session | ”La clé de session est une limite d’auth utilisateur” |
| Garde-fous de prompt/contenu | Réduire le risque d’abus de model | ”L’injection de prompt seule prouve un contournement de l’authentification” |
canvas.eval / évaluation navigateur | Capacité intentionnelle de l’opérateur lorsqu’elle est activée | ”Toute primitive d’évaluation JS est automatiquement une vulnérabilité dans ce modèle de confiance” |
Shell TUI local TUI! | Exécution locale déclenchée explicitement par l’opérateur | ”Une commande de commodité de shell local est une injection à distance” |
| Appairage de nœuds et commandes de nœuds | Exécution à distance au niveau de l’opérateur sur les appareils appairés | ”Le contrôle d’appareil à distance doit être traité comme un accès utilisateur non approuvé par défaut” |
gateway.nodes.pairing.autoApproveCidrs | Stratégie d’inscription de nœud sur réseau approuvé (opt-in) | “Une liste d’autorisation (allowlist) désactivée par défaut est une vulnérabilité d’appairage automatique” |
Pas de vulnérabilités par conception
Section intitulée « Pas de vulnérabilités par conception »Common findings that are out of scope
Ces modèles sont souvent signalés et sont généralement clôturés sans action, sauf si un contournement réel d’une limite est démontré :
- Chaînes d’injection de prompt uniquement sans contournement de stratégie, d’authentification ou de bac à sable.
- Affirmations qui supposent une opération multi-locataire hostile sur un hôte ou une configuration partagée.
- Affirmations qui classent l’accès normal au chemin de lecture de l’opérateur (par exemple
sessions.list/sessions.preview/chat.history) comme un IDOR dans une configuration de Gateway partagée. - Constatations de déploiement localhost uniquement (par exemple HSTS sur un Gateway en boucle locale uniquement).
- Constatations de signature de webhook entrant Discord pour les chemins d’entrée qui n’existent pas dans ce dépôt.
- Rapports qui traitent les métadonnées d’appariement de nœud comme une deuxième couche d’approbation par commande cachée pour
system.run, alors que la limite d’exécution réelle est toujours la stratégie de commande de nœud global du Gateway plus les approbations d’exécution propres au nœud. - Rapports qui traitent le
gateway.nodes.pairing.autoApproveCidrsconfiguré comme une vulnérabilité en soi. Ce paramètre est désactivé par défaut, nécessite des entrées CIDR/IP explicites, ne s’applique qu’au premier appariementrole: nodesans étendues demandées, et n’approuve pas automatiquement l’opérateur/navigateur/Control UI, WebChat, les mises à niveau de rôle, les mises à niveau d’étendue, les modifications de métadonnées, les modifications de clé publique, ou les chemins d’en-tête de proxy de confiance en boucle locale sur le même hôte, sauf si l’authentification de proxy de confiance en boucle locale a été explicitement activée. - Constatations « d’autorisation par utilisateur manquante » qui traitent
sessionKeycomme un jeton d’authentification.
Ligne de base renforcée en 60 secondes
Section intitulée « Ligne de base renforcée en 60 secondes »Utilisez d’abord cette ligne de base, puis réactivez sélectivement les outils par agent de confiance :
{ gateway: { mode: "local", bind: "loopback", auth: { mode: "token", token: "replace-with-long-random-token" }, }, session: { dmScope: "per-channel-peer", }, tools: { profile: "messaging", deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"], fs: { workspaceOnly: true }, exec: { security: "deny", ask: "always" }, elevated: { enabled: false }, }, channels: { whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } } }, },}Cela permet de garder le Gateway en local uniquement, d’isoler les DMs et de désactiver les outils du plan de contrôle/d’exécution par défaut.
Règle rapide pour la boîte de réception partagée
Section intitulée « Règle rapide pour la boîte de réception partagée »Si plus d’une personne peut envoyer un DM à votre bot :
- Définissez
session.dmScope: "per-channel-peer"(ou"per-account-channel-peer"pour les canaux multi-comptes). - Conservez
dmPolicy: "pairing"ou des listes d’autorisation strictes. - Ne combinez jamais les DMs partagés avec un accès étendu aux outils.
- Cela renforce les boîtes de réception coopératives/partagées, mais n’est pas conçu comme une isolation de co-locataire hostile lorsque les utilisateurs partagent un accès en écriture à l’hôte/à la configuration.
Modèle de visibilité du contexte
Section intitulée « Modèle de visibilité du contexte »OpenClaw sépare deux concepts :
- Autorisation de déclenchement : qui peut déclencher l’agent (
dmPolicy,groupPolicy, listes d’autorisation, barrières de mention). - Visibilité du contexte : quel contexte supplémentaire est injecté dans l’entrée du modèle (corps de la réponse, texte cité, historique du fil, métadonnées transférées).
Les listes d’autorisation filtrent les déclencheurs et l’autorisation des commandes. Le paramètre contextVisibility contrôle la façon dont le contexte supplémentaire (réponses citées, racines des fils, historique récupéré) est filtré :
contextVisibility: "all"(par défaut) conserve le contexte supplémentaire tel qu’il est reçu.contextVisibility: "allowlist"filtre le contexte supplémentaire pour n’envoyer que celui des expéditeurs autorisés par les vérifications actives de la liste d’autorisation.contextVisibility: "allowlist_quote"se comporte commeallowlist, mais conserve tout de même une réponse citée explicite.
Définissez contextVisibility par channel ou par salle/conversation. Consultez Group Chats pour les détails de la configuration.
Conseils de triage consultatif :
- Les rapports qui montrent uniquement « le modèle peut voir du texte cité ou historique d’expéditeurs non autorisés » sont des constats de durcissement traitables avec
contextVisibility, et non des contournements de frontières d’authentification ou de bac à sable par eux-mêmes. - Pour avoir un impact sur la sécurité, les rapports doivent toujours démontrer un contournement d’une frontière de confiance (authentification, stratégie, bac à sable, approbation ou une autre frontière documentée).
Ce que l’audit vérifie (niveau élevé)
Section intitulée « Ce que l’audit vérifie (niveau élevé) »- Accès entrant (stratégies DM, stratégies de groupe, listes d’autorisation) : des inconnus peuvent-ils déclencher le bot ?
- Rayon d’explosion des outils (outils élevés + salles ouvertes) : une injection de prompt peut-elle se transformer en actions shell/fichier/réseau ?
- Dérive du système de fichiers exécutable : les outils de modification du système de fichiers sont-ils refusés alors que
exec/processrestent disponibles sans contraintes de système de fichiers du bac à sable ? - Dérive de l’approbation d’exécution (
security=full,autoAllowSkills, listes d’autorisation de l’interpréteur sansstrictInlineEval) : les garde-fous d’exécution sur l’hôte font-ils toujours ce que vous pensez ?security="full"est un avertissement général de posture, et non la preuve d’un bogue. C’est l’option par défaut choisie pour les configurations d’assistant personnel de confiance ; ne le renforcez que lorsque votre modèle de menace nécessite des garde-fous d’approbation ou de liste blanche.
- Exposition réseau (liaison/autorisation du GatewayTailscale, Tailscale Serve/Funnel, jetons d’auth faibles/courts).
- Exposition du contrôle du navigateur (nœuds distants, ports de relais, points de terminaison CDP distants).
- Hygiène du disque local (autorisations, liens symboliques, inclusions de configuration, chemins de « dossiers synchronisés »).
- Plugins (les plugins se chargent sans liste blanche explicite).
- Dérive/mauvaise configuration de la stratégie (paramètres Docker du bac à sable configurés mais mode bac à sable désactivé ; modèles
gateway.nodes.denyCommandsinefficaces car la correspondance se fait uniquement sur le nom exact de la commande (par exemplesystem.run) et n’inspecte pas le texte du shell ; entréesgateway.nodes.allowCommandsdangereuses ;tools.profile="minimal"global remplacé par des profils par agent ; outils appartenant à des plugins accessibles sous une stratégie d’outil permissive). - Dérive des attentes d’exécution (par exemple, supposer que l’exec implicite signifie toujours
sandboxalors quetools.exec.hostest désormais par défaut surauto, ou définir explicitementtools.exec.host="sandbox"alors que le mode bac à sable est désactivé). - Hygiène des modèles (avertir lorsque les modèles configurés semblent obsolètes ; pas un blocage strict).
Si vous exécutez --deep, OpenClaw tente également une sonde en direct du Gateway de meilleure effort.
Carte du stockage des identifiants
Section intitulée « Carte du stockage des identifiants »Utilisez ceci lors de l’audit de l’accès ou pour décider ce qu’il faut sauvegarder :
- WhatsApp :
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - Jeton de bot Telegram : config/env ou
channels.telegram.tokenFile(fichier régulier uniquement ; les liens symboliques sont rejetés) - Jeton de bot Discord : config/env ou SecretRef (fournisseurs env/file/exec)
- Jetons Slack : config/env (
channels.slack.*) - Listes blanches d’appariement :
~/.openclaw/credentials/<channel>-allowFrom.json(compte par défaut)~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json(comptes non par défaut)
- Profils d’authentification de modèle :
~/.openclaw/agents/<agentId>/agent/auth-profiles.json - État d’exécution Codex :
~/.openclaw/agents/<agentId>/agent/codex-home/ - Payload de secrets basés sur des fichiers (facultatif) :
~/.openclaw/secrets.json - Importation OAuth héritée :
~/.openclaw/credentials/oauth.json
Liste de contrôle d’audit de sécurité
Section intitulée « Liste de contrôle d’audit de sécurité »Lorsque l’audit affiche des résultats, traitez-les selon cet ordre de priorité :
- Tout ce qui est “ouvert” + outils activés : verrouillez d’abord les MP/groupes (appariement/listes d’autorisation), puis durcissez la stratégie d’outil/le sandboxing.
- Exposition au réseau public (liaison LAN, Funnel, auth manquante) : corrigez immédiatement.
- Exposition distante du contrôle du navigateur : traitez-la comme un accès opérateur (tailnet uniquement, associez les nœuds délibérément, évitez l’exposition publique).
- Autorisations : assurez-vous que l’état/la configuration/les identifiants/l’auth ne sont pas lisibles par le groupe/le monde.
- Plugins : ne chargez que ce en quoi vous avez explicitement confiance.
- Choix du modèle : privilégiez les modèles modernes et durcis contre les instructions pour tout bot disposant d’outils.
Glossaire de l’audit de sécurité
Section intitulée « Glossaire de l’audit de sécurité »Chaque résultat d’audit est indexé par une checkId structurée (par exemple
gateway.bind_no_auth ou tools.exec.security_full_configured). Classes
de gravité critiques courantes :
fs.*- autorisations de système de fichiers sur l’état, la configuration, les identifiants, les profils d’auth.gateway.*- mode de liaison, auth, Tailscale, Control UI, configuration du proxy de confiance.hooks.*,browser.*,sandbox.*,tools.exec.*- durcissement par surface.plugins.*,skills.*- chaîne d’approvisionnement de plugins/compétences et résultats d’analyse.security.exposure.*- vérifications transversales où la stratégie d’accès rencontre le rayon d’impact de l’outil.
Voir le catalogue complet avec les niveaux de gravité, les clés de correction et la prise en charge de la correction automatique sur Security audit checks.
Control UI sur HTTP
Section intitulée « Control UI sur HTTP »Le Control UI a besoin d’un contexte sécurisé (HTTPS ou localhost) pour générer l’identité
de l’appareil. gateway.controlUi.allowInsecureAuth est un commutateur de compatibilité locale :
- Sur localhost, il autorise l’auth Control UI sans identité d’appareil lorsque la page est chargée via HTTP non sécurisé.
- Il ne contourne pas les vérifications d’appariement.
- Il ne relâche pas les exigences d’identité d’appareil distantes (non-localhost).
Préférez HTTPS (Tailscale Serve) ou ouvrez l’interface utilisateur sur Tailscale127.0.0.1.
Uniquement pour les scénarios de bris de verre, gateway.controlUi.dangerouslyDisableDeviceAuth
désactive entièrement les vérifications d’identité de l’appareil. Il s’agit d’une grave dégradation de la sécurité ;
gardez-la désactivée, sauf si vous êtes en train de déboguer activement et pouvez revenir en arrière rapidement.
Indépendamment de ces indicateurs dangereux, une réussite de gateway.auth.mode: "trusted-proxy"
peut admettre des sessions de l’interface utilisateur de contrôle opérateur sans identité d’appareil. Il s’agit d’un
comportement intentionnel du mode d’authentification, et non d’un raccourci allowInsecureAuth, et cela
ne s’étend toujours pas aux sessions de l’interface utilisateur de contrôle avec un rôle de nœud.
openclaw security audit avertit lorsque ce paramètre est activé.
Résumé des indicateurs non sécurisés ou dangereux
Section intitulée « Résumé des indicateurs non sécurisés ou dangereux »openclaw security audit déclenche config.insecure_or_dangerous_flags lorsque
des commutateurs de débogage non sécurisés/dangereux connus sont activés. Gardez-les non définis en
production. Chaque indicateur activé est signalé comme sa propre découverte. Si des
suppressions d’audit sont configurées, security.audit.suppressions.active reste dans la
sortie d’audit active même lorsque les découvertes correspondantes sont déplacées vers suppressedFindings.
Indicateurs suivis par l'audit aujourd'hui
gateway.controlUi.allowInsecureAuth=truegateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truegateway.controlUi.dangerouslyDisableDeviceAuth=true- `security.audit.suppressions configured (
) -hooks.gmail.allowUnsafeExternalContent=true -hooks.mappings[
].allowUnsafeExternalContent=true -tools.exec.applyPatch.workspaceOnly=false -plugins.entries.acpx.config.permissionMode=approve-all`
Toutes les clés `dangerous*` / `dangerously*` dans le schéma de configuration
Contrôle de l’interface utilisateur et du navigateur :
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallbackgateway.controlUi.dangerouslyDisableDeviceAuthbrowser.ssrfPolicy.dangerouslyAllowPrivateNetwork
Correspondance des noms de channel (canaux intégrés et plug-in ; également disponible par `accounts.
` le cas échéant) :
- `channels.discord.dangerouslyAllowNameMatching`- `channels.slack.dangerouslyAllowNameMatching`- `channels.googlechat.dangerouslyAllowNameMatching`- `channels.msteams.dangerouslyAllowNameMatching`- `channels.synology-chat.dangerouslyAllowNameMatching` (channel de plug-in)- `channels.synology-chat.dangerouslyAllowInheritedWebhookPath` (channel de plug-in)- `channels.zalouser.dangerouslyAllowNameMatching` (channel de plug-in)- `channels.irc.dangerouslyAllowNameMatching` (channel de plug-in)- `channels.mattermost.dangerouslyAllowNameMatching` (channel de plug-in)
Exposition réseau :
- `channels.telegram.network.dangerouslyAllowPrivateNetwork` (également par compte)
Sandbox Docker (par défaut + par agent) :
- `agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets`- `agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources`- `agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin`Configuration du reverse proxy
Section intitulée « Configuration du reverse proxy »Si vous exécutez le Gateway derrière un reverse proxy (nginx, Caddy, Traefik, etc.), configurez
gateway.trustedProxies pour une gestion correcte des IP clients transmises.
Lorsque le Gateway détecte des en-têtes de proxy provenant d’une adresse qui n’est pas dans trustedProxies, il ne traitera pas les connexions comme des clients locaux. Si l’authentification de la passerelle est désactivée, ces connexions sont rejetées. Cela empêche le contournement de l’authentification où les connexions proxysées apparaîtraient autrement comme provenant de localhost et recevraient une confiance automatique.
gateway.trustedProxies alimente également gateway.auth.mode: "trusted-proxy", mais ce mode d’authentification est plus strict :
- l’authentification trusted-proxy échoue en mode fermé (fails closed) par défaut sur les proxies sources en boucle locale
- les reverse proxys en boucle locale sur le même hôte peuvent utiliser
gateway.trustedProxiespour la détection des clients locaux et la gestion des IP transmises - les reverse proxys en boucle locale sur le même hôte peuvent satisfaire
gateway.auth.mode: "trusted-proxy"uniquement lorsquegateway.auth.trustedProxy.allowLoopback = true; sinon utilisez l’authentification par jeton/mot de passe
gateway: trustedProxies: - "10.0.0.1" # reverse proxy IP # Optional. Default false. # Only enable if your proxy cannot provide X-Forwarded-For. allowRealIpFallback: false auth: mode: password password: ${OPENCLAW_GATEWAY_PASSWORD}Lorsque trustedProxies est configuré, le Gateway utilise X-Forwarded-For pour déterminer l’IP du client. X-Real-IP est ignoré par défaut, sauf si gateway.allowRealIpFallback: true est défini explicitement.
Les en-têtes de proxy de confiance ne rendent pas le jumelage des appareils du nœud automatiquement fiable.
gateway.nodes.pairing.autoApproveCidrs est une stratégie d’opérateur distincte, désactivée par défaut.
Même lorsqu’elle est activée, les chemins d’en-têtes de proxy de confiance source de boucle locale
sont exclus de l’auto-approbation du nœud car les appelants locaux peuvent falsifier ces
en-têtes, y compris lorsque l’authentification de proxy de confiance de boucle locale est explicitement activée.
Bon comportement de proxy inverse (écraser les en-têtes de transfert entrants) :
proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Real-IP $remote_addr;Mauvais comportement de proxy inverse (ajouter/préserver les en-têtes de transfert non fiables) :
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;Notes sur HSTS et l’origine
Section intitulée « Notes sur HSTS et l’origine »- La passerelle OpenClaw est locale/boucle locale en priorité. Si vous terminez TLS sur un proxy inverse, définissez HSTS sur le domaine HTTPS faisant face au proxy à cet endroit.
- Si la passerelle termine elle-même HTTPS, vous pouvez définir
gateway.http.securityHeaders.strictTransportSecuritypour émettre l’en-tête HSTS à partir des réponses OpenClaw. - Des conseils de déploiement détaillés sont disponibles dans Trusted Proxy Auth.
- Pour les déploiements de l’interface de contrôle non boucle locale,
gateway.controlUi.allowedOriginsest requis par défaut. gateway.controlUi.allowedOrigins: ["*"]est une stratégie explicite autorisant toutes les origines de navigateur, et non un paramètre par défaut durci. Évitez de l’utiliser en dehors de tests locaux étroitement contrôlés.- Les échecs d’authentification par origine du navigateur sur la boucle locale sont toujours limités en taux même lorsque l’exemption générale de boucle locale est activée, mais la clé de verrouillage est délimitée par valeur
Originnormalisée au lieu d’un compartiment localhost partagé. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueactive le mode de secours de l’origine via l’en-tête Host ; traitez-le comme une stratégie dangereuse sélectionnée par l’opérateur.- Traitez le rebinding DNS et le comportement de l’en-tête proxy-hôte comme des préoccupations de durcissement du déploiement ; gardez
trustedProxiesstrict et évitez d’exposer la passerelle directement à l’internet public.
Les journaux de session locale résident sur le disque
Section intitulée « Les journaux de session locale résident sur le disque »OpenClaw stocke les transcriptions de sessions sur le disque sous OpenClaw~/.openclaw/agents/<agentId>/sessions/*.jsonl.
Cela est nécessaire pour la continuité de la session et (optionnellement) l’indexation de la mémoire de session, mais cela signifie également que tout processus/utilisateur ayant accès au système de fichiers peut lire ces journaux. Traitez l’accès au disque comme une limite de confiance et verrouillez les autorisations sur ~/.openclaw (voir la section d’audit ci-dessous). Si vous avez besoin d’une isolation plus forte entre les agents, faites-les fonctionner sous des utilisateurs OS séparés ou des hôtes séparés.
Exécution de nœud (system.run)
Section intitulée « Exécution de nœud (system.run) »Si un nœud macOS est jumelé, le Gateway peut invoquer macOSGatewaysystem.run sur ce nœud. Il s’agit d’une exécution de code à distance sur le Mac :
- Nécessite un jumelage de nœud (approbation + jeton).
- Le jumelage de nœuds Gateway n’est pas une surface d’approbation par commande. Il établit l’identité/la confiance du nœud et l’émission de jetons.
- Le Gateway applique une stratégie globale grossière de commande de nœud via Gateway
gateway.nodes.allowCommands/denyCommands. - Contrôlé sur le Mac via Paramètres → Approbations d’exécution (sécurité + demander + liste blanche).
- La stratégie
system.runpar nœud est le propre fichier d’approbations d’exécution du nœud (exec.approvals.node.*), qui peut être plus stricte ou plus souple que la stratégie globale d’ID de commande du gateway. - Un nœud fonctionnant avec
security="full"etask="off"suit le modèle par défaut d’opérateur de confiance. Considérez cela comme un comportement attendu, sauf si votre déploiement nécessite explicitement une approbation plus stricte ou une position de liste blanche. - Le mode d’approbation lie le contexte exact de la demande et, si possible, un opérande concret unique de script/fichier local. Si OpenClaw ne peut pas identifier exactement un fichier local direct pour une commande d’interpréteur/runtime, l’exécution soutenue par l’approbation est refusée plutôt que de promettre une couverture sémantique complète.
- Pour
host=node, les exécutions soutenues par l’approbation stockent également unsystemRunPlanpréparé canonique ; les réacheminements approuvés ultérieurement réutilisent ce plan stocké, et la validation du gateway rejette les modifications de l’appelant sur le contexte de commande/répertoire de travail/session après la création de la demande d’approbation. - Si vous ne souhaitez pas d’exécution à distance, définissez la sécurité sur deny et supprimez l’appariement du nœud pour ce Mac.
Cette distinction est importante pour le triage :
- Un nœud apparié se reconnectant et annonçant une liste de commandes différente n’est pas, en soi, une vulnérabilité si la stratégie globale du Gateway et les approbations d’exécution locales du nœud appliquent toujours la limite d’exécution réelle.
- Les rapports qui traitent les métadonnées d’appariement de nœuds comme une deuxième couche d’approbation cachée par commande sont généralement une confusion de stratégie/UX, et non un contournement de la limite de sécurité.
Compétences dynamiques (watcher / nœuds distants)
Section intitulée « Compétences dynamiques (watcher / nœuds distants) »OpenClaw peut actualiser la liste des compétences en cours de session :
- Skills watcher : les modifications apportées à
SKILL.mdpeuvent mettre à jour l’instantané des compétences lors du prochain tour de l’agent. - Remote nodes : connecter un nœud macOS peut rendre les compétences exclusives à macOS éligibles (basé sur le sondage des binaires).
Traitez les dossiers de compétences comme un code de confiance et restreignez qui peut les modifier.
Le modèle de menace
Section intitulée « Le modèle de menace »Votre assistant IA peut :
- Exécuter des commandes shell arbitraires
- Lire/écrire des fichiers
- Accéder aux services réseau
- Envoyer des messages à n’importe qui (si vous lui donnez accès à WhatsApp)
Les personnes qui vous envoient des messages peuvent :
- Essayer de tromper votre IA pour qu’elle fasse de mauvaises choses
- Obtenir un accès social à vos données
- Sonder pour obtenir des détails sur l’infrastructure
Concept de base : contrôle d’accès avant intelligence
Section intitulée « Concept de base : contrôle d’accès avant intelligence »La plupart des échecs ici ne sont pas des exploits sophistiqués - ce sont des cas où “quelqu’un a envoyé un message au bot et le bot a fait ce qu’il lui a demandé”.
La position de OpenClaw :
- Identité d’abord : décidez qui peut parler au bot (appariement DM / listes d’autorisation / “open” explicite).
- Portée ensuite : décidez où le bot est autorisé à agir (listes d’autorisation de groupe + filtrage par mention, outils, sandboxing, autorisations de périphérique).
- Modèle enfin : supposez que le modèle peut être manipulé ; concevez pour que la manipulation ait un rayon d’impact limité.
Modèle d’autorisation de commande
Section intitulée « Modèle d’autorisation de commande »Les commandes slash et les directives ne sont honorées que pour les expéditeurs autorisés. L’autorisation est dérivée des listes d’autorisation/appariements de canal ainsi que de commands.useAccessGroups (voir Configuration
et Commandes slash). Si une liste d’autorisation de canal est vide ou inclut "*",
les commandes sont effectivement ouvertes pour ce canal.
/exec est une commodité de session uniquement pour les opérateurs autorisés. Elle n’écrit pas la configuration ou
ne modifie pas les autres sessions.
Risque des outils du plan de contrôle
Section intitulée « Risque des outils du plan de contrôle »Deux outils intégrés peuvent apporter des modifications persistantes au plan de contrôle :
gatewaypeut inspecter la configuration avecconfig.schema.lookup/config.get, et peut apporter des modifications persistantes avecconfig.apply,config.patch, etupdate.run.cronpeut créer des tâches planifiées qui continuent de s’exécuter après la fin du chat/tâche d’origine.
L’outil d’exécution gateway orienté agent refuse toujours de réécrire
tools.exec.ask ou tools.exec.security ; les alias tools.bash.* hérités sont
normalisés vers les mêmes chemins d’exécution protégés avant l’écriture.
Les modifications gateway config.apply et gateway config.patch pilotées par l’agent sont
fermées par défaut en cas d’échec : seul un ensemble restreint de chemins de prompt, de model et de filtrage par mention
sont ajustables par l’agent. Les nouveaux arbres de configuration sensibles sont donc protégés
sauf s’ils sont délibérément ajoutés à la liste d’autorisation.
Pour tout agent/interface qui gère du contenu non fiable, refusez-les par défaut :
{ tools: { deny: ["gateway", "cron", "sessions_spawn", "sessions_send"], },}commands.restart=false bloque uniquement les actions de redémarrage. Il ne désactive pas les actions de configuration/mise à jour de gateway.
Les plugins s’exécutent en cours de processus avec le Gateway. Traitez-les comme du code de confiance :
- N’installez des plugins qu’à partir de sources de confiance.
- Préférez des listes d’autorisation
plugins.allowexplicites. - Vérifiez la configuration du plugin avant de l’activer.
- Redémarrez le Gateway après avoir modifié les plugins.
- Si vous installez ou mettez à jour des plugins (
openclaw plugins install <package>,openclaw plugins update <id>), traitez cela comme l’exécution de code non fiable :- Le chemin d’installation est le répertoire spécifique à chaque plugin sous la racine d’installation des plugins actifs.
- OpenClaw exécute une analyse intégrée de code dangereux avant l’installation/la mise à jour. Les résultats
criticalbloquent par défaut. - Les installations de plugins via npm et git exécutent la convergence des dépendances du gestionnaire de packages uniquement lors du flux explicite d’installation/mise à jour. Les chemins locaux et les archives sont traités comme des packages de plugins autonomes ; OpenClaw les copie ou y fait référence sans exécuter
npm install. - Privilégiez les versions épinglées et exactes (
@scope/[email protected]), et inspectez le code décompressé sur le disque avant l’activation. --dangerously-force-unsafe-installest une mesure de bris de glace (break-glass) uniquement pour les faux positifs de l’analyse intégrée lors des flux d’installation/mise à jour de plugins. Elle ne contourne pas les blocages de stratégie du hookbefore_installdu plugin et ne contourne pas les échecs d’analyse.- Les installations de dépendances de compétences soutenues par le Gateway suivent le même découpage dangereux/suspect : les résultats intégrés
criticalbloquent sauf si l’appelant définit explicitementdangerouslyForceUnsafeInstall, tandis que les résultats suspects n’avertissent que.openclaw skills installreste le flux distinct de téléchargement/installation des compétences ClawHub.
Détails : Plugins
Modèle d’accès DM : appairage, liste autorisée, ouvert, désactivé
Section intitulée « Modèle d’accès DM : appairage, liste autorisée, ouvert, désactivé »Tous les channels actuels compatibles DM prennent en charge une stratégie DM (dmPolicy ou *.dm.policy) qui verrouille les DM entrants avant que le message ne soit traité :
pairing(par défaut) : les expéditeurs inconnus reçoivent un code d’appairage court et le bot ignore leur message jusqu’à approbation. Les codes expirent après 1 heure ; les DM répétés ne renverront pas de code tant qu’une nouvelle demande n’est pas créée. Les demandes en attente sont plafonnées à 3 par channel par défaut.allowlist: les expéditeurs inconnus sont bloqués (pas de poignée de main d’appairage).open: autoriser n’importe qui à envoyer un DM (public). Nécessite que la liste blanche des canaux inclue"*"(acceptation explicite).disabled: ignorer entièrement les DM entrants.
Approuver via le CLI :
openclaw pairing list <channel>openclaw pairing approve <channel> <code>Détails + fichiers sur le disque : Appariement
Isolement des sessions DM (mode multi-utilisateur)
Section intitulée « Isolement des sessions DM (mode multi-utilisateur) »Par défaut, OpenClaw achemine tous les DM vers la session principale, ce qui permet à votre assistant d’avoir une continuité sur les appareils et les canaux. Si plusieurs personnes peuvent envoyer un DM au bot (DM ouverts ou une liste blanche multi-personnes), envisagez d’isoler les sessions DM :
{ session: { dmScope: "per-channel-peer" },}Cela empêche les fuites de contexte entre utilisateurs tout en maintenant l’isolement des discussions de groupe.
Il s’agit d’une limite de contexte de messagerie, et non d’une limite d’administration de l’hôte. Si les utilisateurs sont mutuellement hostiles et partagent le même hôte/configuration de Gateway, exécutez plutôt des passerelles distinctes pour chaque limite de confiance.
Mode DM sécurisé (recommandé)
Section intitulée « Mode DM sécurisé (recommandé) »Considérez l’extrait ci-dessus comme le mode DM sécurisé :
- Par défaut :
session.dmScope: "main"(tous les DM partagent une session pour la continuité). - Par défaut pour l’intégration du CLI local : écrit
session.dmScope: "per-channel-peer"s’il n’est pas défini (conserve les valeurs explicites existantes). - Mode DM sécurisé :
session.dmScope: "per-channel-peer"(chaque paire canal+expéditeur obtient un contexte DM isolé). - Isolement des homologues inter-canaux :
session.dmScope: "per-peer"(chaque expéditeur obtient une session sur tous les canaux du même type).
Si vous utilisez plusieurs comptes sur le même canal, utilisez plutôt per-account-channel-peer. Si la même personne vous contacte sur plusieurs canaux, utilisez session.identityLinks pour fusionner ces sessions DM en une identité canonique. Voir Gestion des sessions et Configuration.
Listes blanches pour les DM et les groupes
Section intitulée « Listes blanches pour les DM et les groupes »OpenClaw possède deux couches distinctes de “qui peut me déclencher ?” :
- Liste blanche de DM (
allowFrom/channels.discord.allowFrom/channels.slack.allowFrom; ancien :channels.discord.dm.allowFrom,channels.slack.dm.allowFrom) : qui est autorisé à parler au bot via les messages directs.- Lorsque
dmPolicy="pairing", les approbations sont écrites dans le magasin de liste d’autorisation de couplage délimité au compte sous~/.openclaw/credentials/(<channel>-allowFrom.jsonpour le compte par défaut,<channel>-<accountId>-allowFrom.jsonpour les comptes non par défaut), fusionnées avec les listes d’autorisation de configuration.
- Lorsque
- Liste d’autorisation de groupe (spécifique au channel) : quels groupes/channels/guilds le bot acceptera de recevoir des messages, en tout cas.
- Modèles courants :
channels.whatsapp.groups,channels.telegram.groups,channels.imessage.groups: valeurs par défaut par groupe commerequireMention; lorsqu’il est défini, il agit également comme une liste d’autorisation de groupe (incluez"*"pour conserver le comportement tout-autoriser).groupPolicy="allowlist"+groupAllowFrom: restreindre qui peut déclencher le bot à l’intérieur d’une session de groupe (WhatsApp/Telegram/Signal/iMessage/Microsoft Teams).channels.discord.guilds/channels.slack.channels: listes d’autorisation par surface + valeurs par défaut de mention.
- Les vérifications de groupe s’exécutent dans cet ordre :
groupPolicy/listes d’autorisation de groupe d’abord, activation par mention/réponse ensuite. - Répondre à un message du bot (mention implicite) ne contourne pas les listes d’autorisation d’expéditeur comme
groupAllowFrom. - Note de sécurité : traitez
dmPolicy="open"etgroupPolicy="open"comme des paramètres de dernier recours. Ils devraient être à peine utilisés ; préférez le couplage + les listes d’autorisation à moins que vous ne fassiez pleinement confiance à chaque membre de la salle.
- Modèles courants :
Détails : Configuration et Groupes
Prompt injection (ce que c’est, pourquoi c’est important)
Section intitulée « Prompt injection (ce que c’est, pourquoi c’est important) »Le prompt injection (injection de prompt) se produit lorsqu’un attaquant conçoit un message qui manipule le model pour qu’il fasse quelque chose d’unsafe (« ignorez vos instructions », « videz votre système de fichiers », « suivez ce lien et exécutez des commandes », etc.).
Même avec des prompts système forts, le prompt injection n’est pas résolu. Les garde-fous des prompts système ne sont qu’un guide souple ; l’application stricte provient de la stratégie d’outil, des approbations d’exécution, du sandboxing et des listes d’autorisation de channel (et les opérateurs peuvent les désactiver par conception). Ce qui aide en pratique :
- Gardez les messages entrants verrouillés (appariement/listes d’autorisation).
- Privilégiez le filtrage par mention dans les groupes ; évitez les bots “toujours actifs” dans les salons publics.
- Traitez par défaut les liens, les pièces jointes et les instructions collées comme hostiles.
- Exécutez les outils sensibles dans un bac à sable (sandboxing) ; gardez les secrets hors du système de fichiers accessible par l’agent.
- Remarque : le sandboxing est optionnel. Si le mode sandbox est désactivé,
host=autoimplicite est résolu vers l’hôte de la passerelle.host=sandboxexplicite échoue toujours de manière fermée car aucun runtime de sandbox n’est disponible. Définissezhost=gatewaysi vous souhaitez que ce comportement soit explicite dans la configuration. - Limitez les outils à haut risque (
exec,browser,web_fetch,web_search) aux agents de confiance ou aux listes d’autorisation explicites. - Si vous mettez en liste blanche des interpréteurs (
python,node,ruby,perl,php,lua,osascript), activeztools.exec.strictInlineEvalafin que les formulaires d’évaluation en ligne nécessitent toujours une approbation explicite. - L’analyse d’approbation du shell rejette également les formes d’expansion de paramètres POSIX (
$VAR,$?,$$,$1,$@,${…}) à l’intérieur des heredocs non cités, de sorte qu’un corps de heredoc en liste blanche ne peut pas contourner la revue de la liste blanche par une expansion de shell déguisée en texte brut. Mettez le terminateur du heredoc entre guillemets (par exemple<<'EOF') pour activer la sémantique de corps littéral ; les heredocs non cités qui auraient développé des variables sont rejetés. - Le choix du modèle est important : les modèles plus anciens, plus petits ou hérités sont significativement moins robustes contre l’injection de prompt et l’usage abusif d’outils. Pour les agents activés par outil, utilisez le modèle le plus puissant et le plus récent, robuste aux instructions, disponible.
Signaux d’alerte à traiter comme non fiables :
- “Lis ce fichier/cette URL et fais exactement ce qu’il dit.”
- “Ignore ton prompt système ou tes règles de sécurité.”
- “Révèle tes instructions cachées ou les sorties de tes outils.”
- “Colle le contenu complet de ~/.openclaw ou de tes journaux.”
Nettoyage des jetons spéciaux pour le contenu externe
Section intitulée « Nettoyage des jetons spéciaux pour le contenu externe »OpenClaw supprime les littéraux de jetons spéciaux communs des modèles de chat LLM auto-hébergés du contenu externe et des métadonnées encapsulés avant qu’ils n’atteignent le modèle. Les familles de marqueurs couvertes incluent Qwen/ChatML, Llama, Gemma, Mistral, Phi et les jetons de rôle/tour GPT-OSS.
Pourquoi :
- Les backends compatibles OpenAI qui servent des modèles auto-hébergés préservent parfois les jetons spéciaux qui apparaissent dans le texte de l’utilisateur, au lieu de les masquer. Un attaquant capable d’écrire dans le contenu externe entrant (une page récupérée, un corps d’e-mail, une sortie de tool de contenu de fichier) pourrait sinon injecter une limite de rôle synthétique
assistantousystemet s’échapper des garde-fous du contenu encapsulé. - Le nettoyage s’effectue au niveau de la couche d’encapsulation du contenu externe, il s’applique donc uniformément aux outils de récupération/lecture et au contenu du canal entrant plutôt que d’être spécifique à chaque fournisseur.
- Les réponses du modèle sortantes disposent déjà d’un nettoyeur distinct qui supprime les échappements de
<tool_call>,<function_calls>,<system-reminder>,<previous_response>et de l’échafaudage d’exécution interne similaire des réponses visibles par l’utilisateur à la frontière finale de livraison du canal. Le nettoyeur de contenu externe est le pendant entrant.
Cela ne remplace pas les autres durcissements de cette page - dmPolicy, les listes d’autorisation, les approbations d’exécution, le sandboxing et contextVisibility effectuent toujours le travail principal. Cela ferme une faille de contournement spécifique au niveau du tokeniseur contre les piles auto-hébergées qui transmettent le texte de l’utilisateur avec les jetons spéciaux intacts.
Drapeaux de contournement de contenu externe non sécurisé
Section intitulée « Drapeaux de contournement de contenu externe non sécurisé »OpenClaw inclut des drapeaux de contournement explicites qui désactivent l’encapsulation de sécurité du contenu externe :
hooks.mappings[].allowUnsafeExternalContenthooks.gmail.allowUnsafeExternalContent- Champ de payload Cron
allowUnsafeExternalContent
Recommandations :
- Gardez-les non définis/faux en production.
- Activez-les uniquement temporairement pour un débogage étroitement délimité.
- S’ils sont activés, isolez cet agent (sandbox + outils minimaux + espace de noms de session dédié).
Note sur les risques des Hooks :
- Les payloads des hooks sont du contenu non fiable, même lorsque la livraison provient de systèmes que vous contrôlez (le contenu de mail/docs/web peut transporter une injection de prompt).
- Les niveaux de model faibles augmentent ce risque. Pour l’automatisation basée sur des hooks, préférez les niveaux de model modernes forts et gardez la stratégie d’outil stricte (
tools.profile: "messaging"ou plus stricte), ainsi que du sandboxing lorsque cela est possible.
L’injection de prompt ne nécessite pas de DMs publics
Section intitulée « L’injection de prompt ne nécessite pas de DMs publics »Même si seul vous pouvez envoyer un message au bot, une injection de prompt peut toujours se produire via n’importe quel contenu non fiable que le bot lit (résultats de recherche/récupération web, pages de navigateur, e-mails, documents, pièces jointes, journaux/code collés). En d’autres termes : l’expéditeur n’est pas la seule surface de menace ; le contenu lui-même peut transporter des instructions adverses.
Lorsque les outils sont activés, le risque typique est l’exfiltration du contexte ou le déclenchement d’appels d’outil. Réduisez le rayon d’impact en :
- Utilisant un agent lecteur en lecture seule ou sans outil pour résumer le contenu non fiable, puis en transmettant le résumé à votre agent principal.
- Gardant
web_search/web_fetch/browserdésactivés pour les agents avec outils activés, sauf si nécessaire. - Pour les entrées URL OpenResponses (
input_file/input_image), définissez desgateway.http.endpoints.responses.files.urlAllowlistetgateway.http.endpoints.responses.images.urlAllowliststrictes, et gardezmaxUrlPartsfaible. Les listes d’autorisation vides sont traitées comme non définies ; utilisezfiles.allowUrl: false/images.allowUrl: falsesi vous souhaitez désactiver totalement la récupération d’URL. - Pour les entrées de fichier OpenResponses, le texte décodé
input_fileest toujours injecté comme contenu externe non fiable. Ne vous fiez pas au fait que le texte du fichier est fiable simplement parce que le Gateway l’a décodé localement. Le bloc injecté porte toujours des marqueurs de limite<<<EXTERNAL_UNTRUSTED_CONTENT ...>>>explicites ainsi que des métadonnéesSource: External, bien que ce chemin omette la bannière plus longueSECURITY NOTICE:. - Le même enveloppement basé sur des marqueurs est appliqué lorsque la compréhension média extrait du texte des documents joints avant d’ajouter ce texte au prompt média.
- Activation du sandboxing et des listes d’autorisation d’outils strictes pour tout agent qui touche à une entrée non fiable.
- Garder les secrets hors des invites ; transmettez-les plutôt via env/config sur l’hôte de la passerelle.
Backends LLM auto-hébergés
Section intitulée « Backends LLM auto-hébergés »Les backends auto-hébergés compatibles OpenAI tels que vLLM, SGLang, TGI, LM Studio,
ou des piles de tokenizers Hugging Face personnalisés peuvent différer des fournisseurs hébergés dans la gestion
des jetons spéciaux des modèles de chat. Si un backend tokenize des chaînes littérales
telles que <|im_start|>, <|start_header_id|>, ou <start_of_turn> comme
jetons structurels de modèle de chat dans le contenu utilisateur, du texte non fiable peut tenter de
forger les limites de rôle au niveau du tokenizer.
OpenClaw supprime les littéraux de jetons spéciaux courants de famille de modèles du contenu externe encapsulé avant de l’envoyer au modèle. Gardez l’encapsulation du contenu externe activée et privilégiez les paramètres de backend qui séparent ou échappent les jetons spéciaux dans le contenu fourni par l’utilisateur lorsque cela est disponible. Les fournisseurs hébergés tels que OpenAI et Anthropic appliquent déjà leur propre assainissement côté requête.
Force du modèle (note de sécurité)
Section intitulée « Force du modèle (note de sécurité) »La résistance à l’injection d’invites n’est pas uniforme selon les niveaux de modèles. Les modèles plus petits/ moins chers sont généralement plus sensibles aux abus d’outils et au détournement d’instructions, surtout sous des invites adverses.
Recommandations :
- Utilisez le modèle de la dernière génération, du meilleur niveau pour tout bot pouvant exécuter des outils ou accéder aux fichiers/réseaux.
- N’utilisez pas de niveaux plus anciens/faibles/plus petits pour les agents avec outils activés ou les boîtes de réception non fiables ; le risque d’injection d’invite est trop élevé.
- Si vous devez utiliser un plus petit modèle, réduisez le rayon d’impact (outils en lecture seule, sandboxing fort, accès minimal au système de fichiers, listes d’autorisation strictes).
- Lorsque vous exécutez de petits modèles, activez le sandboxing pour toutes les sessions et désactivez web_search/web_fetch/browser sauf si les entrées sont strictement contrôlées.
- Pour les assistants personnels uniquement chat avec des entrées fiables et sans outils, les petits modèles conviennent généralement.
Raisonnement et sortie verbeuse dans les groupes
Section intitulée « Raisonnement et sortie verbeuse dans les groupes »/reasoning, /verbose et /trace peuvent exposer un raisonnement interne, la sortie d’un outil ou des diagnostics de plugin qui n’étaient pas destinés à un canal public. Dans les contextes de groupe, considérez-les comme uniquement pour le débogage et gardez-les désactivés, sauf si vous en avez explicitement besoin.
Recommandations :
- Gardez
/reasoning,/verboseet/tracedésactivés dans les salles publiques. - Si vous les activez, faites-le uniquement dans des DM de confiance ou des salles étroitement contrôlées.
- Rappelez-vous : la sortie verbeuse et le traçage peuvent inclure des arguments d’outil, des URL, des diagnostics de plugin et les données vues par le modèle.
Exemples de durcissement de la configuration
Section intitulée « Exemples de durcissement de la configuration »Autorisations de fichiers
Section intitulée « Autorisations de fichiers »Gardez la configuration + l’état privés sur l’hôte de la Gateway :
~/.openclaw/openclaw.json:600(lecture/écriture utilisateur uniquement)~/.openclaw:700(utilisateur uniquement)
openclaw doctor peut avertir et proposer de resserrer ces autorisations.
Exposition réseau (bind, port, pare-feu)
Section intitulée « Exposition réseau (bind, port, pare-feu) »La Gateway multiplexe WebSocket + HTTP sur un seul port :
- Par défaut :
18789 - Config/flags/env :
gateway.port,--port,OPENCLAW_GATEWAY_PORT
Cette surface HTTP comprend l’interface de contrôle (Control UI) et l’hôte du canvas :
- Interface de contrôle (SPA assets) (chemin de base par défaut
/) - Hôte du Canvas :
/__openclaw__/canvas/et/__openclaw__/a2ui/(HTML/JS arbitraire ; traiter comme un contenu non fiable)
Si vous chargez du contenu canvas dans un navigateur normal, traitez-le comme n’importe quelle autre page web non fiable :
- N’exposez pas l’hôte du canvas à des réseaux ou utilisateurs non fiables.
- Ne faites pas partager la même origine au contenu canvas et aux surfaces web privilégiées, à moins de comprendre parfaitement les implications.
Le mode de liaison contrôle où la Gateway écoute :
gateway.bind: "loopback"(par défaut) : seuls les clients locaux peuvent se connecter.- Les liaisons non-boucle (
"lan","tailnet","custom") élargissent la surface d’attaque. Utilisez-les uniquement avec une authentification de passerelle (jeton/mot de passe partagé ou un proxy de confiance correctement configuré) et un vrai pare-feu.
Règles de base :
- Préférez Tailscale Serve aux liaisons LAN (Serve garde le Gateway en boucle locale, et Tailscale gère l’accès).
- Si vous devez lier au LAN, pare-feuisez le port avec une liste d’autorisation stricte des IP sources ; ne le redirigez pas largement.
- N’exposez jamais le Gateway sans authentification sur
0.0.0.0.
Publication de port Docker avec UFW
Section intitulée « Publication de port Docker avec UFW »Si vous exécutez OpenClaw avec Docker sur un VPS, rappelez-vous que les ports de conteneur publiés
(-p HOST:CONTAINER ou Compose ports:) sont routés via les chaînes de transfert
de Docker, et pas seulement les règles INPUT de l’hôte.
Pour garder le trafic Docker aligné avec votre politique de pare-feu, appliquez des règles dans
DOCKER-USER (cette chaîne est évaluée avant les règles d’acceptation propres à Docker).
Sur beaucoup de distributions modernes, iptables/ip6tables utilisent le frontal
iptables-nft et appliquent toujours ces règles au backend nftables.
Exemple minimal de liste d’autorisation (IPv4) :
# /etc/ufw/after.rules (append as its own *filter section)*filter:DOCKER-USER - [0:0]-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN-A DOCKER-USER -s 127.0.0.0/8 -j RETURN-A DOCKER-USER -s 10.0.0.0/8 -j RETURN-A DOCKER-USER -s 172.16.0.0/12 -j RETURN-A DOCKER-USER -s 192.168.0.0/16 -j RETURN-A DOCKER-USER -s 100.64.0.0/10 -j RETURN-A DOCKER-USER -p tcp --dport 80 -j RETURN-A DOCKER-USER -p tcp --dport 443 -j RETURN-A DOCKER-USER -m conntrack --ctstate NEW -j DROP-A DOCKER-USER -j RETURNCOMMITIPv6 a des tables séparées. Ajoutez une politique correspondante dans /etc/ufw/after6.rules si
l’IPv6 Docker est activé.
Évitez de coder en dur les noms d’interface comme eth0 dans les extraits de documentation. Les noms d’interface
varient selon les images VPS (ens3, enp*, etc.) et les inadéquations pourraient accidentellement
sauter votre règle de refus.
Validation rapide après rechargement :
ufw reloadiptables -S DOCKER-USERip6tables -S DOCKER-USERnmap -sT -p 1-65535 <public-ip> --openLes ports externes attendus ne doivent être que ceux que vous exposez intentionnellement (pour la plupart des configurations : SSH + vos ports de proxy inverse).
Découverte mDNS/Bonjour
Section intitulée « Découverte mDNS/Bonjour »Lorsque le plugin intégré bonjour est activé, le Gateway diffuse sa présence via mDNS (_openclaw-gw._tcp sur le port 5353) pour la découverte des appareils locaux. En mode complet, cela inclut des enregistrements TXT qui peuvent exposer des détails opérationnels :
cliPath: chemin complet du système de fichiers vers le binaire CLI (révèle le nom d’utilisateur et l’emplacement d’installation)sshPort: annonce la disponibilité SSH sur l’hôtedisplayName,lanHost: informations sur le nom d’hôte
Considération de sécurité opérationnelle : La diffusion de détails d’infrastructure facilite la reconnaissance pour quiconque sur le réseau local. Même des informations « inoffensives » comme les chemins du système de fichiers et la disponibilité SSH aident les attaquants à cartographier votre environnement.
Recommandations :
-
Gardez Bonjour désactivé sauf si la découverte sur le réseau local est nécessaire. Bonjour se lance automatiquement sur les hôtes macOS et est optionnel ailleurs ; les URL directes du Gateway, Tailnet, SSH ou DNS-SD à grande échelle évitent le multidiffusion locale.
-
Mode minimal (par défaut lorsque Bonjour est activé, recommandé pour les passerelles exposées) : omettre les champs sensibles des diffusions mDNS :
{discovery: {mdns: { mode: "minimal" },},} -
Désactiver le mode mDNS si vous souhaitez garder le plugin activé mais supprimer la découverte des appareils locaux :
{discovery: {mdns: { mode: "off" },},} -
Mode complet (optionnel) : inclure
cliPath+sshPortdans les enregistrements TXT :{discovery: {mdns: { mode: "full" },},} -
Variable d’environnement (alternative) : définir
OPENCLAW_DISABLE_BONJOUR=1pour désactiver mDNS sans modifier la configuration.
Lorsque Bonjour est activé en mode minimal, le Gateway diffuse suffisamment d’informations pour la découverte des appareils (role, gatewayPort, transport) mais omet cliPath et sshPort. Les applications qui ont besoin des informations sur le chemin CLI peuvent les récupérer via la connexion WebSocket authentifiée à la place.
Verrouillez le WebSocket du Gateway (authentification locale)
Section intitulée « Verrouillez le WebSocket du Gateway (authentification locale) »L’authentification Gateway est requise par défaut. Si aucun chemin d’authentification Gateway valide n’est configuré, le Gateway refuse les connexions WebSocket (échec fermé).
L’intégration génère un jeton par défaut (même pour la boucle locale) donc les clients locaux doivent s’authentifier.
Définissez un jeton pour que tous les clients WS doivent s’authentifier :
{ gateway: { auth: { mode: "token", token: "your-token" }, },}Doctor peut en générer un pour vous : openclaw doctor --generate-gateway-token.
Optionnel : épinglez le TLS distant avec gateway.remote.tlsFingerprint lors de l’utilisation de wss://. Le texte brut ws:// est accepté pour la boucle locale, les littéraux d’IP privée, .local, et les URL de passerelle Tailnet *.ts.net. Pour d’autres noms DNS privés de confiance, définissez OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 sur le processus client en tant que bris de glace. Cela est
intentionnellement limité à l’environnement du processus, et non une clé de configuration openclaw.json. Le jumelage mobile et les itinéraires de passerelle manuels ou scannés Android sont plus stricts : le texte en clair est accepté pour la boucle locale, mais le réseau privé local, le lien local, .local, et les noms d’hôte sans point doivent utiliser TLS, sauf si vous optez explicitement
pour le chemin de texte en clair du réseau privé de confiance.
Jumelage d’appareil local :
- Le jumelage d’appareil est approuvé automatiquement pour les connexions en boucle locale directes afin de garder les clients sur le même hôte fluides.
- OpenClaw possède également un chemin étroit de connexion locale backend/conteneur pour les flux d’aide à secret partagé de confiance.
- Les connexions Tailnet et LAN, y compris les liaisons Tailnet sur le même hôte, sont traitées comme distantes pour le jumelage et nécessitent toujours une approbation.
- Les preuves d’en-têtes transférées (Forwarded-header) sur une requête de boucle locale (loopback) invalident la localité de boucle locale. L’approbation automatique de la mise à niveau des métadonnées est étroitement limitée. Voir Appairage du Gateway pour les deux règles.
Modes d’authentification :
gateway.auth.mode: "token": jeton de support partagé (recommandé pour la plupart des configurations).gateway.auth.mode: "password": authentification par mot de passe (préférez le paramétrage via env :OPENCLAW_GATEWAY_PASSWORD).gateway.auth.mode: "trusted-proxy": faire confiance à un proxy inverse conscient de l’identité pour authentifier les utilisateurs et transmettre l’identité via les en-têtes (voir Authentification de proxy de confiance).
Liste de vérification de la rotation (jeton/mot de passe) :
- Générer/définir un nouveau secret (
gateway.auth.tokenouOPENCLAW_GATEWAY_PASSWORD). - Redémarrez le Gateway (ou redémarrez l’application macOS si elle supervise le Gateway).
- Mettez à jour tous les clients distants (
gateway.remote.token/.passwordsur les machines qui appellent le Gateway). - Vérifiez que vous ne pouvez plus vous connecter avec les anciennes identifiants.
En-têtes d’identité Tailscale Serve
Section intitulée « En-têtes d’identité Tailscale Serve »Lorsque gateway.auth.allowTailscale est trueOpenClawTailscale (par défaut pour Serve), OpenClaw
accepte les en-têtes d’identité Tailscale Serve (tailscale-user-loginOpenClaw) pour l’authentification
Control UI/WebSocket. OpenClaw vérifie l’identité en résolvant l’adresse
x-forwarded-forTailscale via le démon Tailscale local (tailscale whois)
et en la faisant correspondre à l’en-tête. Cela ne se déclenche que pour les requêtes qui atteignent le bouclage local
et incluent x-forwarded-for, x-forwarded-proto et x-forwarded-hostTailscale tels
qu’injectés par Tailscale.
Pour ce chemin de vérification d’identité asynchrone, les tentatives échouées pour le même {scope, ip}API
sont sérialisées avant que le limiteur n’enregistre l’échec. Les nouvelles tentatives simultanées erronées
d’un client Serve peuvent donc verrouiller immédiatement la deuxième tentative
au lieu de s’exécuter en parallèle comme deux simples discordances.
Les points de terminaison de l’HTTP API (par exemple /v1/*, /tools/invoke et /api/channels/*Tailscale)
n’utilisent pas l’authentification par en-tête d’identité Tailscale. Ils suivent toujours le mode d’authentification
HTTP configuré de la passerelle.
Note importante sur la limite de sécurité :
- L’authentification HTTP par porteur de la passerelle constitue effectivement un accès opérateur tout ou rien.
- Traitez les identifiants pouvant appeler
/v1/chat/completions,/v1/responses, les routes de plugins telles que/api/v1/admin/rpc, ou/api/channels/*comme des secrets d’opérateur à accès complet pour cette passerelle. - Sur la surface HTTP compatible OpenAI, l’authentification par porteur à secret partagé restaure les étendues d’opérateur par défaut complètes (OpenAI
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write) et la sémantique de propriétaire pour les tours de l’agent ; des valeursx-openclaw-scopesplus étroites ne réduisent pas ce chemin à secret partagé. - La sémantique de portée par requête sur HTTP ne s’applique que lorsque la requête provient d’un mode porteur d’identité tel que l’authentification par proxy de confiance, ou d’une entrée privée explicitement sans authentification.
- Dans ces modes porteurs d’identité, l’omission de
x-openclaw-scopesrevient à l’ensemble de portées par défaut de l’opérateur normal ; envoyez l’en-tête explicitement lorsque vous souhaitez un ensemble de portées plus restreint. /tools/invokeet les points de terminaison de l’historique des sessions HTTP suivent la même règle de secret partagé : l’authentification par porteur de jeton/mot de passe y est également traitée comme un accès opérateur complet, tandis que les modes porteurs d’identité honorent toujours les portées déclarées.- Ne partagez pas ces informations d’identification avec des appelants non fiables ; préférez des passerelles distinctes par limite de confiance.
Hypothèse de confiance : l’authentification Serve sans jeton suppose que l’hôte de la passerelle est fiable.
Ne considérez pas cela comme une protection contre les processus hostiles sur le même hôte. Si du code local non fiable peut s’exécuter sur l’hôte de la passerelle, désactivez gateway.auth.allowTailscale
et exigez une authentification par secret partagé explicite avec gateway.auth.mode: "token" ou
"password".
Règle de sécurité : ne transmettez pas ces en-têtes depuis votre propre proxy inverse. Si
vous terminez le TLS ou proxyez devant la passerelle, désactivez
gateway.auth.allowTailscale et utilisez l’authentification par secret partagé (gateway.auth.mode: "token" or "password") ou l’Authentification par proxy de confiance
à la place.
Proxys de confiance :
- Si vous terminez le TLS devant le Gateway, définissez
gateway.trustedProxiessur vos IP de proxy. - OpenClaw fera confiance à
x-forwarded-for(oux-real-ip) provenant de ces IP pour déterminer l’IP client pour les vérifications d’appariement local et les vérifications d’authentification HTTP/locale. - Assurez-vous que votre proxy écrase
x-forwarded-foret bloque l’accès direct au port du Gateway.
Voir Tailscale et Vue d’ensemble Web.
Contrôle du navigateur via l’hôte du nœud (recommandé)
Section intitulée « Contrôle du navigateur via l’hôte du nœud (recommandé) »Si votre Gateway est distant mais que le navigateur s’exécute sur une autre machine, exécutez un node host sur la machine du navigateur et laissez le Gateway proxyer les actions du navigateur (voir Browser tool). Traitez l’appariement de nœuds comme un accès administrateur.
Modèle recommandé :
- Gardez le Gateway et le node host sur le même tailnet (Tailscale).
- Appariez le nœud intentionnellement ; désactivez le routage du proxy navigateur si vous n’en avez pas besoin.
À éviter :
- Exposer les ports de relais/contrôle sur le réseau local ou l’Internet public.
- Tailscale Funnel pour les points de terminaison de contrôle du navigateur (exposition publique).
Secrets sur le disque
Section intitulée « Secrets sur le disque »Supposez que tout ce qui se trouve sous ~/.openclaw/ (ou $OPENCLAW_STATE_DIR/) peut contenir des secrets ou des données privées :
openclaw.json: la configuration peut inclure des jetons (gateway, remote gateway), les paramètres du fournisseur et les listes d’autorisation.credentials/**: identifiants du canal (exemple : identifiants WhatsAppOAuth), listes d’autorisation d’appariement, importations OAuth héritées.agents/<agentId>/agent/auth-profiles.json: clés API, profils de jetons, jetons OAuth, et optionnelkeyRef/tokenRef.agents/<agentId>/agent/codex-home/**: compte de serveur d’application Codex par agent, configuration, compétences, plugins, état de thread natif et diagnostics.secrets.json(optionnel) : charge utile de secret stockée dans un fichier, utilisée par les fournisseurs SecretReffile(secrets.providers).agents/<agentId>/agent/auth.json: fichier de compatibilité hérité. Les entrées statiquesapi_keysont nettoyées lorsqu’elles sont découvertes.agents/<agentId>/sessions/**: transcriptions de session (*.jsonl) + métadonnées de routage (sessions.json) qui peuvent contenir des messages privés et la sortie des outils.- packages de plugins regroupés : plugins installés (plus leurs
node_modules/). sandboxes/**: espaces de travail bac à sable des outils ; peuvent accumuler des copies des fichiers que vous lisez/écrivez à l’intérieur du bac à sable.
Conseils de durcissement :
- Gardez les permissions strictes (
700sur les répertoires,600sur les fichiers). - Utilisez le chiffrement complet du disque sur l’hôte de la passerelle.
- Privilégiez un compte utilisateur dédié au niveau de l’OS pour le Gateway si l’hôte est partagé.
Fichiers .env de l’espace de travail
Section intitulée « Fichiers .env de l’espace de travail »OpenClaw charge les fichiers .env locaux de l’espace de travail pour les agents et les outils, mais ne permet jamais à ces fichiers de remplacer silencieusement les contrôles d’exécution de la passerelle.
- Les variables d’environnement d’identification du fournisseur sont bloquées dans les fichiers
.envd’espaces de travail non fiables. Les exemples incluentGEMINI_API_KEY,GOOGLE_API_KEY,XAI_API_KEY,MISTRAL_API_KEY,GROQ_API_KEY,DEEPSEEK_API_KEY,PERPLEXITY_API_KEY,BRAVE_API_KEY,TAVILY_API_KEY,EXA_API_KEY,FIRECRAWL_API_KEY, et les clés d’authentification du fournisseur déclarées par les plugins fiables installés. Placez les identifiants du fournisseur dans l’environnement de processus du Gateway,~/.openclaw/.env($OPENCLAW_STATE_DIR/.env), le bloc configenv, ou un import de shell de connexion optionnel. - Toute clé commençant par
OPENCLAW_*est bloquée dans les fichiers.envd’espaces de travail non fiables. - Les paramètres de point de terminaison de canal pour Matrix, Mattermost, IRC et Synology Chat sont également bloqués par les remplacements de fichiers
.envde l’espace de travail, de sorte que les espaces de travail clonés ne peuvent pas rediriger le trafic du connecteur groupé via une configuration de point de terminaison local. Les clés d’environnement de point de terminaison (telles queMATRIX_HOMESERVER,MATTERMOST_URL,IRC_HOST,SYNOLOGY_CHAT_INCOMING_URL) doivent provenir de l’environnement de processus de la passerelle ou deenv.shellEnv, et non d’un fichier.envchargé par l’espace de travail. - Le bloc est en échec fermé (fail-closed) : une nouvelle variable de contrôle d’exécution ajoutée dans une version future ne peut pas être héritée d’un
.envvalidé ou fourni par un attaquant ; la clé est ignorée et le gateway conserve sa propre valeur. - Les variables d’environnement de processus/OS de confiance, le dotenv global d’exécution, la config
envet l’import activé du shell de connexion s’appliquent toujours — cela contraint uniquement le chargement des fichiers.envde l’espace de travail.
Pourquoi : les fichiers .env de l’espace de travail se trouvent souvent à côté du code de l’agent, sont validés par inadvertance ou sont écrits par des outils. Le blocage des identifiants de provider empêche un espace de travail cloné de substituer des comptes provider contrôlés par un attaquant. Le blocage de tout le préfixe OPENCLAW_* signifie que l’ajout d’un nouveau drapeau OPENCLAW_* plus tard ne pourra jamais régresser vers un héritage silencieux de l’état de l’espace de travail.
Journaux et transcriptions (rédaaction et rétention)
Section intitulée « Journaux et transcriptions (rédaaction et rétention) »Les journaux et les transcriptions peuvent divulguer des informations sensibles même lorsque les contrôles d’accès sont corrects :
- Les journaux du Gateway peuvent inclure des résumés d’outils, des erreurs et des URL.
- Les transcriptions de session peuvent inclure des secrets collés, le contenu des fichiers, la sortie des commandes et des liens.
Recommandations :
- Gardez la rédaction des journaux et des transcriptions activée (
logging.redactSensitive: "tools"; par défaut). - Ajoutez des modèles personnalisés pour votre environnement via
logging.redactPatterns(jetons, noms d’hôte, URL internes). - Lors du partage de diagnostics, préférez
openclaw status --all(collable, secrets rédigés) aux journaux bruts. - Supprimez les anciennes transcriptions de session et les fichiers journaux si vous n’avez pas besoin d’une rétention à long terme.
Détails : Journalisation
DMs : appariement par défaut
Section intitulée « DMs : appariement par défaut »{ channels: { whatsapp: { dmPolicy: "pairing" } },}Groupes : exiger une mention partout
Section intitulée « Groupes : exiger une mention partout »{ "channels": { "whatsapp": { "groups": { "*": { "requireMention": true } } } }, "agents": { "list": [ { "id": "main", "groupChat": { "mentionPatterns": ["@openclaw", "@mybot"] } } ] }}Dans les chats de groupe, ne répondre que lorsque mentionné explicitement.
Numéros séparés (WhatsApp, Signal, Telegram)
Section intitulée « Numéros séparés (WhatsApp, Signal, Telegram) »Pour les canaux basés sur le numéro de téléphone, envisagez de faire fonctionner votre IA sur un numéro de téléphone distinct de votre numéro personnel :
- Numéro personnel : Vos conversations restent privées
- Numéro de bot : L’IA gère ceux-ci, avec des limites appropriées
Mode lecture seule (via sandbox et outils)
Section intitulée « Mode lecture seule (via sandbox et outils) »Vous pouvez créer un profil en lecture seule en combinant :
agents.defaults.sandbox.workspaceAccess: "ro"(ou"none"pour aucun accès à l’espace de travail)- listes d’autorisation/de refus d’outils qui bloquent
write,edit,apply_patch,exec,process, etc.
Options de durcissement supplémentaires :
tools.exec.applyPatch.workspaceOnly: true(par défaut) : garantit queapply_patchne peut pas écrire/supprimer en dehors du répertoire de l’espace de travail, même lorsque le sandboxing est désactivé. Définissez surfalseuniquement si vous souhaitez intentionnellement queapply_patchaccède aux fichiers en dehors de l’espace de travail.tools.fs.workspaceOnly: true(optionnel) : restreint les cheminsread/write/edit/apply_patchet les chemins de chargement automatique d’images de prompt natifs au répertoire de l’espace de travail (utile si vous autorisez aujourd’hui les chemins absolus et souhaitez une seule barrière de sécurité).- Gardez les racines du système de fichiers étroites : évitez les racines larges comme votre répertoire personnel pour les espaces de travail des agents/espaces de travail de sandbox. Les racines larges peuvent exposer des fichiers locaux sensibles (par exemple état/config sous
~/.openclaw) aux outils de système de fichiers.
Ligne de base sécurisée (copier/coller)
Section intitulée « Ligne de base sécurisée (copier/coller) »Une configuration « valeur par défaut sûre » qui garde le Gateway privé, nécessite un appairage DM et évite les bots de groupe toujours actifs :
{ gateway: { mode: "local", bind: "loopback", port: 18789, auth: { mode: "token", token: "your-long-random-token" }, }, channels: { whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } }, }, },}Si vous souhaitez également une exécution d’outil « plus sûre par défaut », ajoutez un sandbox + refusez les outils dangereux pour tout agent non propriétaire (exemple ci-dessous sous « Profils d’accès par agent »).
Ligne de base intégrée pour les tours d’agent pilotés par chat : les expéditeurs non propriétaires ne peuvent pas utiliser les outils cron ou gateway.
Sandboxing (recommandé)
Section intitulée « Sandboxing (recommandé) »Documentation dédiée : Sandboxing
Deux approches complémentaires :
- Exécuter l’intégralité du Gateway dans Docker (limite du conteneur) : Docker
- Sandbox d’outils (
agents.defaults.sandbox, hôte du gateway + outils isolés par sandbox ; Docker est le backend par défaut) : Sandboxing
Considérez également l’accès à l’espace de travail de l’agent à l’intérieur du bac à sable :
agents.defaults.sandbox.workspaceAccess: "none"(par défaut) garde l’espace de travail de l’agent interdit ; les outils s’exécutent sur un espace de travail bac à sable sous~/.openclaw/sandboxesagents.defaults.sandbox.workspaceAccess: "ro"monte l’espace de travail de l’agent en lecture seule sur/agent(désactivewrite/edit/apply_patch)agents.defaults.sandbox.workspaceAccess: "rw"monte l’espace de travail de l’agent en lecture/écriture sur/workspace- Les
sandbox.docker.bindssupplémentaires sont validés par rapport aux chemins source normalisés et canonisés. Les astuces de lien symbolique parent et les alias canoniques du répertoire personnel échouent toujours de manière fermée s’ils résolvent vers des racines bloquées telles que/etc,/var/run, ou des répertoires d’identification sous le répertoire personnel de l’OS.
Garde-fou de délégation de sous-agent
Section intitulée « Garde-fou de délégation de sous-agent »Si vous autorisez les outils de session, traitez les exécutions de sous-agents délégués comme une autre décision de limite :
- Refusez
sessions_spawnsauf si l’agent a vraiment besoin de délégation. - Maintenez
agents.defaults.subagents.allowAgentset toutes les substitutionsagents.list[].subagents.allowAgentspar agent restreintes aux agents cibles connus sûrs. - Pour tout workflow qui doit rester isolé, appelez
sessions_spawnavecsandbox: "require"(la valeur par défaut estinherit). sandbox: "require"échoue rapidement lorsque le runtime enfant cible n’est pas sandboxé.
Risques liés au contrôle du navigateur
Section intitulée « Risques liés au contrôle du navigateur »Activer le contrôle du navigateur donne au modèle la capacité de piloter un vrai navigateur. Si ce profil de navigateur contient déjà des sessions connectées, le modèle peut accéder à ces comptes et données. Traitez les profils de navigateur comme un état sensible :
- Privilégiez un profil dédié pour l’agent (le profil
openclawpar défaut). - Évitez de diriger l’agent vers votre profil personnel quotidien.
- Gardez le contrôle du navigateur de l’hôte désactivé pour les agents sandboxés, sauf si vous leur faites confiance.
- L’API de contrôle du navigateur en boucle autonome ne prend en compte que l’authentification par secret partagé (authentification bearer par jeton de passerelle ou mot de passe de la passerelle). Il ne consomme pas les en-têtes d’identité de proxy de confiance ou de Tailscale Serve.
- Traitez les téléchargements du navigateur comme une entrée non fiable ; privilégiez un répertoire de téléchargement isolé.
- Désactivez la synchronisation du navigateur / les gestionnaires de mots de passe dans le profil de l’agent si possible (réduit le rayon d’impact).
- Pour les passerelles distantes, supposez que le “contrôle du navigateur” équivaut à un “accès opérateur” à tout ce que ce profil peut atteindre.
- Gardez la Gateway et les hôtes de nœuds en mode tailnet uniquement ; évitez d’exposer les ports de contrôle du navigateur au réseau local ou à l’Internet public.
- Désactivez le routage proxy du navigateur lorsque vous n’en avez pas besoin (
gateway.nodes.browser.mode="off"). - Le mode de session existante de Chrome MCP n’est pas “plus sûr” ; il peut agir en votre nom dans tout ce que le profil Chrome de cet hôte peut atteindre.
Stratégie SSRF du navigateur (stricte par défaut)
Section intitulée « Stratégie SSRF du navigateur (stricte par défaut) »La stratégie de navigation du navigateur d’OpenClaw est stricte par défaut : les destinations privées/interne restent bloquées à moins que vous ne l’activiez explicitement.
- Par défaut :
browser.ssrfPolicy.dangerouslyAllowPrivateNetworkn’est pas défini, donc la navigation du navigateur garde les destinations privées/interne/à usage spécial bloquées. - Alias hérité :
browser.ssrfPolicy.allowPrivateNetworkest toujours accepté pour compatibilité. - Mode opt-in : définissez
browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: truepour autoriser les destinations privées/interne/à usage spécial. - En mode strict, utilisez
hostnameAllowlist(modèles comme*.example.com) etallowedHostnames(exceptions d’hôte exactes, y compris les noms bloqués commelocalhost) pour les exceptions explicites. - La navigation est vérifiée avant la requête et vérifiée au mieux sur l’URL finale
http(s)après la navigation pour réduire les pivots basés sur des redirections.
Exemple de stratégie stricte :
{ browser: { ssrfPolicy: { dangerouslyAllowPrivateNetwork: false, hostnameAllowlist: ["*.example.com", "example.com"], allowedHostnames: ["localhost"], }, },}Profils d’accès par agent (multi-agent)
Section intitulée « Profils d’accès par agent (multi-agent) »Avec le routage multi-agent, chaque agent peut avoir sa propre stratégie de sandbox + d’outils : utilisez ceci pour donner un accès complet, un accès en lecture seule, ou aucun accès par agent. Voir Multi-Agent Sandbox & Tools pour tous les détails et les règles de priorité.
Cas d’usage courants :
- Agent personnel : accès complet, pas de sandbox
- Agent famille/travail : sandboxé + outils en lecture seule
- Agent public : sandboxé + aucun outil de système de fichiers/shell
Exemple : accès complet (pas de sandbox)
Section intitulée « Exemple : accès complet (pas de sandbox) »{ agents: { list: [ { id: "personal", workspace: "~/.openclaw/workspace-personal", sandbox: { mode: "off" }, }, ], },}Exemple : outils en lecture seule + espace de travail en lecture seule
Section intitulée « Exemple : outils en lecture seule + espace de travail en lecture seule »{ agents: { list: [ { id: "family", workspace: "~/.openclaw/workspace-family", sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro", }, tools: { allow: ["read"], deny: ["write", "edit", "apply_patch", "exec", "process", "browser"], }, }, ], },}Exemple : aucun accès au système de fichiers/shell (messagerie du provider autorisée)
Section intitulée « Exemple : aucun accès au système de fichiers/shell (messagerie du provider autorisée) »{ agents: { list: [ { id: "public", workspace: "~/.openclaw/workspace-public", sandbox: { mode: "all", scope: "agent", workspaceAccess: "none", }, // Session tools can reveal sensitive data from transcripts. By default OpenClaw limits these tools // to the current session + spawned subagent sessions, but you can clamp further if needed. // See `tools.sessions.visibility` in the configuration reference. tools: { sessions: { visibility: "tree" }, // self | tree | agent | all allow: ["sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", "whatsapp", "telegram", "slack", "discord"], deny: ["read", "write", "edit", "apply_patch", "exec", "process", "browser", "canvas", "nodes", "cron", "gateway", "image"], }, }, ], },}Réponse aux incidents
Section intitulée « Réponse aux incidents »Si votre IA fait quelque chose de mal :
Confiner
Section intitulée « Confiner »- Arrêtez-la : arrêtez l’application macOS (si elle supervise le Gateway) ou terminez votre processus
openclaw gateway. - Fermez l’exposition : définissez
gateway.bind: "loopback"(ou désactivez Tailscale Funnel/Serve) jusqu’à ce que vous compreniez ce qui s’est passé. - Bloquez l’accès : passez les DMs/groupes risqués en
dmPolicy: "disabled"/ exigez des mentions, et supprimez les entrées allow-all de"*"si vous en aviez.
Faire une rotation (supposer une compromission si des secrets ont fui)
Section intitulée « Faire une rotation (supposer une compromission si des secrets ont fui) »- Faire une rotation de l’auth du Gateway (
gateway.auth.token/OPENCLAW_GATEWAY_PASSWORD) et redémarrer. - Faire une rotation des secrets des clients distants (
gateway.remote.token/.password) sur toute machine pouvant appeler le Gateway. - Faire une rotation des identifiants provider/API (identifiants WhatsApp, jetons Slack/Discord, clés model/API dans
auth-profiles.json, et valeurs de charge utile de secrets chiffrés lorsque utilisés).
- Vérifiez les journaux du Gateway :
/tmp/openclaw/openclaw-YYYY-MM-DD.log(oulogging.file). - Revoyez la/les transcription(s) pertinente(s) :
~/.openclaw/agents/<agentId>/sessions/*.jsonl. - Examinez les récentes modifications de configuration (tout ce qui aurait pu élargir l’accès :
gateway.bind,gateway.auth, stratégies de dm/groupe,tools.elevated, modifications de plugins). - Réexécutez
openclaw security audit --deepet confirmez que les résultats critiques sont résolus.
Collecter pour un rapport
Section intitulée « Collecter pour un rapport »- Horodatage, système d’exploitation de l’hôte de la passerelle + version OpenClaw
- La(les) transcription(s) de session + un court extrait de journal (après rédaction)
- Ce que l’attaquant a envoyé + ce que l’agent a fait
- Si la Gateway était exposée au-delà du bouclage local (LAN/Tunnel Tailscale /Serve)
Analyse des secrets
Section intitulée « Analyse des secrets »L’IC exécute le hook de pré-commit detect-private-key sur le dépôt. S’il échoue, supprimez ou faites pivoter le matériel de clé validé, puis reproduisez localement :
pre-commit run --all-files detect-private-keySignalement des problèmes de sécurité
Section intitulée « Signalement des problèmes de sécurité »Vous avez trouvé une vulnérabilité dans OpenClaw ? Veuillez la signaler de manière responsable :
- E-mail : [email protected]
- Ne publiez pas publiquement avant la correction
- Nous vous créditerons (sauf si vous préférez l’anonymat)