Considere una aplicación (como una libreta IPython) que ejecuta un servidor HTTP, y que (¡por diseño!) permite la ejecución de código arbitrario por usuarios autenticados (este es el punto completo de IPython, Jupyter et al , y no es un error).
Claramente, es un desastre para cualquier usuario poder autenticar OTROS que el usuario con el que se ejecuta el servidor.
Esto puede hacerse asegurándose de que solo el usuario autorizado pueda proporcionar las credenciales adecuadas y asegurándose de que estas credenciales solo se proporcionen al servidor apropiado.
Me gustaría manejar esto de una forma totalmente automatizada.
La solución ideal parece ser el servidor TLS y los certificados de cliente. El problema es que esto requiere una configuración manual, incómoda. Quiero que no haya una configuración manual, solo algo que puede ejecutar el propio servidor.
Nota: el servidor se ejecuta como el mismo usuario que el cliente, por lo que tiene acceso de escritura a los directorios que utiliza el navegador del cliente para almacenar la configuración por usuario. No se está ejecutando como un usuario privilegiado, por lo que no puede modificar las reglas del cortafuegos.
Una soluciónperfecta sería una forma de imponer un certificado de servidor específico y proporcionar un certificado de cliente específico del servidor, todo controlado (externamente) por el proceso del servidor (que es solo un programa de línea de comandos que ejecuta un servidor HTTPS).
No, el servidor no puede ejecutarse como un usuario sin privilegios. Realmente es un IDE que utiliza el navegador como una GUI. necesita para poder ejecutar código arbitrario con los privilegios del usuario que invoca. De ahí la necesidad de una autenticación absolutamente segura.
Sí, puedo rechazar conexiones que no sean de 127.0.0.1
. Esto no ayuda contra los atacantes locales de otros usuarios en la misma máquina.
¿Es esto posible o necesitaré insertar un navegador? No creo que Chromium Embedded Framework ayudaría, ya que no controla el control de la confianza del certificado TLS.