# Webui Csrf Origin

> Fix CSRF origin mismatch when Hermes WebUI is proxied through NaN.builders or other reverse proxies.

- Skill: `ntizar/webui-csrf-origin` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ntizar/webui-csrf-origin`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ntizar/webui-csrf-origin/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ntizar (https://skillmd.com/u/ntizar)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ntizar/webui-csrf-origin

---


# WebUI CSRF Origin Mismatch

## Cuándo aplicar

Si el WebUI de Hermes (puerto 8787) funciona por Telegram pero da **server error / 500 / "Cross-origin mismatch"** desde la web de NaN.builders (`https://webui-ntizar-ntizar.apps.nan.builders/`), el problema es CSRF.

## Causa

El WebUI valida `Origin`/`Referer` contra `Host` en cada POST. Cuando NaN.builders hace proxy, el Origin del navegador es `https://webui-ntizar-ntizar.apps.nan.builders` pero el Host interno del contenedor es diferente → el WebUI rechaza la petición.

## Diagnóstico

```bash
# Verificar si HERMES_WEBUI_ALLOWED_ORIGINS está configurado
cat /proc/199/environ 2>/dev/null | tr '\0' '\n' | grep -i ALLOWED_ORIGINS
# Si no devuelve nada → ese es el problema
```

## Solución

```bash
# Añadir la variable de entorno al contenedor
# En Kubernetes, actualizar el deployment con:
kubectl set env deployment/ntizar-agent \
  HERMES_WEBUI_ALLOWED_ORIGINS=https://webui-ntizar-ntizar.apps.nan.builders

# O editar el deployment directamente:
kubectl edit deployment ntizar-agent
# Añadir en spec.template.spec.containers[0].env:
# - name: HERMES_WEBUI_ALLOWED_ORIGINS
#   value: "https://webui-ntizar-ntizar.apps.nan.builders"
```

Después de cambiar la variable, el contenedor se reinicia automáticamente (rolling update).

## Notas

- El valor debe incluir el esquema (`https://`), no solo el dominio.
- Si se usan múltiples dominios, separar por comas: `https://a.com,https://b.com`.
- El WebUI también respeta `X-Forwarded-Host` y `X-Real-Host` como fallback para proxies reverso.
- Esta protección existe para prevenir CSRF en despliegues públicos.

