Skip to main content

Security audit checks

openclaw security audit emits structured findings keyed by checkId. This page is the reference catalog for those IDs. For the high-level threat model and hardening guidance, see Security. High-signal checkId values you will most likely see in real deployments (not exhaustive):
checkIdSeverityWhy it mattersPrimary fix key/pathAuto-fix
fs.state_dir.perms_world_writablecriticalOther users/processes can modify full OpenClaw statefilesystem perms on ~/.openclawyes
fs.state_dir.perms_group_writablewarnGroup users can modify full OpenClaw statefilesystem perms on ~/.openclawyes
fs.state_dir.perms_readablewarnState dir is readable by othersfilesystem perms on ~/.openclawyes
fs.state_dir.symlinkwarnState dir target becomes another trust boundarystate dir filesystem layoutno
fs.config.perms_writablecriticalOthers can change auth/tool policy/configfilesystem perms on ~/.openclaw/openclaw.jsonyes
fs.config.symlinkwarnSymlinked config files are unsupported for writes and add another trust boundaryreplace with a regular config file or point OPENCLAW_CONFIG_PATH at the real fileno
fs.config.perms_group_readablewarnGroup users can read config tokens/settingsfilesystem perms on config fileyes
fs.config.perms_world_readablecriticalConfig can expose tokens/settingsfilesystem perms on config fileyes
fs.config_include.perms_writablecriticalConfig include file can be modified by othersinclude-file perms referenced from openclaw.jsonyes
fs.config_include.perms_group_readablewarnGroup users can read included secrets/settingsinclude-file perms referenced from openclaw.jsonyes
fs.config_include.perms_world_readablecriticalIncluded secrets/settings are world-readableinclude-file perms referenced from openclaw.jsonyes
fs.auth_profiles.perms_writablecriticalOthers can inject or replace stored model credentialsagents/<agentId>/agent/auth-profiles.json permsyes
fs.auth_profiles.perms_readablewarnOthers can read API keys and OAuth tokensagents/<agentId>/agent/auth-profiles.json permsyes
fs.credentials_dir.perms_writablecriticalOthers can modify channel pairing/credential statefilesystem perms on ~/.openclaw/credentialsyes
fs.credentials_dir.perms_readablewarnOthers can read channel credential statefilesystem perms on ~/.openclaw/credentialsyes
fs.sessions_store.perms_readablewarnOthers can read session transcripts/metadatasession store permsyes
fs.log_file.perms_readablewarnOthers can read redacted-but-still-sensitive logsgateway log file permsyes
fs.synced_dirwarnState/config in iCloud/Dropbox/Drive broadens token/transcript exposuremove config/state off synced foldersno
gateway.bind_no_authcriticalRemote bind without shared secretgateway.bind, gateway.auth.*no
gateway.loopback_no_authcriticalReverse-proxied loopback may become unauthenticatedgateway.auth.*, proxy setupno
gateway.trusted_proxies_missingwarnReverse-proxy headers are present but not trustedgateway.trustedProxiesno
gateway.http.no_authwarn/criticalGateway HTTP APIs reachable with auth.mode="none"gateway.auth.mode, gateway.http.endpoints.*no
gateway.http.session_key_override_enabledinfoHTTP API callers can override sessionKeygateway.http.allowSessionKeyOverrideno
gateway.tools_invoke_http.dangerous_allowwarn/criticalRe-enables dangerous tools over HTTP APIgateway.tools.allowno
gateway.nodes.allow_commands_dangerouswarn/criticalEnables high-impact node commands (camera/screen/contacts/calendar/SMS)gateway.nodes.allowCommandsno
gateway.nodes.deny_commands_ineffectivewarnPattern-like deny entries do not match shell text or groupsgateway.nodes.denyCommandsno
gateway.tailscale_funnelcriticalPublic internet exposuregateway.tailscale.modeno
gateway.tailscale_serveinfoTailnet exposure is enabled via Servegateway.tailscale.modeno
gateway.control_ui.allowed_origins_requiredcriticalNon-loopback Control UI without explicit browser-origin allowlistgateway.controlUi.allowedOriginsno
gateway.control_ui.allowed_origins_wildcardwarn/criticalallowedOrigins=["*"] disables browser-origin allowlistinggateway.controlUi.allowedOriginsno
gateway.control_ui.host_header_origin_fallbackwarn/criticalEnables Host-header origin fallback (DNS rebinding hardening downgrade)gateway.controlUi.dangerouslyAllowHostHeaderOriginFallbackno
gateway.control_ui.insecure_authwarnInsecure-auth compatibility toggle enabledgateway.controlUi.allowInsecureAuthno
gateway.control_ui.device_auth_disabledcriticalDisables device identity checkgateway.controlUi.dangerouslyDisableDeviceAuthno
gateway.real_ip_fallback_enabledwarn/criticalTrusting X-Real-IP fallback can enable source-IP spoofing via proxy misconfiggateway.allowRealIpFallback, gateway.trustedProxiesno
gateway.token_too_shortwarnShort shared token is easier to brute forcegateway.auth.tokenno
gateway.auth_no_rate_limitwarnExposed auth without rate limiting increases brute-force riskgateway.auth.rateLimitno
gateway.trusted_proxy_authcriticalProxy identity now becomes the auth boundarygateway.auth.mode="trusted-proxy"no
gateway.trusted_proxy_no_proxiescriticalTrusted-proxy auth without trusted proxy IPs is unsafegateway.trustedProxiesno
gateway.trusted_proxy_no_user_headercriticalTrusted-proxy auth cannot resolve user identity safelygateway.auth.trustedProxy.userHeaderno
gateway.trusted_proxy_no_allowlistwarnTrusted-proxy auth accepts any authenticated upstream usergateway.auth.trustedProxy.allowUsersno
gateway.probe_auth_secretref_unavailablewarnDeep probe could not resolve auth SecretRefs in this command pathdeep-probe auth source / SecretRef availabilityno
gateway.probe_failedwarn/criticalLive Gateway probe failedgateway reachability/authno
discovery.mdns_full_modewarn/criticalmDNS full mode advertises cliPath/sshPort metadata on local networkdiscovery.mdns.mode, gateway.bindno
config.insecure_or_dangerous_flagswarnAny insecure/dangerous debug flags enabledmultiple keys (see finding detail)no
config.secrets.gateway_password_in_configwarnGateway password is stored directly in configgateway.auth.passwordno
config.secrets.hooks_token_in_configwarnHook bearer token is stored directly in confighooks.tokenno
hooks.token_reuse_gateway_tokencriticalHook ingress token also unlocks Gateway authhooks.token, gateway.auth.tokenno
hooks.token_too_shortwarnEasier brute force on hook ingresshooks.tokenno
hooks.default_session_key_unsetwarnHook agent runs fan out into generated per-request sessionshooks.defaultSessionKeyno
hooks.allowed_agent_ids_unrestrictedwarn/criticalAuthenticated hook callers may route to any configured agenthooks.allowedAgentIdsno
hooks.request_session_key_enabledwarn/criticalExternal caller can choose sessionKeyhooks.allowRequestSessionKeyno
hooks.request_session_key_prefixes_missingwarn/criticalNo bound on external session key shapeshooks.allowedSessionKeyPrefixesno
hooks.path_rootcriticalHook path is /, making ingress easier to collide or misroutehooks.pathno
hooks.installs_unpinned_npm_specswarnHook install records are not pinned to immutable npm specshook install metadatano
hooks.installs_missing_integritywarnHook install records lack integrity metadatahook install metadatano
hooks.installs_version_driftwarnHook install records drift from installed packageshook install metadatano
logging.redact_offwarnSensitive values leak to logs/statuslogging.redactSensitiveyes
browser.control_invalid_configwarnBrowser control config is invalid before runtimebrowser.*no
browser.control_no_authcriticalBrowser control exposed without token/password authgateway.auth.*no
browser.remote_cdp_httpwarnRemote CDP over plain HTTP lacks transport encryptionbrowser profile cdpUrlno
browser.remote_cdp_private_hostwarnRemote CDP targets a private/internal hostbrowser profile cdpUrl, browser.ssrfPolicy.*no
sandbox.docker_config_mode_offwarnSandbox Docker config present but inactiveagents.*.sandbox.modeno
sandbox.bind_mount_non_absolutewarnRelative bind mounts can resolve unpredictablyagents.*.sandbox.docker.binds[]no
sandbox.dangerous_bind_mountcriticalSandbox bind mount targets blocked system, credential, or Docker socket pathsagents.*.sandbox.docker.binds[]no
sandbox.dangerous_network_modecriticalSandbox Docker network uses host or container:* namespace-join modeagents.*.sandbox.docker.networkno
sandbox.dangerous_seccomp_profilecriticalSandbox seccomp profile weakens container isolationagents.*.sandbox.docker.securityOptno
sandbox.dangerous_apparmor_profilecriticalSandbox AppArmor profile weakens container isolationagents.*.sandbox.docker.securityOptno
sandbox.browser_cdp_bridge_unrestrictedwarnSandbox browser bridge is exposed without source-range restrictionsandbox.browser.cdpSourceRangeno
sandbox.browser_container.non_loopback_publishcriticalExisting browser container publishes CDP on non-loopback interfacesbrowser sandbox container publish configno
sandbox.browser_container.hash_label_missingwarnExisting browser container predates current config-hash labelsopenclaw sandbox recreate --browser --allno
sandbox.browser_container.hash_epoch_stalewarnExisting browser container predates current browser config epochopenclaw sandbox recreate --browser --allno
tools.exec.host_sandbox_no_sandbox_defaultswarnexec host=sandbox fails closed when sandbox is offtools.exec.host, agents.defaults.sandbox.modeno
tools.exec.host_sandbox_no_sandbox_agentswarnPer-agent exec host=sandbox fails closed when sandbox is offagents.list[].tools.exec.host, agents.list[].sandbox.modeno
tools.exec.security_full_configuredwarn/criticalHost exec is running with security="full"tools.exec.security, agents.list[].tools.exec.securityno
tools.exec.auto_allow_skills_enabledwarnExec approvals trust skill bins implicitly~/.openclaw/exec-approvals.jsonno
tools.exec.allowlist_interpreter_without_strict_inline_evalwarnInterpreter allowlists permit inline eval without forced reapprovaltools.exec.strictInlineEval, agents.list[].tools.exec.strictInlineEval, exec approvals allowlistno
tools.exec.safe_bins_interpreter_unprofiledwarnInterpreter/runtime bins in safeBins without explicit profiles broaden exec risktools.exec.safeBins, tools.exec.safeBinProfiles, agents.list[].tools.exec.*no
tools.exec.safe_bins_broad_behaviorwarnBroad-behavior tools in safeBins weaken the low-risk stdin-filter trust modeltools.exec.safeBins, agents.list[].tools.exec.safeBinsno
tools.exec.safe_bin_trusted_dirs_riskywarnsafeBinTrustedDirs includes mutable or risky directoriestools.exec.safeBinTrustedDirs, agents.list[].tools.exec.safeBinTrustedDirsno
skills.workspace.symlink_escapewarnWorkspace skills/**/SKILL.md resolves outside workspace root (symlink-chain drift)workspace skills/** filesystem stateno
plugins.extensions_no_allowlistwarnPlugins are installed without an explicit plugin allowlistplugins.allowlistno
plugins.installs_unpinned_npm_specswarnPlugin install records are not pinned to immutable npm specsplugin install metadatano
plugins.installs_missing_integritywarnPlugin install records lack integrity metadataplugin install metadatano
plugins.installs_version_driftwarnPlugin install records drift from installed packagesplugin install metadatano
plugins.code_safetywarn/criticalPlugin code scan found suspicious or dangerous patternsplugin code / install sourceno
plugins.code_safety.entry_pathwarnPlugin entry path points into hidden or node_modules locationsplugin manifest entryno
plugins.code_safety.entry_escapecriticalPlugin entry escapes the plugin directoryplugin manifest entryno
plugins.code_safety.scan_failedwarnPlugin code scan could not completeplugin path / scan environmentno
skills.code_safetywarn/criticalSkill installer metadata/code contains suspicious or dangerous patternsskill install sourceno
skills.code_safety.scan_failedwarnSkill code scan could not completeskill scan environmentno
security.exposure.open_channels_with_execwarn/criticalShared/public rooms can reach exec-enabled agentschannels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.list[].tools.exec.*no
security.exposure.open_groups_with_elevatedcriticalOpen groups + elevated tools create high-impact prompt-injection pathschannels.*.groupPolicy, tools.elevated.*no
security.exposure.open_groups_with_runtime_or_fscritical/warnOpen groups can reach command/file tools without sandbox/workspace guardschannels.*.groupPolicy, tools.profile/deny, tools.fs.workspaceOnly, agents.*.sandbox.modeno
security.trust_model.multi_user_heuristicwarnConfig looks multi-user while gateway trust model is personal-assistantsplit trust boundaries, or shared-user hardening (sandbox.mode, tool deny/workspace scoping`)no
tools.profile_minimal_overriddenwarnAgent overrides bypass global minimal profileagents.list[].tools.profileno
plugins.tools_reachable_permissive_policywarnExtension tools reachable in permissive contextstools.profile + tool allow/denyno
models.legacywarnLegacy model families are still configuredmodel selectionno
models.weak_tierwarnConfigured models are below current recommended tiersmodel selectionno
models.small_paramscritical/infoSmall models + unsafe tool surfaces raise injection riskmodel choice + sandbox/tool policyno
summary.attack_surfaceinfoRoll-up summary of auth, channel, tool, and exposure posturemultiple keys (see finding detail)no