Gateway
Comprobaciones de auditoría de seguridad
openclaw security audit emite hallazgos estructurados identificados por checkId. Esta página es el catálogo de referencia de esos identificadores. Para consultar el modelo de amenazas general y las recomendaciones de refuerzo, consulta Seguridad.
Algunas comprobaciones solo se ejecutan con openclaw security audit --deep: análisis del código de plugins y Skills (plugins.code_safety*, skills.code_safety*) y comprobaciones mediante sondeos activos del Gateway (gateway.probe_*). Todas las demás comprobaciones de esta tabla se ejecutan con un simple openclaw security audit.
Una gravedad como warn/critical significa que el mismo checkId puede emitirse en cualquiera de los dos niveles según la configuración (por ejemplo, si el Gateway está expuesto de forma remota). Estos son los valores de alta relevancia que probablemente encontrarás en implementaciones reales (lista no exhaustiva):
checkId |
Gravedad | Por qué es importante | Clave/ruta principal de corrección | Corrección automática |
|---|---|---|---|---|
fs.state_dir.perms_world_writable |
crítica | Otros usuarios o procesos pueden modificar todo el estado de OpenClaw | permisos del sistema de archivos en ~/.openclaw |
sí |
fs.state_dir.perms_group_writable |
advertencia | Los usuarios del grupo pueden modificar todo el estado de OpenClaw | permisos del sistema de archivos en ~/.openclaw |
sí |
fs.state_dir.perms_readable |
advertencia | Otros usuarios pueden leer el directorio de estado | permisos del sistema de archivos en ~/.openclaw |
sí |
fs.state_dir.symlink |
advertencia | El destino del directorio de estado se convierte en otro límite de confianza | estructura del sistema de archivos del directorio de estado | no |
fs.config.perms_writable |
crítica | Otros usuarios pueden cambiar la autenticación, la política de herramientas o la configuración | permisos del sistema de archivos en ~/.openclaw/openclaw.json |
sí |
fs.config.symlink |
advertencia | No se admite escribir en archivos de configuración enlazados simbólicamente y estos añaden otro límite de confianza | sustituirlo por un archivo de configuración normal o apuntar OPENCLAW_CONFIG_PATH al archivo real |
no |
fs.config.perms_group_readable |
advertencia | Los usuarios del grupo pueden leer los tokens y ajustes de configuración | permisos del sistema de archivos en el archivo de configuración | sí |
fs.config.perms_world_readable |
crítica | La configuración puede exponer tokens y ajustes | permisos del sistema de archivos en el archivo de configuración | sí |
fs.config_include.perms_writable |
crítica | Otros usuarios pueden modificar el archivo incluido de configuración | permisos del archivo incluido al que hace referencia openclaw.json |
sí |
fs.config_include.perms_group_readable |
advertencia | Los usuarios del grupo pueden leer los secretos y ajustes incluidos | permisos del archivo incluido al que hace referencia openclaw.json |
sí |
fs.config_include.perms_world_readable |
crítica | Los secretos y ajustes incluidos son legibles por todos | permisos del archivo incluido al que hace referencia openclaw.json |
sí |
fs.auth_profiles.perms_writable |
crítica | Otros usuarios pueden inyectar o sustituir credenciales de modelos almacenadas | permisos de agents/<agentId>/agent/auth-profiles.json |
sí |
fs.auth_profiles.perms_readable |
advertencia | Otros usuarios pueden leer claves de API y tokens de OAuth | permisos de agents/<agentId>/agent/auth-profiles.json |
sí |
fs.credentials_dir.perms_writable |
crítica | Otros usuarios pueden modificar el estado de emparejamiento o las credenciales del canal | permisos del sistema de archivos en ~/.openclaw/credentials |
sí |
fs.credentials_dir.perms_readable |
advertencia | Otros usuarios pueden leer el estado de las credenciales del canal | permisos del sistema de archivos en ~/.openclaw/credentials |
sí |
fs.sessions_store.perms_readable |
advertencia | Otros usuarios pueden leer las transcripciones y los metadatos de las sesiones | permisos del almacén de sesiones | sí |
fs.log_file.perms_readable |
advertencia | Otros usuarios pueden leer registros censurados, pero aun así confidenciales | permisos del archivo de registro del Gateway | sí |
fs.synced_dir |
advertencia | Guardar el estado o la configuración en iCloud, Dropbox o Drive amplía la exposición de tokens y transcripciones | mover la configuración y el estado fuera de las carpetas sincronizadas | no |
gateway.bind_no_auth |
crítica | Enlace remoto sin secreto compartido | gateway.bind, gateway.auth.* |
no |
gateway.loopback_no_auth |
crítica | El local loopback con proxy inverso puede quedar sin autenticación | gateway.auth.*, configuración del proxy |
no |
gateway.trusted_proxies_missing |
advertencia | Hay cabeceras de proxy inverso, pero no son de confianza | gateway.trustedProxies |
no |
gateway.http.no_auth |
advertencia/crítica | Las API HTTP del Gateway son accesibles con auth.mode="none" |
gateway.auth.mode, gateway.http.endpoints.*, plugins.entries.admin-http-rpc |
no |
gateway.http.session_key_override_enabled |
información | Los clientes de la API HTTP pueden sobrescribir sessionKey |
gateway.http.allowSessionKeyOverride |
no |
gateway.tools_invoke_http.dangerous_allow |
advertencia/crítica | Vuelve a habilitar herramientas peligrosas mediante la API HTTP para clientes propietarios o administradores | gateway.tools.allow |
no |
gateway.nodes.allow_commands_dangerous |
advertencia/crítica | Habilita comandos de Node de alto impacto (entrada del escritorio, cámara, pantalla, contactos, calendario y SMS) | gateway.nodes.allowCommands |
no |
gateway.nodes.deny_commands_ineffective |
advertencia | Las entradas de denegación con forma de patrón no coinciden con el texto del shell ni con los grupos | gateway.nodes.denyCommands |
no |
gateway.tailscale_funnel |
crítica | Exposición a la Internet pública | gateway.tailscale.mode |
no |
gateway.tailscale_serve |
información | La exposición a la red privada de Tailscale está habilitada mediante Serve | gateway.tailscale.mode |
no |
gateway.control_ui.allowed_origins_required |
crítica | Interfaz de control fuera de local loopback sin una lista explícita de orígenes de navegador permitidos | gateway.controlUi.allowedOrigins |
no |
gateway.control_ui.allowed_origins_wildcard |
advertencia/crítica | allowedOrigins=["*"] deshabilita la lista de orígenes de navegador permitidos |
gateway.controlUi.allowedOrigins |
no |
gateway.control_ui.host_header_origin_fallback |
advertencia/crítica | Habilita el respaldo de origen mediante la cabecera Host, lo que reduce la protección contra la revinculación de DNS | gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback |
no |
gateway.control_ui.insecure_auth |
advertencia | Está habilitada la opción de compatibilidad con autenticación insegura | gateway.controlUi.allowInsecureAuth |
no |
gateway.control_ui.device_auth_disabled |
crítica | Deshabilita la comprobación de identidad del dispositivo | gateway.controlUi.dangerouslyDisableDeviceAuth |
no |
gateway.real_ip_fallback_enabled |
advertencia/crítica | Confiar en el respaldo X-Real-IP puede permitir la suplantación de la IP de origen mediante una configuración incorrecta del proxy |
gateway.allowRealIpFallback, gateway.trustedProxies |
no |
gateway.token_too_short |
advertencia | Un token compartido corto es más fácil de vulnerar por fuerza bruta | gateway.auth.token |
no |
gateway.auth_no_rate_limit |
advertencia | La autenticación expuesta sin limitación de solicitudes aumenta el riesgo de ataques de fuerza bruta | gateway.auth.rateLimit |
no |
gateway.trusted_proxy_auth |
crítica | La identidad del proxy se convierte en el límite de autenticación | gateway.auth.mode="trusted-proxy" |
no |
gateway.trusted_proxy_no_proxies |
crítica | La autenticación mediante proxy de confianza sin direcciones IP de proxies de confianza es insegura | gateway.trustedProxies |
no |
gateway.trusted_proxy_no_user_header |
crítico | La autenticación mediante proxy de confianza no puede resolver de forma segura la identidad del usuario | gateway.auth.trustedProxy.userHeader |
no |
gateway.trusted_proxy_no_allowlist |
advertencia | La autenticación mediante proxy de confianza acepta a cualquier usuario ascendente autenticado | gateway.auth.trustedProxy.allowUsers |
no |
gateway.trusted_proxy_allow_loopback |
advertencia | La autenticación mediante proxy de confianza acepta fuentes de proxy local loopback permitidas explícitamente | gateway.auth.trustedProxy.allowLoopback |
no |
gateway.probe_auth_secretref_unavailable |
advertencia | El sondeo profundo no pudo resolver las SecretRefs de autenticación en esta ruta de comandos | fuente de autenticación del sondeo profundo / disponibilidad de SecretRef | no |
gateway.probe_failed |
advertencia | Falló el sondeo en vivo del Gateway (solo con --deep) |
accesibilidad/autenticación del Gateway | no |
discovery.mdns_full_mode |
advertencia/crítico | El modo completo de mDNS anuncia metadatos de cliPath/sshPort en la red local |
discovery.mdns.mode, gateway.bind |
no |
config.insecure_or_dangerous_flags |
advertencia | Hay habilitada una opción de depuración insegura o peligrosa | clave indicada en los detalles del hallazgo | no |
security.audit.suppressions.active |
información | La salida de auditoría tiene supresiones configuradas y puede estar filtrada | security.audit.suppressions |
no |
config.secrets.gateway_password_in_config |
advertencia | La contraseña del Gateway está almacenada directamente en la configuración | gateway.auth.password |
no |
config.secrets.hooks_token_in_config |
advertencia | El token de portador del hook está almacenado directamente en la configuración | hooks.token |
no |
hooks.token_reuse_gateway_token |
crítico | El token de entrada del hook también desbloquea la autenticación del Gateway | hooks.token, gateway.auth.token, gateway.auth.password |
no |
hooks.token_too_short |
advertencia | Facilita los ataques de fuerza bruta contra la entrada del hook | hooks.token |
no |
hooks.default_session_key_unset |
advertencia | Las ejecuciones del agente mediante hooks se distribuyen en sesiones generadas por solicitud | hooks.defaultSessionKey |
no |
hooks.allowed_agent_ids_unrestricted |
advertencia/crítico | Los invocadores autenticados de hooks pueden dirigir solicitudes a cualquier agente configurado | hooks.allowedAgentIds |
no |
hooks.request_session_key_enabled |
advertencia/crítico | El invocador externo puede elegir la sessionKey | hooks.allowRequestSessionKey |
no |
hooks.request_session_key_prefixes_missing |
advertencia/crítico | No hay límites para los formatos de las claves de sesión externas | hooks.allowedSessionKeyPrefixes |
no |
hooks.path_root |
crítico | La ruta del hook es /, lo que facilita colisiones o direccionamientos incorrectos de la entrada |
hooks.path |
no |
hooks.installs_unpinned_npm_specs |
advertencia | Los registros de instalación de hooks no están fijados a especificaciones inmutables de npm | metadatos de instalación de hooks | no |
hooks.installs_missing_integrity |
advertencia | Los registros de instalación de hooks carecen de metadatos de integridad | metadatos de instalación de hooks | no |
hooks.installs_version_drift |
advertencia | Los registros de instalación de hooks difieren de los paquetes instalados | metadatos de instalación de hooks | no |
logging.redact_off |
advertencia | Los valores confidenciales se filtran a los registros y al estado | logging.redactSensitive |
sí |
browser.control_invalid_config |
advertencia | La configuración del control del navegador no es válida antes de la ejecución | browser.* |
no |
browser.control_no_auth |
crítico | El control del navegador está expuesto sin autenticación mediante token o contraseña | gateway.auth.* |
no |
browser.remote_cdp_http |
advertencia | El acceso remoto a CDP mediante HTTP sin cifrar carece de cifrado de transporte | cdpUrl del perfil del navegador |
no |
browser.remote_cdp_private_host |
advertencia | El CDP remoto apunta a un host privado o interno | cdpUrl del perfil del navegador, browser.ssrfPolicy.* |
no |
sandbox.docker_config_mode_off |
advertencia | La configuración de Docker del entorno aislado está presente, pero inactiva | agents.*.sandbox.mode |
no |
sandbox.bind_mount_non_absolute |
advertencia | Los montajes enlazados relativos pueden resolverse de forma impredecible | agents.*.sandbox.docker.binds[] |
no |
sandbox.dangerous_bind_mount |
crítico | El montaje enlazado del entorno aislado apunta a rutas bloqueadas del sistema, de credenciales o del socket de Docker | agents.*.sandbox.docker.binds[] |
no |
sandbox.dangerous_network_mode |
crítico | La red de Docker del entorno aislado usa el modo de unión al espacio de nombres host o container:* |
agents.*.sandbox.docker.network |
no |
sandbox.dangerous_seccomp_profile |
crítico | El perfil seccomp del entorno aislado debilita el aislamiento del contenedor | agents.*.sandbox.docker.securityOpt |
no |
sandbox.dangerous_apparmor_profile |
crítico | El perfil AppArmor del entorno aislado debilita el aislamiento del contenedor | agents.*.sandbox.docker.securityOpt |
no |
sandbox.browser_cdp_bridge_unrestricted |
advertencia | El puente del navegador del entorno aislado está expuesto sin restricción del intervalo de origen | sandbox.browser.cdpSourceRange |
no |
sandbox.browser_container.non_loopback_publish |
crítico | El contenedor de navegador existente publica CDP en interfaces que no son local loopback | configuración de publicación del contenedor del entorno aislado del navegador | no |
sandbox.browser_container.hash_label_missing |
advertencia | El contenedor de navegador existente es anterior a las etiquetas de hash de configuración actuales | openclaw sandbox recreate --browser --all |
no |
sandbox.browser_container.hash_epoch_stale |
advertencia | El contenedor de navegador existente es anterior a la época actual de configuración del navegador | openclaw sandbox recreate --browser --all |
no |
sandbox.browser_container.docker_probe_timeout |
advertencia | Se agotó el tiempo de espera del sondeo de etiquetas de Docker para el contenedor del navegador | accesibilidad del daemon de Docker | no |
tools.exec.host_sandbox_no_sandbox_defaults |
advertencia | exec host=sandbox falla de forma cerrada cuando el entorno aislado está desactivado |
tools.exec.host, agents.defaults.sandbox.mode |
no |
tools.exec.host_sandbox_no_sandbox_agents |
advertencia | exec host=sandbox por agente falla de forma cerrada cuando el entorno aislado está desactivado |
agents.list[].tools.exec.host, agents.list[].sandbox.mode |
no |
tools.exec.security_full_configured |
advertencia/crítico | La ejecución en el host se realiza con security="full" |
tools.exec.security, agents.list[].tools.exec.security |
no |
tools.exec.agent_skill_mcp_boundary_drift |
advertencia | Hay listas de permitidos de Skills del agente mientras la ejecución en el host puede acceder a clientes o registros MCP | agents.list[].tools.exec.*, aislamiento del entorno aislado/sistema operativo, credenciales del servidor MCP |
no |
tools.exec.fs_tools_disabled_but_exec_enabled |
warn | La política de herramientas del sistema de archivos no hace que la ejecución del shell sea de solo lectura | tools.deny, agents.list[].tools.deny, agents.*.sandbox.workspaceAccess |
no |
tools.exec.auto_allow_skills_enabled |
warn | Las aprobaciones de ejecución confían implícitamente en los binarios de Skills | archivo de aprobaciones del host | no |
tools.exec.allowlist_interpreter_without_strict_inline_eval |
warn | Las listas de permitidos de intérpretes permiten la evaluación en línea sin exigir una nueva aprobación | tools.exec.strictInlineEval, agents.list[].tools.exec.strictInlineEval, lista de permitidos de aprobaciones de ejecución |
no |
tools.exec.safe_bins_interpreter_unprofiled |
warn | Los binarios de intérpretes o entornos de ejecución en safeBins sin perfiles explícitos amplían el riesgo de ejecución |
tools.exec.safeBins, tools.exec.safeBinProfiles, agents.list[].tools.exec.* |
no |
tools.exec.safe_bins_broad_behavior |
warn | Las herramientas de comportamiento amplio en safeBins debilitan el modelo de confianza de bajo riesgo basado en el filtrado de stdin |
tools.exec.safeBins, agents.list[].tools.exec.safeBins |
no |
tools.exec.safe_bin_trusted_dirs_risky |
warn | safeBinTrustedDirs incluye directorios mutables o de riesgo |
tools.exec.safeBinTrustedDirs, agents.list[].tools.exec.safeBinTrustedDirs |
no |
tools.elevated.allowFrom.<provider>.wildcard |
critical | tools.elevated.allowFrom.<provider> incluye "*", lo que aprueba a todos los remitentes |
tools.elevated.allowFrom.<provider> |
no |
tools.elevated.allowFrom.<provider>.large |
warn | La lista de permitidos con privilegios elevados para <provider> tiene más de 25 entradas |
tools.elevated.allowFrom.<provider> |
no |
agents.claude_cli.permission_mode_overridden_by_yolo |
warn | Se ignora --permission-mode de Claude CLI porque la ejecución de OpenClaw funciona sin supervisión |
argumentos de tools.exec.security, tools.exec.ask, cliBackends.claude-cli |
no |
skills.workspace.symlink_escape |
warn | skills/**/SKILL.md del espacio de trabajo se resuelve fuera de la raíz del espacio de trabajo (desviación en la cadena de enlaces simbólicos) |
estado del sistema de archivos de skills/** del espacio de trabajo |
no |
skills.workspace.scan_truncated |
warn | El análisis de Skills del espacio de trabajo alcanzó el límite de visitas a directorios antes de finalizar | aplanar o simplificar el árbol de directorios skills/ del espacio de trabajo |
no |
plugins.extensions_no_allowlist |
warn | Los plugins se instalan sin una lista de plugins permitidos explícita | plugins.allowlist |
no |
plugins.allow_phantom_entries |
warn | plugins.allow enumera un ID sin ningún plugin instalado coincidente |
plugins.allow |
no |
plugins.installs_unpinned_npm_specs |
warn | Los registros del índice de plugins no están fijados a especificaciones inmutables de npm | metadatos de instalación de plugins | no |
plugins.installs_missing_integrity |
warn | Los registros del índice de plugins carecen de metadatos de integridad | metadatos de instalación de plugins | no |
plugins.installs_version_drift |
warn | Los registros del índice de plugins difieren de los paquetes instalados | metadatos de instalación de plugins | no |
plugins.code_safety |
warn/critical | El análisis del código de plugins encontró patrones sospechosos o peligrosos (solo con --deep) |
código del plugin/origen de instalación | no |
plugins.code_safety.entry_path |
warn | La ruta de entrada del plugin apunta a ubicaciones ocultas o dentro de node_modules |
entry del manifiesto del plugin |
no |
plugins.code_safety.entry_escape |
critical | La entrada del plugin escapa del directorio del plugin | entry del manifiesto del plugin |
no |
plugins.code_safety.manifest_parse_error |
warn | No se pudo analizar el manifiesto del plugin durante el análisis de seguridad del código | archivo de manifiesto del plugin | no |
plugins.code_safety.scan_failed |
warn | No se pudo completar el análisis del código del plugin (solo con --deep) |
ruta del plugin/entorno de análisis | no |
plugins.<pluginId>.security_audit_failed |
warn | Un recopilador de auditoría de seguridad propiedad de un plugin generó un error | recopilador de auditoría de seguridad de ese plugin | no |
skills.code_safety |
warn/critical | Los metadatos o el código del instalador de Skills contienen patrones sospechosos o peligrosos (solo con --deep) |
origen de instalación de Skills | no |
skills.code_safety.scan_failed |
warn | No se pudo completar el análisis del código de Skills (solo con --deep) |
entorno de análisis de Skills | no |
security.exposure.open_channels_with_exec |
warn/critical | Las salas compartidas o públicas pueden acceder a agentes con ejecución habilitada | channels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.list[].tools.exec.* |
no |
security.exposure.open_groups_with_elevated |
critical | Los mensajes directos o grupos abiertos junto con herramientas con privilegios elevados crean vías de inyección de prompts de gran impacto | rutas de políticas de mensajes directos de nivel superior o anidadas, anulaciones de cuenta, channels.*.groupPolicy |
no |
security.exposure.open_groups_with_runtime_or_fs |
critical/warn | Los mensajes directos o grupos abiertos pueden acceder a herramientas de comandos o archivos sin protecciones de sandbox o del espacio de trabajo | rutas de políticas de mensajes directos o grupos, tools.profile/deny, tools.fs.workspaceOnly, agents.*.sandbox.mode |
no |
security.exposure.open_groups_with_control_plane_tools |
critical | Los mensajes directos o grupos abiertos pueden acceder a las herramientas del plano de control de Gateway/Cron | rutas de políticas de mensajes directos o grupos, tools.allow, tools.alsoAllow, tools.profile, gateway, cron |
no |
security.trust_model.multi_user_heuristic |
warn | La configuración parece multiusuario, mientras que el modelo de confianza del Gateway es de asistente personal | separar los límites de confianza o reforzar el uso compartido (sandbox.mode, denegación de herramientas/delimitación del espacio de trabajo) |
no |
tools.profile_minimal_overridden |
warn | Las anulaciones del agente eluden el perfil mínimo global | agents.list[].tools.profile |
no |
plugins.tools_reachable_permissive_policy |
warn | Las herramientas de extensiones son accesibles en contextos permisivos | tools.profile + permisos/denegaciones de herramientas |
no |
models.legacy |
warn | Aún hay familias de modelos heredadas configuradas | selección de modelos | no |
models.weak_tier |
warn | Los modelos configurados están por debajo de los niveles recomendados actualmente | selección de modelos | no |
models.small_params |
critical/info | Los modelos pequeños junto con superficies de herramientas inseguras aumentan el riesgo de inyección | elección del modelo + política de sandbox/herramientas | no |
channels.<provider>.dm.open |
critical | La política de mensajes directos de <provider> es "open"; cualquiera puede enviar un mensaje directo al bot |
channels.<provider>.dmPolicy, .allowFrom |
no |
channels.<provider>.dm.open_invalid |
warn | dmPolicy="open" sin "*" en allowFrom es incoherente |
channels.<provider>.allowFrom |
no |
channels.<provider>.dm.scope_main_multiuser |
warn | Actualmente, varios remitentes de mensajes directos comparten la sesión principal | session.dmScope |
no |
channels.<provider>.allowFrom.dangerous_name_matching_enabled |
info | dangerouslyAllowNameMatching vuelve a habilitar la comparación de remitentes mediante nombres, correos electrónicos o etiquetas mutables |
deshabilitar dangerouslyAllowNameMatching y usar ID de remitente estables |
no |
channels.<provider>.account.read_only_resolution |
warn | No se pudo resolver por completo una cuenta del canal para la auditoría (falta el secreto/Gateway) | asegurarse de que los secretos referenciados puedan resolverse o ejecutar contra una instantánea activa del Gateway | no |
channels.<provider>.warning.<n> |
info/warn/critical | Advertencia de seguridad específica del proveedor, clasificada a partir de texto libre del plugin | consultar los detalles del hallazgo | no |
summary.attack_surface |
info | Resumen consolidado de la situación de autenticación, canales, herramientas y exposición | varias claves (consulte los detalles del hallazgo) | no |
Los checkIds de channels.<provider>.* y tools.elevated.allowFrom.<provider>.* se generan para cada canal/proveedor configurado, por lo que <provider> es un identificador de canal real (por ejemplo, telegram, discord) en la salida real, no una cadena literal.