Gateway
Contrôles d’audit de sécurité
openclaw security audit émet des constats structurés identifiés par checkId. Cette
page constitue le catalogue de référence de ces identifiants. Pour consulter le modèle de menace
général et les recommandations de sécurisation, voir Sécurité.
Certaines vérifications s’exécutent uniquement avec openclaw security audit --deep : analyses
du code des Plugins/Skills (plugins.code_safety*, skills.code_safety*) et vérifications par
sonde du Gateway actif (gateway.probe_*). Toutes les autres vérifications de ce tableau
s’exécutent avec une simple commande openclaw security audit.
Une gravité telle que warn/critical signifie qu’un même checkId peut être émis à
l’un ou l’autre niveau selon la configuration (par exemple, selon que le Gateway est exposé
à distance). Valeurs à fort signal que vous rencontrerez le plus probablement dans des
déploiements réels (liste non exhaustive) :
checkId |
Gravité | Pourquoi c’est important | Clé/chemin principal de correction | Correction automatique |
|---|---|---|---|---|
fs.state_dir.perms_world_writable |
critique | D’autres utilisateurs/processus peuvent modifier l’intégralité de l’état d’OpenClaw | permissions du système de fichiers sur ~/.openclaw |
oui |
fs.state_dir.perms_group_writable |
avertissement | Les utilisateurs du groupe peuvent modifier l’intégralité de l’état d’OpenClaw | permissions du système de fichiers sur ~/.openclaw |
oui |
fs.state_dir.perms_readable |
avertissement | Le répertoire d’état est lisible par d’autres utilisateurs | permissions du système de fichiers sur ~/.openclaw |
oui |
fs.state_dir.symlink |
avertissement | La cible du répertoire d’état devient une autre frontière de confiance | organisation du répertoire d’état dans le système de fichiers | non |
fs.config.perms_writable |
critique | D’autres utilisateurs peuvent modifier l’authentification, la politique des outils ou la configuration | permissions du système de fichiers sur ~/.openclaw/openclaw.json |
oui |
fs.config.symlink |
avertissement | Les fichiers de configuration liés symboliquement ne prennent pas en charge les écritures et ajoutent une autre frontière de confiance | remplacer par un fichier de configuration ordinaire ou faire pointer OPENCLAW_CONFIG_PATH vers le fichier réel |
non |
fs.config.perms_group_readable |
avertissement | Les utilisateurs du groupe peuvent lire les jetons et paramètres de configuration | permissions du système de fichiers sur le fichier de configuration | oui |
fs.config.perms_world_readable |
critique | La configuration peut exposer des jetons et paramètres | permissions du système de fichiers sur le fichier de configuration | oui |
fs.config_include.perms_writable |
critique | Le fichier inclus dans la configuration peut être modifié par d’autres utilisateurs | permissions du fichier inclus référencé depuis openclaw.json |
oui |
fs.config_include.perms_group_readable |
avertissement | Les utilisateurs du groupe peuvent lire les secrets et paramètres inclus | permissions du fichier inclus référencé depuis openclaw.json |
oui |
fs.config_include.perms_world_readable |
critique | Les secrets et paramètres inclus sont lisibles par tous | permissions du fichier inclus référencé depuis openclaw.json |
oui |
fs.auth_profiles.perms_writable |
critique | D’autres utilisateurs peuvent injecter ou remplacer les identifiants de modèle stockés | permissions de agents/<agentId>/agent/auth-profiles.json |
oui |
fs.auth_profiles.perms_readable |
avertissement | D’autres utilisateurs peuvent lire les clés d’API et les jetons OAuth | permissions de agents/<agentId>/agent/auth-profiles.json |
oui |
fs.credentials_dir.perms_writable |
critique | D’autres utilisateurs peuvent modifier l’état d’association ou des identifiants des canaux | permissions du système de fichiers sur ~/.openclaw/credentials |
oui |
fs.credentials_dir.perms_readable |
avertissement | D’autres utilisateurs peuvent lire l’état des identifiants des canaux | permissions du système de fichiers sur ~/.openclaw/credentials |
oui |
fs.sessions_store.perms_readable |
avertissement | D’autres utilisateurs peuvent lire les transcriptions et métadonnées des sessions | permissions du stockage des sessions | oui |
fs.log_file.perms_readable |
avertissement | D’autres utilisateurs peuvent lire des journaux expurgés, mais toujours sensibles | permissions du fichier journal du Gateway | oui |
fs.synced_dir |
avertissement | Le stockage de l’état ou de la configuration dans iCloud/Dropbox/Drive élargit l’exposition des jetons et transcriptions | déplacer la configuration et l’état hors des dossiers synchronisés | non |
gateway.bind_no_auth |
critique | Écoute distante sans secret partagé | gateway.bind, gateway.auth.* |
non |
gateway.loopback_no_auth |
critique | Une interface local loopback derrière un proxy inverse peut devenir non authentifiée | gateway.auth.*, configuration du proxy |
non |
gateway.trusted_proxies_missing |
avertissement | Des en-têtes de proxy inverse sont présents, mais ne sont pas approuvés | gateway.trustedProxies |
non |
gateway.http.no_auth |
avertissement/critique | Les API HTTP du Gateway sont accessibles avec auth.mode="none" |
gateway.auth.mode, gateway.http.endpoints.*, plugins.entries.admin-http-rpc |
non |
gateway.http.session_key_override_enabled |
information | Les appelants de l’API HTTP peuvent remplacer sessionKey |
gateway.http.allowSessionKeyOverride |
non |
gateway.tools_invoke_http.dangerous_allow |
avertissement/critique | Réactive les outils dangereux via l’API HTTP pour les appelants propriétaires ou administrateurs | gateway.tools.allow |
non |
gateway.nodes.allow_commands_dangerous |
avertissement/critique | Active des commandes Node à fort impact (saisie sur le bureau/caméra/écran/contacts/calendrier/SMS) | gateway.nodes.allowCommands |
non |
gateway.nodes.deny_commands_ineffective |
avertissement | Les entrées de refus semblables à des motifs ne correspondent ni au texte de l’interpréteur de commandes ni aux groupes | gateway.nodes.denyCommands |
non |
gateway.tailscale_funnel |
critique | Exposition à l’Internet public | gateway.tailscale.mode |
non |
gateway.tailscale_serve |
information | L’exposition au réseau Tailscale est activée via Serve | gateway.tailscale.mode |
non |
gateway.control_ui.allowed_origins_required |
critique | Interface de contrôle hors local loopback sans liste explicite des origines de navigateur autorisées | gateway.controlUi.allowedOrigins |
non |
gateway.control_ui.allowed_origins_wildcard |
avertissement/critique | allowedOrigins=["*"] désactive la liste des origines de navigateur autorisées |
gateway.controlUi.allowedOrigins |
non |
gateway.control_ui.host_header_origin_fallback |
avertissement/critique | Active le repli de l’origine sur l’en-tête Host, ce qui réduit la protection contre le rebinding DNS | gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback |
non |
gateway.control_ui.insecure_auth |
avertissement | Le commutateur de compatibilité avec l’authentification non sécurisée est activé | gateway.controlUi.allowInsecureAuth |
non |
gateway.control_ui.device_auth_disabled |
critique | Désactive la vérification de l’identité de l’appareil | gateway.controlUi.dangerouslyDisableDeviceAuth |
non |
gateway.real_ip_fallback_enabled |
avertissement/critique | Faire confiance au repli sur X-Real-IP peut permettre l’usurpation de l’adresse IP source en cas de mauvaise configuration du proxy |
gateway.allowRealIpFallback, gateway.trustedProxies |
non |
gateway.token_too_short |
avertissement | Un jeton partagé court est plus facile à trouver par force brute | gateway.auth.token |
non |
gateway.auth_no_rate_limit |
avertissement | Une authentification exposée sans limitation de débit augmente le risque d’attaque par force brute | gateway.auth.rateLimit |
non |
gateway.trusted_proxy_auth |
critique | L’identité fournie par le proxy devient désormais la frontière d’authentification | gateway.auth.mode="trusted-proxy" |
non |
gateway.trusted_proxy_no_proxies |
critique | L’authentification par proxy approuvé sans adresses IP de proxy approuvées n’est pas sécurisée | gateway.trustedProxies |
non |
gateway.trusted_proxy_no_user_header |
critique | L’authentification par proxy de confiance ne peut pas déterminer l’identité de l’utilisateur de manière sûre | gateway.auth.trustedProxy.userHeader |
non |
gateway.trusted_proxy_no_allowlist |
avertissement | L’authentification par proxy de confiance accepte tout utilisateur authentifié en amont | gateway.auth.trustedProxy.allowUsers |
non |
gateway.trusted_proxy_allow_loopback |
avertissement | L’authentification par proxy de confiance accepte les sources de proxy local loopback explicitement autorisées | gateway.auth.trustedProxy.allowLoopback |
non |
gateway.probe_auth_secretref_unavailable |
avertissement | La sonde approfondie n’a pas pu résoudre les SecretRefs d’authentification dans ce chemin de commande | source d’authentification de la sonde approfondie / disponibilité des SecretRefs | non |
gateway.probe_failed |
avertissement | La sonde en direct du Gateway a échoué (--deep uniquement) |
accessibilité/authentification du Gateway | non |
discovery.mdns_full_mode |
avertissement/critique | Le mode mDNS complet annonce les métadonnées cliPath/sshPort sur le réseau local |
discovery.mdns.mode, gateway.bind |
non |
config.insecure_or_dangerous_flags |
avertissement | Un indicateur de débogage non sécurisé ou dangereux est activé | clé indiquée dans les détails du constat | non |
security.audit.suppressions.active |
information | La sortie de l’audit comporte des suppressions configurées et peut être filtrée | security.audit.suppressions |
non |
config.secrets.gateway_password_in_config |
avertissement | Le mot de passe du Gateway est stocké directement dans la configuration | gateway.auth.password |
non |
config.secrets.hooks_token_in_config |
avertissement | Le jeton porteur du hook est stocké directement dans la configuration | hooks.token |
non |
hooks.token_reuse_gateway_token |
critique | Le jeton d’entrée du hook déverrouille également l’authentification du Gateway | hooks.token, gateway.auth.token, gateway.auth.password |
non |
hooks.token_too_short |
avertissement | Facilite les attaques par force brute sur l’entrée du hook | hooks.token |
non |
hooks.default_session_key_unset |
avertissement | Les exécutions de l’agent par hook se répartissent dans des sessions générées pour chaque requête | hooks.defaultSessionKey |
non |
hooks.allowed_agent_ids_unrestricted |
avertissement/critique | Les appelants de hooks authentifiés peuvent acheminer les requêtes vers n’importe quel agent configuré | hooks.allowedAgentIds |
non |
hooks.request_session_key_enabled |
avertissement/critique | L’appelant externe peut choisir la valeur de sessionKey |
hooks.allowRequestSessionKey |
non |
hooks.request_session_key_prefixes_missing |
avertissement/critique | La forme des clés de session externes n’est soumise à aucune restriction | hooks.allowedSessionKeyPrefixes |
non |
hooks.path_root |
critique | Le chemin du hook est /, ce qui facilite les collisions ou les erreurs d’acheminement à l’entrée |
hooks.path |
non |
hooks.installs_unpinned_npm_specs |
avertissement | Les enregistrements d’installation des hooks ne sont pas épinglés à des spécifications npm immuables | métadonnées d’installation des hooks | non |
hooks.installs_missing_integrity |
avertissement | Les enregistrements d’installation des hooks ne contiennent pas de métadonnées d’intégrité | métadonnées d’installation des hooks | non |
hooks.installs_version_drift |
avertissement | Les enregistrements d’installation des hooks divergent des paquets installés | métadonnées d’installation des hooks | non |
logging.redact_off |
avertissement | Des valeurs sensibles sont divulguées dans les journaux ou l’état | logging.redactSensitive |
oui |
browser.control_invalid_config |
avertissement | La configuration du contrôle du navigateur est invalide avant l’exécution | browser.* |
non |
browser.control_no_auth |
critique | Le contrôle du navigateur est exposé sans authentification par jeton ou mot de passe | gateway.auth.* |
non |
browser.remote_cdp_http |
avertissement | Le protocole CDP distant via HTTP non chiffré ne bénéficie d’aucun chiffrement de transport | cdpUrl du profil de navigateur |
non |
browser.remote_cdp_private_host |
avertissement | Le protocole CDP distant cible un hôte privé ou interne | cdpUrl du profil de navigateur, browser.ssrfPolicy.* |
non |
sandbox.docker_config_mode_off |
avertissement | Une configuration Docker de la sandbox est présente, mais inactive | agents.*.sandbox.mode |
non |
sandbox.bind_mount_non_absolute |
avertissement | Les montages liés relatifs peuvent être résolus de manière imprévisible | agents.*.sandbox.docker.binds[] |
non |
sandbox.dangerous_bind_mount |
critique | Le montage lié de la sandbox cible des chemins système, d’identifiants ou de socket Docker bloqués | agents.*.sandbox.docker.binds[] |
non |
sandbox.dangerous_network_mode |
critique | Le réseau Docker de la sandbox utilise le mode de partage d’espace de noms host ou container:* |
agents.*.sandbox.docker.network |
non |
sandbox.dangerous_seccomp_profile |
critique | Le profil seccomp de la sandbox affaiblit l’isolation du conteneur | agents.*.sandbox.docker.securityOpt |
non |
sandbox.dangerous_apparmor_profile |
critique | Le profil AppArmor de la sandbox affaiblit l’isolation du conteneur | agents.*.sandbox.docker.securityOpt |
non |
sandbox.browser_cdp_bridge_unrestricted |
avertissement | Le pont du navigateur de la sandbox est exposé sans restriction de plage source | sandbox.browser.cdpSourceRange |
non |
sandbox.browser_container.non_loopback_publish |
critique | Le conteneur de navigateur existant publie CDP sur des interfaces autres que local loopback | configuration de publication du conteneur de sandbox du navigateur | non |
sandbox.browser_container.hash_label_missing |
avertissement | Le conteneur de navigateur existant est antérieur aux libellés actuels de hachage de configuration | openclaw sandbox recreate --browser --all |
non |
sandbox.browser_container.hash_epoch_stale |
avertissement | Le conteneur de navigateur existant est antérieur à l’époque actuelle de configuration du navigateur | openclaw sandbox recreate --browser --all |
non |
sandbox.browser_container.docker_probe_timeout |
avertissement | La sonde des libellés Docker du conteneur de navigateur a expiré | accessibilité du démon Docker | non |
tools.exec.host_sandbox_no_sandbox_defaults |
avertissement | exec host=sandbox échoue en mode fermé lorsque la sandbox est désactivée |
tools.exec.host, agents.defaults.sandbox.mode |
non |
tools.exec.host_sandbox_no_sandbox_agents |
avertissement | La commande exec host=sandbox propre à chaque agent échoue en mode fermé lorsque la sandbox est désactivée |
agents.list[].tools.exec.host, agents.list[].sandbox.mode |
non |
tools.exec.security_full_configured |
avertissement/critique | L’exécution sur l’hôte fonctionne avec security="full" |
tools.exec.security, agents.list[].tools.exec.security |
non |
tools.exec.agent_skill_mcp_boundary_drift |
avertissement | Des listes d’autorisation des Skills de l’agent sont présentes alors que l’exécution sur l’hôte peut atteindre des clients ou registres MCP | agents.list[].tools.exec.*, isolation de la sandbox/du système d’exploitation, identifiants des serveurs MCP |
non |
tools.exec.fs_tools_disabled_but_exec_enabled |
avertissement | La politique des outils de système de fichiers ne rend pas l’exécution de commandes shell accessible en lecture seule | tools.deny, agents.list[].tools.deny, agents.*.sandbox.workspaceAccess |
non |
tools.exec.auto_allow_skills_enabled |
avertissement | Les approbations d’exécution font implicitement confiance aux exécutables des Skills | fichier d’approbations de l’hôte | non |
tools.exec.allowlist_interpreter_without_strict_inline_eval |
avertissement | Les listes d’autorisation d’interpréteurs permettent l’évaluation en ligne sans imposer de nouvelle approbation | tools.exec.strictInlineEval, agents.list[].tools.exec.strictInlineEval, liste d’autorisation des approbations d’exécution |
non |
tools.exec.safe_bins_interpreter_unprofiled |
avertissement | Les exécutables d’interpréteur ou d’environnement d’exécution dans safeBins sans profils explicites augmentent le risque lié à l’exécution |
tools.exec.safeBins, tools.exec.safeBinProfiles, agents.list[].tools.exec.* |
non |
tools.exec.safe_bins_broad_behavior |
avertissement | Les outils au comportement étendu dans safeBins affaiblissent le modèle de confiance à faible risque fondé sur le filtrage de stdin |
tools.exec.safeBins, agents.list[].tools.exec.safeBins |
non |
tools.exec.safe_bin_trusted_dirs_risky |
avertissement | safeBinTrustedDirs inclut des répertoires modifiables ou risqués |
tools.exec.safeBinTrustedDirs, agents.list[].tools.exec.safeBinTrustedDirs |
non |
tools.elevated.allowFrom.<provider>.wildcard |
critique | tools.elevated.allowFrom.<provider> inclut "*", ce qui approuve chaque expéditeur |
tools.elevated.allowFrom.<provider> |
non |
tools.elevated.allowFrom.<provider>.large |
avertissement | La liste d’autorisation avec privilèges élevés pour <provider> comporte plus de 25 entrées |
tools.elevated.allowFrom.<provider> |
non |
agents.claude_cli.permission_mode_overridden_by_yolo |
avertissement | L’option --permission-mode de Claude CLI est ignorée, car l’exécution OpenClaw est entièrement autonome |
arguments de tools.exec.security, tools.exec.ask, cliBackends.claude-cli |
non |
skills.workspace.symlink_escape |
avertissement | Le chemin skills/**/SKILL.md de l’espace de travail est résolu hors de la racine de l’espace de travail (dérive de la chaîne de liens symboliques) |
état du système de fichiers de skills/** dans l’espace de travail |
non |
skills.workspace.scan_truncated |
avertissement | L’analyse des Skills de l’espace de travail a atteint sa limite de visites de répertoires avant de se terminer | aplatir ou simplifier l’arborescence du répertoire skills/ de l’espace de travail |
non |
plugins.extensions_no_allowlist |
avertissement | Les Plugins sont installés sans liste d’autorisation explicite de Plugins | plugins.allowlist |
non |
plugins.allow_phantom_entries |
avertissement | plugins.allow répertorie un identifiant ne correspondant à aucun Plugin installé |
plugins.allow |
non |
plugins.installs_unpinned_npm_specs |
avertissement | Les enregistrements de l’index des Plugins ne sont pas épinglés à des spécifications npm immuables | métadonnées d’installation du Plugin | non |
plugins.installs_missing_integrity |
avertissement | Les enregistrements de l’index des Plugins ne comportent pas de métadonnées d’intégrité | métadonnées d’installation du Plugin | non |
plugins.installs_version_drift |
avertissement | Les enregistrements de l’index des Plugins divergent des paquets installés | métadonnées d’installation du Plugin | non |
plugins.code_safety |
avertissement/critique | L’analyse du code du Plugin a détecté des motifs suspects ou dangereux (--deep uniquement) |
code du Plugin / source d’installation | non |
plugins.code_safety.entry_path |
avertissement | Le chemin d’entrée du Plugin pointe vers des emplacements masqués ou situés dans node_modules |
entry du manifeste du Plugin |
non |
plugins.code_safety.entry_escape |
critique | Le point d’entrée du Plugin sort du répertoire du Plugin | entry du manifeste du Plugin |
non |
plugins.code_safety.manifest_parse_error |
avertissement | Le manifeste du Plugin n’a pas pu être analysé lors de l’analyse de sécurité du code | fichier manifeste du Plugin | non |
plugins.code_safety.scan_failed |
avertissement | L’analyse du code du Plugin n’a pas pu aboutir (--deep uniquement) |
chemin du Plugin / environnement d’analyse | non |
plugins.<pluginId>.security_audit_failed |
avertissement | Un collecteur d’audit de sécurité appartenant à un Plugin a généré une erreur | collecteur d’audit de sécurité de ce Plugin | non |
skills.code_safety |
avertissement/critique | Les métadonnées ou le code du programme d’installation du Skill contiennent des motifs suspects ou dangereux (--deep uniquement) |
source d’installation du Skill | non |
skills.code_safety.scan_failed |
avertissement | L’analyse du code du Skill n’a pas pu aboutir (--deep uniquement) |
environnement d’analyse du Skill | non |
security.exposure.open_channels_with_exec |
avertissement/critique | Les salons partagés ou publics peuvent accéder à des agents autorisés à exécuter des commandes | channels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.list[].tools.exec.* |
non |
security.exposure.open_groups_with_elevated |
critique | Les messages privés ou groupes ouverts associés à des outils avec privilèges élevés créent des vecteurs d’injection de prompt à fort impact | chemins de politique des messages privés de premier niveau ou imbriqués, remplacements de compte, channels.*.groupPolicy |
non |
security.exposure.open_groups_with_runtime_or_fs |
critique/avertissement | Les messages privés ou groupes ouverts peuvent accéder aux outils de commande ou de fichiers sans protections de sandbox ou d’espace de travail | chemins de politique des messages privés ou de groupe, tools.profile/deny, tools.fs.workspaceOnly, agents.*.sandbox.mode |
non |
security.exposure.open_groups_with_control_plane_tools |
critique | Les messages privés ou groupes ouverts peuvent accéder aux outils du plan de contrôle du Gateway ou de Cron | chemins de politique des messages privés ou de groupe, tools.allow, tools.alsoAllow, tools.profile, gateway, cron |
non |
security.trust_model.multi_user_heuristic |
avertissement | La configuration semble multi-utilisateur alors que le modèle de confiance du Gateway est celui d’un assistant personnel | séparer les limites de confiance ou renforcer la sécurité pour les utilisateurs partagés (sandbox.mode, refus d’outils ou limitation à l’espace de travail) |
non |
tools.profile_minimal_overridden |
avertissement | Les remplacements propres aux agents contournent le profil minimal global | agents.list[].tools.profile |
non |
plugins.tools_reachable_permissive_policy |
avertissement | Les outils d’extension sont accessibles dans des contextes permissifs | tools.profile + autorisation/refus d’outils |
non |
models.legacy |
avertissement | Des familles de modèles obsolètes sont encore configurées | sélection du modèle | non |
models.weak_tier |
avertissement | Les modèles configurés sont inférieurs aux niveaux actuellement recommandés | sélection du modèle | non |
models.small_params |
critique/information | Les petits modèles associés à des surfaces d’outils non sécurisées augmentent le risque d’injection | choix du modèle + politique de sandbox et d’outils | non |
channels.<provider>.dm.open |
critique | La politique de messages privés de <provider> est "open" ; n’importe qui peut envoyer un message privé au bot |
channels.<provider>.dmPolicy, .allowFrom |
non |
channels.<provider>.dm.open_invalid |
avertissement | dmPolicy="open" sans "*" dans allowFrom est incohérent |
channels.<provider>.allowFrom |
non |
channels.<provider>.dm.scope_main_multiuser |
avertissement | Plusieurs expéditeurs de messages privés partagent actuellement la session principale | session.dmScope |
non |
channels.<provider>.allowFrom.dangerous_name_matching_enabled |
information | dangerouslyAllowNameMatching réactive la correspondance des expéditeurs par nom, adresse e-mail ou étiquette modifiable |
désactiver dangerouslyAllowNameMatching, utiliser des identifiants d’expéditeur stables |
non |
channels.<provider>.account.read_only_resolution |
avertissement | Un compte de canal n’a pas pu être entièrement résolu pour l’audit (secret ou Gateway manquant) | vérifier que les secrets référencés peuvent être résolus ou exécuter l’audit sur un instantané actif du Gateway | non |
channels.<provider>.warning.<n> |
information/avertissement/critique | Avertissement de sécurité propre au fournisseur, classé à partir du texte libre du Plugin | consulter les détails du constat | non |
summary.attack_surface |
info | Synthèse de la posture d’authentification, des canaux, des outils et de l’exposition | plusieurs clés (voir les détails du constat) | non |
Les checkIds channels.<provider>.* et tools.elevated.allowFrom.<provider>.* sont
générés pour chaque canal/fournisseur configuré ; <provider> est donc un véritable
identifiant de canal (par exemple telegram, discord) dans la sortie réelle, et non une chaîne littérale.