El riesgo de las APIs de Ollama abiertas
Traducido del inglés. Lee el original en English.
El problema
Ollama es un servicio de API que corre en tu propia máquina para que puedas usar modelos de IA sin depender de la nube de otra persona. Escucha en el puerto 11434 y responde en http://localhost:11434.
El problema es que Ollama no trae autenticación. Eso no es una vulnerabilidad por sí solo pero se convierte en una en el momento en que el puerto es alcanzable desde internet. Quien lo encuentre puede usar tus modelos y tu hardware sin preguntar.
Qué puede salir mal
Sin autenticación y con el puerto abierto, un atacante puede hacer varias cosas.
- Hablar con tus modelos de IA
- Descargar los modelos que tienes en la máquina
- Lanzar tareas en tu GPU y tu CPU
Si corres Ollama en una máquina alquilada la factura llega igual hayas usado el servicio o no. Lo usó otra persona.
Cómo lo encontré
El comando ollama serve te dice que el servicio ya está corriendo en cuanto Ollama está instalado y activo. Así que revisé cuántos de ellos eran alcanzables desde internet con FOFA que es un motor de búsqueda de ciberespacio.
Busqué máquinas con el puerto 11434 expuesto usando la consulta "Ollama is running" && port="11434". Esa firma funciona porque la raíz de una instalación de Ollama devuelve exactamente ese texto así que sirve para encontrar instancias vivas.
La búsqueda devolvió 65.766 hosts expuestos.
- El puerto 11434 estaba alcanzable en todas
- Podía leer modelos y mandar peticiones a sus GPUs
- Muchas eran hardware caro y el dueño no tenía idea
Cómo proteger tu servicio de Ollama
Si usas Ollama hay tres cosas que puedes hacer hoy.
1. Lista blanca de IPs
Usa un firewall y deja pasar solo las IPs en las que confías.
2. Ponle autenticación delante
Coloca un proxy delante que pida un token antes de reenviar cualquier cosa.
3. Cierra el puerto público
Ata el servicio a 127.0.0.1 para que el puerto no sea alcanzable desde fuera de la máquina.
Conclusión
Esto no va contra Ollama. Trae un servicio local y ese es el comportamiento correcto por defecto. El problema empieza cuando un servicio local termina en una IP pública y nadie lo revisó. Veinte minutos con un firewall son toda la solución.