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 de alto nivel
y las instrucciones de refuerzo, véase Seguridad.
Algunas comprobaciones solo se ejecutan con openclaw security audit --deep: análisis del código
de plugins/Skills (plugins.code_safety*, skills.code_safety*) y comprobaciones mediante sondeos
del Gateway en vivo (gateway.probe_*). Todo lo demás de esta tabla se ejecuta con un
openclaw security audit básico.
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). Valores de alta relevancia que probablemente se encontrarán 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 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 | disposición del sistema de archivos del directorio de estado | no |
fs.config.perms_writable |
crítica | Otros 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 | Los archivos de configuración enlazados simbólicamente no admiten escritura y añaden otro límite de confianza | sustituirlo por un archivo de configuración normal o hacer que OPENCLAW_CONFIG_PATH apunte 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 pueden modificar el archivo incluido por la configuración | permisos del archivo incluido al que se hace referencia desde 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 se hace referencia desde openclaw.json |
sí |
fs.config_include.perms_world_readable |
crítica | Los secretos y ajustes incluidos son legibles por cualquier usuario | permisos del archivo incluido al que se hace referencia desde openclaw.json |
sí |
fs.auth_profiles.perms_writable |
crítica | Otros pueden inyectar o sustituir las credenciales de modelo almacenadas | permisos de agents/<agentId>/agent/auth-profiles.json |
sí |
fs.auth_profiles.perms_readable |
advertencia | Otros 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 pueden modificar el estado de emparejamiento o de credenciales del canal | permisos del sistema de archivos en ~/.openclaw/credentials |
sí |
fs.credentials_dir.perms_readable |
advertencia | Otros 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 pueden leer las transcripciones o los metadatos de las sesiones | permisos del almacén de sesiones | sí |
fs.log_file.perms_readable |
advertencia | Otros pueden leer registros censurados que siguen siendo confidenciales | permisos del archivo de registro del Gateway | sí |
fs.synced_dir |
advertencia | El estado o la configuración en iCloud/Dropbox/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 | Vinculación remota sin secreto compartido | gateway.bind, gateway.auth.* |
no |
gateway.loopback_no_auth |
crítica | La interfaz de bucle local servida mediante proxy inverso puede quedar sin autenticación | gateway.auth.*, configuración del proxy |
no |
gateway.trusted_proxies_missing |
advertencia | Las cabeceras del proxy inverso están presentes, 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 sustituir sessionKey |
gateway.http.allowSessionKeyOverride |
no |
gateway.tools_invoke_http.dangerous_allow |
advertencia/crítica | Vuelve a habilitar herramientas peligrosas a través de 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 de escritorio/cámara/pantalla/contactos/calendario/SMS) | gateway.nodes.commands.allow |
no |
gateway.nodes.deny_commands_ineffective |
advertencia | Las entradas de denegación con formato de patrón no coinciden con el texto del shell ni con los grupos | gateway.nodes.commands.deny |
no |
gateway.tailscale_funnel |
crítica | Exposición pública a Internet | gateway.tailscale.mode |
no |
gateway.tailscale_serve |
información | La exposición de la red de Tailscale está habilitada mediante Serve | gateway.tailscale.mode |
no |
gateway.control_ui.allowed_origins_required |
crítica | Interfaz de control fuera del bucle local sin una lista explícita de orígenes permitidos del navegador | gateway.controlUi.allowedOrigins |
no |
gateway.control_ui.allowed_origins_wildcard |
advertencia/crítica | allowedOrigins=["*"] deshabilita la lista de orígenes permitidos del navegador |
gateway.controlUi.allowedOrigins |
no |
gateway.control_ui.host_header_origin_fallback |
advertencia/crítica | Habilita el uso alternativo del origen basado en la cabecera Host (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 método alternativo 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 descifrar mediante fuerza bruta | gateway.auth.token |
no |
gateway.auth_no_rate_limit |
advertencia | La autenticación expuesta sin limitación de frecuencia aumenta el riesgo de ataques de fuerza bruta | gateway.auth.rateLimit |
no |
gateway.trusted_proxy_auth |
crítica | La identidad del proxy pasa a ser 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 IP de proxy de confianza no es segura | gateway.trustedProxies |
no |
gateway.trusted_proxy_no_user_header |
crítica | La autenticación mediante proxy de confianza no puede determinar 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 cualquier usuario autenticado del sistema ascendente | gateway.auth.trustedProxy.allowUsers |
no |
gateway.trusted_proxy_allow_loopback |
advertencia | La autenticación mediante proxy de confianza acepta fuentes de proxy de bucle local permitidas explícitamente | gateway.auth.trustedProxy.allowLoopback |
no |
gateway.probe_auth_secretref_unavailable |
advertencia | La comprobación profunda no pudo resolver las SecretRefs de autenticación en esta ruta de comando | fuente de autenticación de la comprobación profunda / disponibilidad de SecretRef | no |
gateway.probe_failed |
advertencia | La comprobación en vivo del Gateway falló (solo --deep) |
accesibilidad/autenticación del Gateway | no |
discovery.mdns_full_mode |
advertencia/crítico | El modo completo de mDNS anuncia metadatos cliPath/sshPort en la red local |
discovery.mdns.mode, gateway.bind |
no |
config.insecure_or_dangerous_flags |
advertencia | Está habilitada una marca de depuración insegura/peligrosa | clave indicada en el detalle 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 se almacena directamente en la configuración | gateway.auth.password |
no |
config.secrets.hooks_token_in_config |
advertencia | El token de portador del hook se almacena 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 | Mayor facilidad para ataques de fuerza bruta contra la entrada del hook | hooks.token |
no |
hooks.default_session_key_unset |
advertencia | Las ejecuciones del agente del hook se distribuyen en sesiones generadas por solicitud | hooks.defaultSessionKey |
no |
hooks.allowed_agent_ids_unrestricted |
advertencia/crítico | Los invocadores autenticados del hook pueden dirigir solicitudes a cualquier agente configurado | hooks.allowedAgentIds |
no |
hooks.request_session_key_enabled |
advertencia/crítico | El invocador externo puede elegir sessionKey | hooks.allowRequestSessionKey |
no |
hooks.request_session_key_prefixes_missing |
advertencia/crítico | No hay límites para los formatos de claves de sesión externas | hooks.allowedSessionKeyPrefixes |
no |
hooks.path_root |
crítico | La ruta del hook es /, lo que facilita colisiones o direccionamientos erróneos 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 del hook | no |
hooks.installs_missing_integrity |
advertencia | Los registros de instalación de hooks carecen de metadatos de integridad | metadatos de instalación del hook | no |
hooks.installs_version_drift |
advertencia | Los registros de instalación de hooks divergen de los paquetes instalados | metadatos de instalación del hook | no |
logging.redact_off |
advertencia | Los valores confidenciales se filtran a los registros/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/contraseña | gateway.auth.* |
no |
browser.remote_cdp_http |
advertencia | El CDP remoto mediante HTTP sin cifrar carece de cifrado de transporte | perfil del navegador cdpUrl |
no |
browser.remote_cdp_private_host |
advertencia | El CDP remoto apunta a un host privado/interno | perfil del navegador cdpUrl, browser.ssrfPolicy.* |
no |
sandbox.docker_config_mode_off |
advertencia | La configuración de Docker del sandbox está presente, pero inactiva | agents.*.sandbox.mode |
no |
sandbox.bind_mount_non_absolute |
advertencia | Los montajes vinculados relativos pueden resolverse de forma impredecible | agents.*.sandbox.docker.binds[] |
no |
sandbox.dangerous_bind_mount |
crítico | El montaje vinculado del sandbox 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 Docker del sandbox 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 sandbox debilita el aislamiento del contenedor | agents.*.sandbox.docker.securityOpt |
no |
sandbox.dangerous_apparmor_profile |
crítico | El perfil AppArmor del sandbox debilita el aislamiento del contenedor | agents.*.sandbox.docker.securityOpt |
no |
sandbox.browser_cdp_bridge_unrestricted |
advertencia | El puente del navegador del sandbox está expuesto sin restricción del intervalo de origen | sandbox.browser.cdpSourceRange |
no |
sandbox.browser_container.non_loopback_publish |
crítico | El contenedor del navegador existente publica CDP en interfaces que no son de bucle invertido | configuración de publicación del contenedor del sandbox del navegador | no |
sandbox.browser_container.hash_label_missing |
advertencia | El contenedor del navegador existente es anterior a las etiquetas actuales de hash de configuración | openclaw sandbox recreate --browser --all |
no |
sandbox.browser_container.hash_epoch_stale |
advertencia | El contenedor del 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 de la comprobación 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 se cierra de forma segura cuando el sandbox está desactivado |
tools.exec.host, agents.defaults.sandbox.mode |
no |
tools.exec.host_sandbox_no_sandbox_agents |
advertencia | El exec host=sandbox por agente se cierra de forma segura cuando el sandbox está desactivado |
agents.entries.*.tools.exec.host, agents.entries.*.sandbox.mode |
no |
tools.exec.security_full_configured |
advertencia/crítico | La ejecución en el host se está ejecutando con security="full" |
tools.exec.security, agents.entries.*.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/registros MCP | agents.entries.*.tools.exec.*, aislamiento del sandbox/SO, credenciales del servidor MCP |
no |
tools.exec.fs_tools_disabled_but_exec_enabled |
advertencia | La política de herramientas del sistema de archivos no hace que la ejecución del shell sea de solo lectura | tools.deny, agents.entries.*.tools.deny, agents.*.sandbox.workspaceAccess |
no |
tools.exec.auto_allow_skills_enabled |
advertencia | 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 |
advertencia | Las listas de permitidos de intérpretes permiten la evaluación en línea sin forzar una nueva aprobación | tools.exec.strictInlineEval, agents.entries.*.tools.exec.strictInlineEval, lista de permitidos de aprobaciones de ejecución |
no |
tools.exec.safe_bins_interpreter_unprofiled |
advertencia | Los binarios de intérprete/entorno de ejecución en safeBins sin perfiles explícitos amplían el riesgo de ejecución |
tools.exec.safeBins, tools.exec.safeBinProfiles, agents.entries.*.tools.exec.* |
no |
tools.exec.safe_bins_broad_behavior |
advertencia | Las herramientas de comportamiento amplio en safeBins debilitan el modelo de confianza de bajo riesgo del filtro de stdin |
tools.exec.safeBins, agents.entries.*.tools.exec.safeBins |
no |
tools.exec.safe_bin_trusted_dirs_risky |
advertencia | safeBinTrustedDirs incluye directorios mutables o de riesgo |
tools.exec.safeBinTrustedDirs, agents.entries.*.tools.exec.safeBinTrustedDirs |
no |
tools.elevated.allowFrom.<provider>.wildcard |
crítico | tools.elevated.allowFrom.<provider> incluye "*", lo que aprueba a todos los remitentes |
tools.elevated.allowFrom.<provider> |
no |
tools.elevated.allowFrom.<provider>.large |
advertencia | La lista de permitidos con privilegios elevados para <provider> tiene más de 25 entradas |
tools.elevated.allowFrom.<provider> |
no |
skills.workspace.symlink_escape |
advertencia | El espacio de trabajo skills/**/SKILL.md 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 del espacio de trabajo skills/** |
no |
skills.workspace.scan_truncated |
advertencia | El análisis de Skills del espacio de trabajo alcanzó el límite de directorios visitados antes de finalizar | aplanar o simplificar el árbol de directorios skills/ del espacio de trabajo |
no |
plugins.extensions_no_allowlist |
advertencia | Los Plugins están instalados sin una lista explícita de Plugins permitidos | plugins.allowlist |
no |
plugins.allow_phantom_entries |
advertencia | plugins.allow incluye un ID sin ningún Plugin instalado correspondiente |
plugins.allow |
no |
plugins.installs_unpinned_npm_specs |
advertencia | Los registros del índice de Plugins no están fijados a especificaciones inmutables de npm | metadatos de instalación del Plugin | no |
plugins.installs_missing_integrity |
advertencia | Los registros del índice de Plugins carecen de metadatos de integridad | metadatos de instalación del Plugin | no |
plugins.installs_version_drift |
advertencia | Los registros del índice de Plugins difieren de los paquetes instalados | metadatos de instalación del Plugin | no |
plugins.code_safety |
advertencia/crítico | El análisis del código del Plugin encontró patrones sospechosos o peligrosos (solo --deep) |
código del Plugin / origen de instalación | no |
plugins.code_safety.entry_path |
advertencia | La ruta de entrada del Plugin apunta a ubicaciones ocultas o node_modules |
entry del manifiesto del Plugin |
no |
plugins.code_safety.entry_escape |
crítico | La entrada del Plugin sale del directorio del Plugin | entry del manifiesto del Plugin |
no |
plugins.code_safety.manifest_parse_error |
advertencia | No se pudo analizar el manifiesto del Plugin durante el análisis de seguridad del código | archivo del manifiesto del Plugin | no |
plugins.code_safety.scan_failed |
advertencia | No se pudo completar el análisis del código del Plugin (solo --deep) |
ruta del Plugin / entorno de análisis | no |
plugins.<pluginId>.security_audit_failed |
advertencia | Un recopilador de auditoría de seguridad propiedad de un Plugin produjo un error | recopilador de auditoría de seguridad de ese Plugin | no |
skills.code_safety |
advertencia/crítico | Los metadatos o el código del instalador de Skills contienen patrones sospechosos o peligrosos (solo --deep) |
origen de instalación de Skills | no |
skills.code_safety.scan_failed |
advertencia | No se pudo completar el análisis del código de Skills (solo --deep) |
entorno de análisis de Skills | no |
security.exposure.open_channels_with_exec |
advertencia/crítico | Las salas compartidas o públicas pueden acceder a agentes con ejecución habilitada | channels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.entries.*.tools.exec.* |
no |
security.exposure.open_groups_with_elevated |
crítico | Los mensajes directos o grupos abiertos junto con herramientas con privilegios elevados crean vías de inyección de prompts de alto impacto | rutas de políticas de mensajes directos de nivel superior o anidadas, sobrescrituras de cuentas, channels.*.groupPolicy |
no |
security.exposure.open_groups_with_runtime_or_fs |
crítico/advertencia | 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 |
crítico | Los mensajes directos o grupos abiertos pueden acceder a las herramientas del plano de control de Gateway o 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 |
advertencia | La configuración parece ser multiusuario, mientras que el modelo de confianza de Gateway es de asistente personal | separar los límites de confianza o reforzar la seguridad para usuarios compartidos (sandbox.mode, denegación de herramientas/delimitación del espacio de trabajo) |
no |
tools.profile_minimal_overridden |
advertencia | Las sobrescrituras del agente omiten el perfil mínimo global | agents.entries.*.tools.profile |
no |
plugins.tools_reachable_permissive_policy |
advertencia | Se puede acceder a las herramientas de extensiones en contextos permisivos | tools.profile + permisos/denegaciones de herramientas |
no |
models.legacy |
advertencia | Las familias de modelos heredadas siguen configuradas | selección del modelo | no |
models.weak_tier |
advertencia | Los modelos configurados están por debajo de los niveles recomendados actualmente | selección del modelo | no |
models.small_params |
crítico/informativo | Los modelos pequeños junto con superficies de herramientas no seguras aumentan el riesgo de inyección | elección del modelo + política de sandbox/herramientas | no |
channels.<provider>.dm.open |
crítico | La política de mensajes directos de <provider> es "open"; cualquiera puede enviar mensajes directos al bot |
channels.<provider>.dmPolicy, .allowFrom |
no |
channels.<provider>.dm.open_invalid |
advertencia | dmPolicy="open" sin "*" en allowFrom es incoherente |
channels.<provider>.allowFrom |
no |
channels.<provider>.dm.scope_main_multiuser |
advertencia | Varios remitentes de mensajes directos comparten actualmente la sesión principal | session.dmScope |
no |
channels.<provider>.allowFrom.dangerous_name_matching_enabled |
informativo | dangerouslyAllowNameMatching vuelve a habilitar la asociación mutable de remitentes por nombre/correo electrónico/etiqueta |
deshabilitar dangerouslyAllowNameMatching, usar ID de remitentes estables |
no |
channels.<provider>.account.read_only_resolution |
advertencia | No se pudo resolver por completo una cuenta de canal para la auditoría (falta el secreto/Gateway) | asegurarse de que los secretos referenciados se puedan resolver o ejecutar con una instantánea de un Gateway activo | no |
channels.<provider>.warning.<n> |
informativo/advertencia/crítico | Advertencia de seguridad específica del proveedor, clasificada a partir del texto libre del Plugin | consultar los detalles del hallazgo | no |
summary.attack_surface |
informativo | Resumen consolidado del estado de autenticación, canales, herramientas y exposición | varias claves (consultar los detalles del hallazgo) | no |
channels.<provider>.* y los checkIds de tools.elevated.allowFrom.<provider>.* se
generan para cada canal/proveedor configurado, por lo que <provider> es un id de canal real
(por ejemplo, telegram, discord) en la salida real, no una cadena literal.