SECURITY.es.md
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.
Reporta de forma privada a través de GitHub Security Advisories o [email protected]. No abras issues públicos para vulnerabilidades de seguridad. Hermes Agent no opera un programa de recompensas por errores.
Un informe útil incluye:
path/to/file.py:120-145).hermes version, SHA del commit, SO, versión de Python).main o el último release.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.
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.
terminal(). El predeterminado ejecuta comandos directamente en el host.
Otros backends ejecutan comandos dentro de un contenedor, sandbox en la nube o
host remoto.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.
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.
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:
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.
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.
Los siguientes componentes filtran o advierten sobre el comportamiento del LLM. Son útiles. No son límites.
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.
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:
gateway/platforms/ (Telegram, Discord, Slack, email, SMS, etc.)
y adaptadores análogos incluidos como plugins.acp_adapter/) e
integraciones equivalentes que aceptan solicitudes de un proceso cliente local.tui_gateway/). Backend JSON-RPC para la
UI de terminal Ink, alcanzado a través de IPC local.Reglas uniformes:
--host 0.0.0.0 o equivalente
hace que el fortalecimiento de exposición pública (§4) sea responsabilidad del operador."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.
--insecure y 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.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:
CONTRIBUTING.es.md para más detalles.