‼️ Essa é uma versão resumida do post que eu gostaria de fazer. Como a vulnerabilidade foi apenas parcialmente resolvida, cortei grande parte dos detalhes e racional de como cheguei a cada resultado. No futuro, espero poder postar uma versão sem cortes.
Recentemente, fiquei sabendo que uma empresa super legal e famosa lançou um produto novo que usa IA como base. A funcionalidade básica é um chatbot que cria templates com JavaScript, TypeScript, React.js e Next.js a partir de prompts.
Como gosto dos produtos dessa empresa, resolvi dar um olhada.
Dada a descrição das funcionalidade, automaticamente pensei em LLM jailbreaking and xss. Comecei testando o LLM jailbreak e consegui realizá-lo sem muita dificuldade. Mas vou pular essa etapa, porque o foco é o 1-click session hijacking.
Ao pedir para o chatbot criar um template com apenas uma imagem, o resultado seria algo como o mostrado abaixo (layout teve o esquema de cores alterado e removi elementos que pudessem identificar a marca)
Além de podermos pedir para a IA fazer alterações de código, também conseguimos alterar o diretamente no editor a direita.
Ao testar um simples alert()
, não obtemos nenhum resultado. Apesar do alerta “*An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing.*
chamar bastante atenção 🌚.
Trocando o alert por um console.log(document.cookie)
, temos um resultado diferente. Todos os cookies sem HttpOnly são printados.
No horário que escrevo esse report, já adicionaram HttpOnly no cookie de sessão 🙏, ficando assim.
Imagem legível
Ok. Temos um self-xss, certo? Como melhoramos isso?
Que tal assim? Adicionamos um component Img que carrega de uma URL remota uma imagem 😇. Problema é que parte da URL são os cookies do usuário que vão chegar diretamente no servidor malicioso ⚰️.
Ok. Agora como transformamos isso num stored-xss para distribuir para possíveis vítimas e ter algum impacto real?
A resposta está aqui. Botão compartilhar que gera uma URL acessível para outros usuários. Algo como https://chatbot.com/UUID-1234abc-…
Porém, nem tudo são flores. Quando usamos o botão compartilhar, alterações no código feitas diretamente na aba da direita não são compartilhadas. É compartilhado apenas o código escrito pela IA.
Então, voltamos ao nosso estado original.
E hora do LLM jailbreak.
Pedindo da IA com por-favor 🙏
Agora, através dessa vulnerabilidade, inocentes usuários que clicassem em https://chatbot.com/UUID-1234abc-… teriam seus cookies vazados 😢
A requisição recebida pelo servidor do atacante teria essa cara aqui.
Imagem legível
Bem, é isso. Como perceberam, os desenvolvedores da solução já mitigaram parte da vulnerabilidade, apesar de não terem me respondido 😢. De qualquer forma, em caso de novidades, trago pelo Twitter e Bluesky. Quem sabe, no futuro trago um post mais detalhado.
Top comments (0)