O risco das APIs do Ollama abertas
Traduzido do inglês. Leia o original em English.
O problema
Ollama é um serviço de API que roda na sua própria máquina para você usar modelos de IA sem depender da nuvem de outra pessoa. Ele escuta na porta 11434 e responde em http://localhost:11434.
O problema é que o Ollama não vem com autenticação. Isso não é uma vulnerabilidade sozinho mas vira uma no momento em que a porta fica alcançável pela internet. Quem encontra-la usa seus modelos e seu hardware sem pedir licença.
O que pode dar errado
Sem autenticação e com a porta aberta, um atacante consegue fazer algumas coisas.
- Conversar com seus modelos de IA
- Baixar os modelos que estão na sua máquina
- Rodar tarefas na sua GPU e na sua CPU
Se você roda Ollama numa máquina alugada a fatura chega do mesmo jeito, tenha você usado o serviço ou não. Outra pessoa usou.
Como eu encontrei isso
O comando ollama serve mostra que o serviço já está rodando assim que o Ollama está instalado e ativo. Então eu fui ver quantos deles estavam alcançáveis pela internet com o FOFA que é um motor de busca de ciberespaço.
Procurei máquinas com a porta 11434 exposta usando a consulta "Ollama is running" && port="11434". Essa assinatura funciona porque a raiz de uma instalação padrão do Ollama devolve exatamente esse texto então serve para achar instâncias vivas.
A busca devolveu 65.766 hosts expostos.
- A porta 11434 estava alcançável em todas elas
- Eu conseguia ler modelos e mandar requisições para as GPUs
- Muitas eram hardware caro e o dono não fazia ideia
Como proteger seu serviço do Ollama
Se você usa Ollama existem três coisas que dá para fazer hoje.
1. Lista de IPs permitidos
Use um firewall e deixe passar só os IPs em que você confia.
2. Coloque autenticação na frente
Ponha um proxy na frente que peça um token antes de repassar qualquer coisa.
3. Feche a porta pública
Amarre o serviço em 127.0.0.1 para a porta não ser alcançável de fora da máquina.
Conclusão
Isso não é uma crítica ao Ollama. Ele entrega um serviço local e esse é o padrão correto. O problema começa quando um serviço local termina num IP público e ninguém olhou. Vinte minutos com um firewall resolvem tudo.