Seguridad y exposición a internet
NOPAL controla máquinas reales: impresoras, láseres, CNC y, con plugins, relés. Un acceso no autorizado puede significar que alguien ponga en marcha una máquina. Esta página describe cómo está protegido hoy y qué debes hacer tú.
Lo que NOPAL hace
| Tema | Comportamiento verificado |
|---|---|
| Autenticación | Sesión por cookie firmada (itsdangerous), SameSite=Lax. Sin sesión, casi toda la API responde 401 |
| Secreto de sesión | Se genera una vez y se guarda en .session_secret, de modo que las sesiones sobreviven a un reinicio. No se incluye nunca en los respaldos |
| Contraseñas | PBKDF2-HMAC-SHA256 con sal; mínimo 8 caracteres |
| Roles | admin y operador, releídos del registro en cada petición |
| Límite de intentos de login | 5 intentos fallidos en 300 segundos y se responde 429. Se cuenta en memoria, por la dirección del cliente que NOPAL ve, y se reinicia con el servicio |
| Respaldos | Si incluyen usuarios o la clave de la IA se cifran (ver Respaldos) |
| Rutas públicas | Solo la página principal, el primer arranque, el login y el logout, más algunas rutas de integraciones externas que usan su propia autenticación. Ver la referencia |
Lo que NOPAL no hace
Léelo antes de exponer NOPAL
Ninguno de estos puntos es un defecto oculto: son límites del diseño actual.
- No usa TLS. El servicio escucha por HTTP en
0.0.0.0:8420, en todas las interfaces. Las contraseñas y la cookie viajan sin cifrar por tu red. - No hay protección CSRF con token. La mitigación es
SameSite=Laxen la cookie. - No hay CORS configurado: solo mismo origen.
/plugins-statices público. NOPAL sirve todo el directorioplugins/sin autenticación en la ruta/plugins-static. Cualquiera que alcance el puerto puede leer el código de los plugins instalados y, si existe, su carpeta.git. Los plugins no deben contener secretos.- Los plugins no están aislados. Se ejecutan dentro del proceso de NOPAL, con sus mismos privilegios. Instala solo plugins en los que confíes. Los permisos que declara un plugin en su manifiesto son informativos: no los aplica ningún mecanismo.
- La clave de API de la IA se guarda en claro en
ai_config.json, en la carpeta de NOPAL. - El límite de login puede no distinguir clientes. Cuenta por la dirección que NOPAL ve. Detrás de un proxy inverso, esa dirección puede ser la del proxy, de modo que varios usuarios compartirían el mismo contador.
- La actualización confía en
origin: descarga y ejecuta lo que ese repositorio contenga.
Recomendaciones
- No expongas NOPAL directamente a internet. Para acceder desde fuera de tu red usa una VPN o un proxy inverso con HTTPS, como Nginx o Caddy.
- Si usas un proxy inverso, bloquea en él la ruta
/plugins-static, o restríngela con autenticación. - Mantén los dispositivos en una red local de confianza. Moonraker y varias impresoras se consultan por la red local con sus propios mecanismos de acceso.
- Asigna el rol Operador a quien solo necesite operar máquinas.
- Protege el archivo de respaldo y la carpeta de NOPAL:
auth_users.jsoncontiene hashes de contraseña yai_config.jsonpuede contener una clave de API.
Reportar una vulnerabilidad
No abras un issue público. Usa la pestaña Security del repositorio de GitHub y la opción Report a vulnerability, que abre un aviso privado. El proyecto es pre-1.0 y no tiene un plazo de respuesta formal.