- Complete README.es.md (full Spanish translation of README) - Add CONTRIBUTING.es.md (Spanish contributing guide) - Add SECURITY.es.md (Spanish security policy) - Fix remaining English strings in locales/es.yaml (resume Matrix section) - Add Spanish badge to README.md All 47 i18n tests pass, including catalog key parity and placeholder parity. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
18 KiB
Política de Seguridad de Hermes Agent
Este documento describe el modelo de confianza de Hermes Agent, identifica el único límite de seguridad que el proyecto trata como estructural y define el alcance para los informes de vulnerabilidades.
1. Reportar una Vulnerabilidad
Reporta de forma privada a través de GitHub Security Advisories o security@nousresearch.com. No abras issues públicos para vulnerabilidades de seguridad. Hermes Agent no opera un programa de recompensas por errores.
Un informe útil incluye:
- Una descripción concisa y evaluación de severidad.
- El componente afectado, identificado por ruta de archivo y rango de líneas
(ej.
path/to/file.py:120-145). - Detalles del entorno (
hermes version, SHA del commit, SO, versión de Python). - Una reproducción contra
maino el último release. - Una declaración de qué límite de confianza del §2 se cruza.
Por favor lee el §2 y el §3 antes de enviar. Los informes que demuestren límites de una heurística en proceso que esta política no trate como un límite serán cerrados como fuera de alcance bajo el §3 — pero consulta el §3.2: siguen siendo bienvenidos como issues o pull requests regulares, simplemente no a través del canal de seguridad privado.
2. Modelo de Confianza
Hermes Agent es un agente personal de un solo inquilino. Su postura es por capas, y las capas no tienen el mismo peso. Los reportadores y operadores deben razonar sobre ellas en los mismos términos.
2.1 Definiciones
- Proceso del agente. El intérprete Python que ejecuta Hermes Agent, incluyendo cualquier módulo Python que haya cargado (habilidades, plugins, manejadores de hooks).
- Backend de terminal. Un objetivo de ejecución conectado para la
herramienta
terminal(). El predeterminado ejecuta comandos directamente en el host. Otros backends ejecutan comandos dentro de un contenedor, sandbox en la nube o host remoto. - Superficie de entrada. Cualquier canal a través del cual el contenido entra en el contexto del agente: entrada del operador, fetches web, email, mensajes del gateway, lecturas de archivos, respuestas del servidor MCP, resultados de herramientas.
- Envolvente de confianza. El conjunto de recursos a los que un operador ha otorgado implícitamente acceso a Hermes Agent al ejecutarlo — típicamente, todo lo que la propia cuenta de usuario del operador puede alcanzar en el host.
- Postura. Una declaración explícita en la documentación o código de Hermes Agent sobre cómo una capa consumidora (adaptador, UI, escritor de archivos, shell) debe tratar la salida del agente — ej. "el dashboard renderiza la salida del agente como HTML inerte."
2.2 El Límite: Aislamiento a Nivel de SO
El único límite de seguridad contra un LLM adversario es el sistema operativo. Nada dentro del proceso del agente constituye contención — ni la puerta de aprobación, ni la redacción de salida, ni ningún escáner de patrones, ni ninguna lista de herramientas permitidas. Cualquier componente dentro del proceso que filtre la salida del LLM es una heurística operando sobre una cadena influenciada por el atacante, y esta política lo trata como tal.
Hermes Agent admite dos posturas de aislamiento a nivel de SO. Abordan diferentes amenazas y un operador debe elegir deliberadamente.
Aislamiento del backend de terminal
Un backend de terminal no predeterminado ejecuta comandos de shell emitidos por el LLM
dentro de un contenedor, host remoto o sandbox en la nube. Las herramientas de archivos
(read_file, write_file, patch) también se ejecutan a través de este backend,
ya que están implementadas sobre el contrato del shell — no pueden
alcanzar rutas que el backend no exponga.
Lo que confina: todo lo que el agente hace emitiendo operaciones de shell o de archivos. Lo que no confina: todo lo que el agente hace en su propio proceso Python. Eso incluye la herramienta de ejecución de código (lanzada como subproceso del host), subprocesos MCP (lanzados desde el entorno del agente), carga de plugins, despacho de hooks y carga de habilidades (todos importados en el intérprete del agente).
El aislamiento del backend de terminal es la postura correcta cuando la preocupación es que el LLM emita comandos de shell destructivos o escrituras de herramientas de archivo no deseadas, y el operador es de confianza.
Envoltura del proceso completo
La envoltura del proceso completo ejecuta todo el árbol de procesos del agente dentro de un sandbox. Cada ruta de código — shell, ejecución de código, MCP, herramientas de archivos, plugins, hooks, carga de habilidades — está sujeta a la misma política de sistema de archivos, red, proceso e (donde sea aplicable) inferencia.
Hermes Agent admite esto de dos maneras:
- La propia imagen Docker de Hermes Agent y la configuración de Compose. Más liviana; el agente se ejecuta en un contenedor estándar con montajes y política de red configurados por el operador.
- NVIDIA OpenShell. OpenShell proporciona sandboxes por sesión con política declarativa a través de capas de sistema de archivos, red (egreso L7), proceso/syscall e enrutamiento de inferencia. Las políticas de red e inferencia son recargables en caliente. Las credenciales se inyectan desde un almacén de Proveedor y nunca tocan el sistema de archivos del sandbox.
Bajo una envoltura de proceso completo, las heurísticas en proceso de Hermes Agent (§2.4) funcionan como prevención de accidentes en capas sobre un límite real. Esta es la postura soportada cuando el agente ingiere contenido de superficies que el operador no controla — la web abierta, email entrante, canales de múltiples usuarios, servidores MCP no confiables — y para despliegues en producción o compartidos.
Los operadores que ejecuten el backend local predeterminado con superficies de entrada no confiables, o que ejecuten un sandbox de backend de terminal esperando que contenga rutas de código que no pasan por el shell, están operando fuera de la postura de seguridad soportada.
2.3 Alcance de Credenciales
Hermes Agent filtra el entorno que pasa a sus componentes en proceso de menor confianza: subprocesos de shell, subprocesos MCP y el proceso hijo de ejecución de código. Las credenciales como las claves API del proveedor y los tokens del gateway se eliminan por defecto; las variables declaradas explícitamente por el operador o por una habilidad cargada se pasan.
Esto reduce la exfiltración casual. No es contención. Cualquier componente que se ejecute dentro del proceso del agente (habilidades, plugins, manejadores de hooks) puede leer lo que el agente mismo puede leer, incluidas las credenciales en memoria. La mitigación contra un componente en proceso comprometido es la revisión del operador antes de instalar (§2.4, §2.5), no el saneamiento del entorno.
2.4 Heurísticas en Proceso
Los siguientes componentes filtran o advierten sobre el comportamiento del LLM. Son útiles. No son límites.
- La puerta de aprobación detecta patrones de shell destructivos comunes y le pide al operador confirmación antes de la ejecución. El shell es Turing- completo; una lista de denegación sobre cadenas de shell es estructuralmente incompleta. La puerta detecta errores en modo cooperativo, no salidas adversariales.
- La redacción de salida elimina patrones similares a secretos de la visualización. Un productor de salida motivado la evitará.
- Skills Guard escanea el contenido de habilidades instalables en busca de patrones de inyección. Es una ayuda de revisión; el límite para habilidades de terceros es la revisión del operador antes de instalar. Revisar una habilidad significa leer su código Python y scripts, no solo su descripción SKILL.md — las habilidades ejecutan Python arbitrario en el momento de importación.
2.5 Modelo de Confianza de Plugins
Los plugins se cargan en el proceso del agente y se ejecutan con todos los privilegios del agente: pueden leer las mismas credenciales, llamar a las mismas herramientas, registrar los mismos hooks e importar los mismos módulos que cualquier cosa incluida en el árbol. El límite para los plugins de terceros es la revisión del operador antes de instalar — la misma regla que las habilidades (§2.4), mencionado por separado porque los plugins son arquitectónicamente más pesados y a menudo incluyen sus propios servicios en segundo plano, oyentes de red y dependencias.
Un plugin malicioso o con errores no es una vulnerabilidad en Hermes Agent en sí mismo. Los errores en la ruta de instalación o descubrimiento de plugins de Hermes Agent que impidan al operador ver lo que está instalando están en alcance bajo el §3.1.
2.6 Superficies Externas
Una superficie externa es cualquier canal fuera del proceso del agente local a través del cual un llamador puede despachar trabajo del agente, resolver aprobaciones o recibir salida del agente. Cada superficie tiene su propio modelo de autorización, pero las reglas a continuación se aplican uniformemente.
Superficies en Hermes Agent:
- Adaptadores de plataforma del gateway. Integraciones de mensajería en
gateway/platforms/(Telegram, Discord, Slack, email, SMS, etc.) y adaptadores análogos incluidos como plugins. - Superficies HTTP expuestas en red. El adaptador del servidor API, el plugin del dashboard, los endpoints HTTP del plugin kanban, y cualquier otro plugin que vincule un socket de escucha.
- Adaptadores de Editor / IDE. El adaptador ACP (
acp_adapter/) e integraciones equivalentes que aceptan solicitudes de un proceso cliente local. - El gateway TUI (
tui_gateway/). Backend JSON-RPC para la UI de terminal Ink, alcanzado a través de IPC local.
Reglas uniformes:
- Se requiere autorización en cada superficie que cruce un límite de confianza. Para superficies de mensajería y HTTP en red, el límite es la red: la autorización significa una lista de llamadores permitidos configurada por el operador. Para superficies de editor e IPC local (ACP, gateway TUI), el límite es la cuenta de usuario del host: la autorización significa depender del control de acceso a nivel de SO (permisos de archivos, vinculaciones solo a loopback) y no exponer la superficie más allá del usuario local sin una capa de autenticación de red explícita.
- Se requiere una lista de permitidos para cada adaptador de red habilitado. Los adaptadores deben rechazar despachar trabajo del agente, resolver aprobaciones o transmitir salida hasta que se establezca una lista de permitidos. Las rutas de código que fallan de forma abierta cuando no hay lista de permitidos configurada son errores de código en alcance bajo el §3.1.
- Los identificadores de sesión son manejadores de enrutamiento, no límites de autorización. Conocer el ID de sesión de otro llamador no otorga acceso a sus aprobaciones o salida; la autorización siempre se vuelve a verificar contra la lista de permitidos (o equivalente a nivel de SO).
- Dentro del conjunto autorizado, todos los llamadores tienen la misma confianza. Hermes Agent no modela capacidades por llamador dentro de un único adaptador. Los operadores que necesiten separación de capacidades deben ejecutar instancias de agente separadas con listas de permitidos separadas.
- Vincular una superficie solo local a una interfaz no-loopback es una decisión de
operador de emergencia (§3.2). El dashboard y otros servidores HTTP de plugins
son predeterminados a loopback; exponerlos a través de
--host 0.0.0.0o equivalente hace que el fortalecimiento de exposición pública (§4) sea responsabilidad del operador.
3. Alcance
3.1 En Alcance
- Escape de una postura de aislamiento a nivel de SO declarada (§2.2): una ruta de código controlada por el atacante alcanzando estado que la postura afirmó confinar.
- Acceso no autorizado a superficie externa: un llamador fuera del conjunto de autorización configurado (lista de permitidos, o equivalente a nivel de SO para superficies de IPC local) despachando trabajo, recibiendo salida o resolviendo aprobaciones (§2.6).
- Exfiltración de credenciales: filtración de credenciales del operador o material de autorización de sesión a un destino fuera del envolvente de confianza, a través de un mecanismo que debería haberlo prevenido (error de saneamiento de entorno, registro del adaptador, error de transporte que vacía credenciales a un upstream, etc.).
- Violaciones de la documentación del modelo de confianza: código que se comporta contrariamente a lo que esta política, la propia documentación de Hermes Agent o las expectativas razonables del operador predecirían — incluyendo casos donde Hermes Agent ha documentado una postura sobre cómo su salida debe ser renderizada por una capa consumidora (dashboard, adaptador de gateway, escritor de archivos, shell) y una ruta de código rompe esa postura.
3.2 Fuera de Alcance
"Fuera de alcance" aquí significa "no es una vulnerabilidad de seguridad bajo esta política." No significa "no vale la pena reportarlo." Las mejoras a las heurísticas en proceso, ideas de fortalecimiento y correcciones de UX son bienvenidas como issues o pull requests regulares — la puerta de aprobación siempre puede detectar más patrones, la redacción puede volverse más inteligente, el comportamiento del adaptador puede apretarse siempre. Estos elementos simplemente no van a través del canal de divulgación privada y no reciben avisos.
- Bypasses de heurísticas en proceso (§2.4) — bypasses de regex de la puerta de aprobación, bypasses de redacción, bypasses de patrones de Skills Guard, e informes análogos contra heurísticas futuras. Estos componentes no son límites; vencerlos no es una vulnerabilidad bajo esta política.
- Inyección de prompts per se. Hacer que el LLM emita salida inusual — a través de contenido inyectado, alucinación, artefactos de entrenamiento, o cualquier otra causa — no es en sí mismo una vulnerabilidad. "Logré inyección de prompts" sin un resultado encadenado del §3.1 no es un informe procesable bajo esta política.
- Consecuencias de una postura de aislamiento elegida. Los informes de que una ruta de código que opera dentro del alcance de su postura puede hacer lo que esa postura permite no son vulnerabilidades. Ejemplos: herramientas de shell o archivos que alcanzan estado del host bajo el backend local; subprocesos de ejecución de código o MCP que alcanzan estado del host bajo aislamiento de backend de terminal que solo sandboxea el shell; informes cuyas precondiciones requieren acceso de escritura preexistente a archivos de configuración o credenciales propiedad del operador (esos ya están dentro del envolvente de confianza).
- Configuraciones documentadas de emergencia. Compensaciones seleccionadas por el operador
que deshabilitan explícitamente protecciones:
--insecurey flags equivalentes en el dashboard u otros componentes, aprobaciones deshabilitadas, backend local en producción, perfiles de desarrollo que evitan la seguridad de hermes-home, y similares. Los informes contra esas configuraciones no son vulnerabilidades — eso es el trabajo del flag. - Habilidades y plugins contribuidos por la comunidad. Las habilidades de terceros (incluyendo el repositorio de habilidades de la comunidad) y los plugins de terceros están en la superficie de revisión del operador, no en la superficie de confianza de Hermes Agent (§2.4, §2.5). Una habilidad o plugin que haga algo malicioso es el modo de falla esperado de uno que no fue revisado, no una vulnerabilidad en Hermes Agent. Los errores en la ruta de instalación de habilidades o plugins de Hermes Agent que impidan al operador ver lo que está instalando están en alcance bajo el §3.1.
- Exposición pública sin controles externos. Exponer el gateway o la API a la internet pública sin autenticación, VPN o firewall.
- Restricciones de lectura/escritura a nivel de herramienta en una postura donde el shell está permitido. Si una ruta es alcanzable a través de la herramienta terminal, los informes de que otras herramientas de archivos pueden alcanzarla no añaden nada.
4. Fortalecimiento del Despliegue
La decisión de fortalecimiento más importante es hacer coincidir el aislamiento (§2.2) con la confianza del contenido que el agente ingerirá. Más allá de eso:
- Ejecuta el agente como usuario no-root. La imagen de contenedor proporcionada hace esto por defecto.
- Mantén las credenciales en el archivo de credenciales del operador con permisos estrictos, nunca en la configuración principal, nunca en control de versiones. Bajo OpenShell, usa el almacén de Proveedores en lugar de un archivo de credenciales en disco.
- No expongas el gateway o la API a la internet pública sin VPN, Tailscale o protección de firewall. Bajo OpenShell, usa la capa de política de red para restringir el egreso.
- Configura una lista de llamadores permitidos para cada adaptador de red expuesto que habilites (§2.6).
- Revisa las habilidades y plugins de terceros antes de instalar (§2.4, §2.5). Para las habilidades, esto significa leer el Python y los scripts, no solo SKILL.md. Los informes de Skills Guard y el registro de auditoría de instalación son la superficie de revisión.
- Hermes Agent incluye guardias de cadena de suministro para lanzamientos de servidores
MCP y para cambios de dependencias / paquetes incluidos en CI; consulta
CONTRIBUTING.es.mdpara más detalles.
5. Divulgación
- Ventana de divulgación coordinada: 90 días desde el informe, o hasta que se publique una corrección, lo que ocurra primero.
- Canal: el hilo GHSA o correspondencia por email con security@nousresearch.com.
- Crédito: los reportadores reciben crédito en las notas de versión a menos que se solicite anonimato.