O vazamento do Meta Muse não foi falha de IA
Em 20 de outubro, a Meta pausou o compartilhamento de conversas do Muse, seu agente de IA, depois que a empresa de segurança Claroc encontrou cerca de 6,8 mil links de conversas acessíveis na internet. Dentro deles havia contratos com nomes e valores, planilhas e calendários internos de empresas reais.
A manchete fala de IA. A causa, não. Vale entender por quê, porque o mesmo erro aparece em qualquer projeto web, com ou sem agente.
O que aconteceu
O Muse só compartilha conversas por link. Segundo a cobertura do caso, as URLs combinavam o título da conversa com um identificador, o que deixava os endereços fáceis de descobrir por terceiros. Quem tinha o link via a conversa. E quem conseguia adivinhar o link também via.
Link secreto não é controle de acesso
Esse padrão tem nome: segurança por obscuridade. O sistema não pergunta "quem é você e você pode ver isso?". Ele só assume que ninguém vai achar o endereço. O OWASP coloca esse tipo de problema na categoria Broken Access Control, a primeira do Top 10 de aplicações web.
O agente não criou a falha. Ele só aumentou o estrago: como o Muse lê e-mail, planilha e documento para trabalhar, cada conversa compartilhada carregava pedaços desses arquivos. Um link fraco que antes expunha um bate-papo passou a expor contrato.
Como evitar no seu projeto
- Exija autenticação sempre que der. O link só funciona para quem está logado e tem permissão.
- Se o link precisar ser público, use um token aleatório de alta entropia (UUID v4 ou 128 bits gerados por um gerador seguro), nunca título, nome ou número sequencial.
- Dê validade e revogação ao link: ele expira e o dono pode desligar.
- Marque a página como
noindexpara buscadores não catalogarem. - Lembre que um link é tão sensível quanto o arquivo mais sensível que o agente leu naquela conversa.
No Supabase, a regra de acesso fica no banco, não na URL. Uma política de RLS simples já impede que alguém leia a conversa de outra pessoa, mesmo acertando o ID:
create policy "owner can read"
on shared_chats for select
using (auth.uid() = owner_id);
Com isso, adivinhar o endereço não basta. Sem a sessão do dono, a consulta volta vazia.
A lição para quem constrói agentes
Agentes vão ler cada vez mais coisas nossas. A segurança deles começa no básico de web: quem pode ver o quê tem que ser decidido por uma regra, não pela sorte de ninguém achar o link.
Fontes: Tecnoblog · IT Show · OWASP Top 10 · Supabase RLS



