OpenClawSkills
GitHub
Gateway / Operaciones • 5 min de lectura

Verificación Formal (Modelos de Seguridad)

Modelos de seguridad verificados por máquina para las rutas de mayor riesgo de OpenClaw.

Esta página rastrea los **modelos de seguridad formales** de OpenClaw (TLA+/TLC hoy; más según sea necesario).

Nota

Nota: algunos enlaces antiguos pueden referirse al nombre anterior del proyecto.

**Objetivo (estrella guía):** proporcionar un argumento verificado por máquina de que OpenClaw hace cumplir su

política de seguridad prevista (autorización, aislamiento de sesión, gating de herramientas, y

seguridad contra mala configuración), bajo supuestos explícitos.

**Lo que esto es (hoy):** un **suite de regresión de seguridad** ejecutable y dirigido por atacante:

- Cada afirmación tiene un model-check ejecutable sobre un espacio de estados finito.

- Muchas afirmaciones tienen un **modelo negativo** emparejado que produce una traza de contraejemplo para una clase de bug realista.

**Lo que esto no es (aún):** una prueba de que "OpenClaw es seguro en todos los aspectos" o que la implementación completa en TypeScript es correcta.

Tutorial.step

Dónde viven los modelos

Los modelos se mantienen en un repo separado: ''vignesh07/openclaw-formal-models''.

Tutorial.step

Advertencias importantes

- Estos son **modelos**, no la implementación completa en TypeScript. Es posible que haya deriva entre modelo y código.

- Los resultados están limitados por el espacio de estados explorado por TLC; "verde" no implica seguridad más allá de los supuestos y límites modelados.

- Algunas afirmaciones dependen de supuestos ambientales explícitos (ej., despliegue correcto, entradas de configuración correctas).

Tutorial.step

Reproduciendo resultados

Hoy, los resultados se reproducen clonando el repo de modelos localmente y ejecutando TLC (ver abajo). Una iteración futura podría ofrecer:

- Modelos ejecutados en CI con artefactos públicos (trazas de contraejemplo, logs de ejecución)

- un flujo de trabajo hospedado "ejecutar este modelo" para verificaciones pequeñas y limitadas

Para empezar:

Bash
git clone https://github.com/vignesh07/openclaw-formal-models
cd openclaw-formal-models

make '<target>'
Tutorial.step

Exposición de gateway y mala configuración de gateway abierto

**Afirmación:** vincular más allá de loopback sin auth puede hacer posible el compromiso remoto / aumenta la exposición; token/bloquea atacantes no autenticados (según los supuestos del modelo).

- Ejecuciones verdes:

- ''make gateway-exposure-v2''

- ''make gateway-exposure-v2-protected''

- Rojo (esperado):

- ''make gateway-exposure-v2-negative''

Ver también: ''docs/gateway-exposure-matrix.md'' en el repo de modelos.

Tutorial.step

Nodes.run pipeline (highest-risk capability)

**Claim:** ''nodes.run'' requires (a) node command allowlist plus declared commands and (b) live approval when configured; approvals are tokenized to prevent replay (in the model).

- Green runs:

- ''make nodes-pipeline''

- ''make approvals-token''

- Red (expected):

- ''make nodes-pipeline-negative''

- ''make approvals-token-negative''

Tutorial.step

Pairing store (DM gating)

**Claim:** pairing requests respect TTL and pending-request caps.

- Green runs:

- ''make pairing''

- ''make pairing-cap''

- Red (expected):

- ''make pairing-negative''

- ''make pairing-cap-negative''

Tutorial.step

Gating de ingreso (menciones + bypass de comando de control)

**Afirmación:** en contextos de grupo que requieren mención, un "comando de control" no autorizado no puede evitar el gating de mención.

- Verde:

- ''make ingress-gating''

- Rojo (esperado):

- ''make ingress-gating-negative''

Tutorial.step

Aislamiento de enrutamiento/clave de sesión

**Afirmación:** DMs de pares distintos no colapsan en la misma sesión a menos que estén explícitamente vinculados/configurados.

- Verde:

- ''make routing-isolation''

- Rojo (esperado):

- ''make routing-isolation-negative''

Tutorial.step

v1++: modelos acotados adicionales (concurrencia, reintentos, corrección de traza)

Estos son modelos de seguimiento que ajustan la fidelidad alrededor de modos de falla del mundo real (actualizaciones no atómicas, reintentos y fan-out de mensajes).

Tutorial.step

Concurrencia / idempotencia del almacén de emparejamiento

**Afirmación:** un almacén de emparejamiento debe hacer cumplir `MaxPending` e idempotencia incluso bajo intercalados (ej., "check-then-write" debe ser atómico / bloqueado; refresh no debe crear duplicados).

Lo que significa:

- Bajo solicitudes concurrentes, no puedes exceder `MaxPending` para un canal.

- Solicitudes/refreshes repetidos para el mismo `(channel, sender)` no deben crear filas pendientes duplicadas vivas.

- Ejecuciones verdes:

- ''make pairing-race'' (verificación de cap atómica/bloqueada)

- ''make pairing-idempotency''

- ''make pairing-refresh''

- ''make pairing-refresh-race''

- Rojo (esperado):

- ''make pairing-race-negative'' (carrera begin/commit de cap no atómica)

- ''make pairing-idempotency-negative''

- ''make pairing-refresh-negative''

- ''make pairing-refresh-race-negative''

Tutorial.step

Correlación de traza de ingreso / idempotencia

**Afirmación:** la ingesta debe preservar la correlación de traza a través del fan-out y ser idempotente bajo reintentos del proveedor.

Lo que significa:

- Cuando un evento externo se convierte en múltiples mensajes internos, cada parte mantiene la misma identidad de traza/evento.

- Los reintentos no resultan en procesamiento doble.

- Si faltan los IDs de evento del proveedor, dedupe recurre a una clave segura (ej., trace ID) para evitar descartar eventos distintos.

- Verde:

- ''make ingress-trace''

- ''make ingress-trace2''

- ''make ingress-idempotency''

- ''make ingress-dedupe-fallback''

- Rojo (esperado):

- ''make ingress-trace-negative''

- ''make ingress-trace2-negative''

- ''make ingress-idempotency-negative''

- ''make ingress-dedupe-fallback-negative''

Tutorial.step

Precedencia de dmScope de Enrutamiento + IdentityLinks

**Afirmación:** el enrutamiento debe mantener sesiones DM aisladas por defecto, y solo colapsar sesiones cuando estén explícitamente configuradas (precedencia de canal + identity links).

Lo que significa:

- Las anulaciones de dmScope específicas de canal deben ganar sobre los predeterminados globales.

- identityLinks debe colapsar solo dentro de grupos vinculados explícitos, no a través de pares no relacionados.

- Verde:

- ''make routing-precedence''

- ''make routing-identitylinks''

- Rojo (esperado):

- ''make routing-precedence-negative''

- ''make routing-identitylinks-negative''