PruvaGuías

Seguridad

Las 13 reglas que impone la base de datos, la protección de la demo y cómo se comprueban las solicitudes salientes y las redirecciones.

Las aseguradoras ponen precio a partir de los números de Pruva, así que las reglas de acceso no pueden depender de que la aplicación se porte bien. Cada regla de abajo se impone en Postgres con seguridad a nivel de fila, concesiones sobre columnas o triggers. Cada una tiene una prueba en la suite de RLS que inicia sesión con el rol correspondiente y comprueba que la acción prohibida falla.

Las 13 reglas

  1. Solo la tienda cambia lo que un espacio de trabajo ha pagado. El nivel, el estado y el fin del periodo de una habilitación solo los puede escribir el rol de servicio de la tienda. Un propietario que intenta poner un módulo en active recibe un error.
  2. Los módulos nuevos empiezan bloqueados, y un módulo bloqueado no se puede activar. Las habilitaciones valen locked de forma predeterminada. Un propietario no puede activar un módulo bloqueado, por ejemplo Documentos en la demo.
  3. Las lecturas solo las escribe el servicio. Los datos de sensores, las puntuaciones de riesgo, las emisiones, las calificaciones CII y las pólizas no tienen derechos de inserción, actualización ni borrado para los usuarios que han iniciado sesión. Ni siquiera el propietario puede cambiarlos.
  4. Las decisiones de prima necesitan publish, y quien revisa queda fijado. Aceptar o rechazar un ajuste de prima necesita publish en Seguro conectado. La base de datos fija a quien revisa como la persona que hace el cambio; un revisor falsificado se sobrescribe.
  5. Avisar a la tripulación necesita publish, y los agentes nunca pueden hacerlo. Marcar una alerta como tripulación avisada necesita publish en Mantenimiento predictivo. Los agentes son rechazados aunque alguien haya intentado concederlo.
  6. Los valores del modelo en la alerta son de solo lectura. Los usuarios pueden actualizar el estado y la nota de una alerta. La gravedad, la probabilidad y la ventana solo las escribe el modelo.
  7. Sin acceso no hay filas. Un módulo bloqueado o apagado, o un nivel none, devuelve cero filas de cada tabla de ese módulo. El suscriptor lee cero alertas. Todo el mundo lee cero documentos mientras Documentos está bloqueado.
  8. El suscriptor solo ve los buques compartidos. En la demo son 6 de 18. Véase Compartir buques.
  9. Las notificaciones no se pueden reescribir. Los usuarios solo pueden marcar una notificación como leída. Cambiar su título, su texto o su enlace, por ejemplo a una página de phishing, falla.
  10. Las entradas de auditoría solo se escriben en su propio nombre. Una entrada debe nombrar al usuario que ha iniciado sesión como actor. Escribir una en nombre de un agente o de otra persona falla.
  11. Los agentes nunca tienen publish, y los miembros no pueden cambiar el acceso. Conceder publish a un agente falla. Solo los propietarios y los administradores pueden cambiar los niveles de acceso.
  12. La presentación de un informe necesita publish y queda fijada. Presentar un informe necesita publish en Libro de emisiones. La base de datos registra quién lo presentó y cuándo.
  13. Solo los propietarios y los administradores cambian las conexiones. Las personas eligen si un conector está activo, la cuenta y un extremo https. El estado, la última sincronización y el texto del problema vienen solo del servicio de sincronización, así que una conexión rota no se puede marcar como sana a mano.

Modo demo

  • Sin solicitudes externas. En el modo demo la aplicación lee datos generados y no llama a ningún servicio externo. Las pruebas de extremo a extremo bloquean las solicitudes a terceros y fallan si se intenta alguna.
  • Rechazado en producción. Si DEMO_MODE=true y NODE_ENV=production, la aplicación se detiene al arrancar con un error. Una demo pública sin datos reales debe definir ALLOW_DEMO_IN_PROD=1 a propósito.
  • Visible. Un aviso en cada página dice que es una demo, y cada botón que enviaría, publicaría o gastaría muestra un aviso en su lugar.

Solicitudes salientes

Cualquier URL que introduce un usuario, como un webhook de pasarela o la dirección del portal de la aseguradora, pasa por la guarda de URL antes de llamarla. Permite:

  • solo https, en el puerto predeterminado,
  • sin nombre de usuario ni contraseña en la URL,
  • sin localhost, .local, .internal ni nombres de host de una sola etiqueta,
  • sin direcciones IP en rangos privados o reservados (IPv4 e IPv6).

Quien llama también comprueba la dirección resuelta justo antes de conectar, así que un nombre de host que después apunta a una dirección privada se rechaza.

Redirecciones seguras

Después del inicio de sesión, Pruva solo redirige a una ruta del mismo sitio. Un valor de next como //evil.example, una URL completa, un truco con barra invertida o un carácter de control vuelve a /app.

El mensaje de la tienda

El sitio firma cada pago con HMAC-SHA256 y un secreto compartido. La aplicación rechaza una firma incorrecta o un mensaje de más de 5 minutos. En producción el sitio no firmará con el secreto de demo integrado. Véase Habilitaciones.

Informar de un problema

Esta es una versión privada. Informe de los problemas de seguridad directamente al equipo de Pruva, no en un canal público.

En esta página