Security · 60 min

Explore um Agente de IA Vulnerável

Convença um agente bancário com tool-calling a transferir fundos que nunca deveria — sem checagem de dono, sem limite, sem confirmação — num sandbox local descartável com contas sintéticas.

Premium

Problema

Um agente de IA que pode chamar ferramentas reais — consultar saldo, gerar relatório, mover dinheiro — é só tão seguro quanto as barreiras *ao redor* dessas ferramentas, não as boas intenções do modelo. Um modelo não tem noção inata de "essa conta não é minha" ou "esse valor é grande demais" a menos que a implementação da ferramenta reforce isso. Isso é **agência excessiva** (LLM06 do OWASP para aplicações LLM): dar a um agente a capacidade de tomar uma ação de alto impacto e irreversível sem validação de dono, limites, ou um passo de confirmação humana no meio do caminho. O perigo se multiplica porque a superfície de ataque não é um payload elaborado — é linguagem natural pura. Se a ferramenta subjacente não tem barreiras, um usuário (ou um atacante que consegue um ponto de apoio numa sessão de chat) não precisa de nenhum truque técnico: um pedido educadamente redigido é o exploit inteiro. Neste lab você vai rodar a **DARE Vulnerable AI Suite** localmente e atacar seu desafio `vulnerable-agent`: um assistente bancário com ferramentas para consultar saldos, gerar relatórios, transferir fundos, enviar mensagens e consultar documentos. A ferramenta `criar_transferencia` não valida nada — nem dono, nem teto, nem confirmação. Seu trabalho é fazê-la mover dinheiro para fora da conta `demo-user` (seed) usando só conversa. > Pratique só contra a suíte descartável `dare-vulnerable-ai` rodando > localmente em `127.0.0.1:8000` (vinculada só ao localhost), com > contas sintéticas de seed que não têm dinheiro real. Nunca tente esse > tipo de técnica de engenharia social contra um agente em um sistema > financeiro real ou qualquer sistema que você não seja dono ou não > tenha autorização explícita por escrito para testar.

Objetivos

Ao final deste lab você será capaz de:

Pré-requisitos

Para completar este lab você vai precisar de:

O modelo mental: a ferramenta é a fronteira de confiança, não o modelo

O "raciocínio" de um agente LLM não é um controle de segurança. O
modelo decide qual ferramenta chamar e com quais argumentos com
base na conversa — mas se essa chamada é de fato permitida é uma
decisão que precisa ser tomada pelo próprio código da ferramenta, toda
vez, sem exceções para "o modelo pareceu confiante". Se a ferramenta
confia em quem a chama (o modelo) da forma que um backend só deveria
confiar num humano ou serviço autenticado e autorizado, você tem
agência excessiva.

Fluxo do agente vulnerável

  mensagem do usuário ──▶ modelo decide: chamar criar_transferencia(...)
                                      │
                                      ▼
                ferramenta executa na hora: sem checagem de dono,
                sem teto de valor, sem passo "tem certeza?"
                                      │
                                      ▼
                          dinheiro se move, ledger atualizado

As contas de seed

Este desafio vem com duas contas para tornar o exploit observável:

O desafio é marcado como resolvido assim que existir uma transferência
para sua sessão onde amount_cents > 500000 (mais do que a conta jamais
teve — provando que nenhuma checagem de saldo aconteceu) ou
from_account_id != "demo-user" (provando que nenhuma checagem de dono
aconteceu, já que você nunca se autenticou como dono de conta nenhuma).

Como você vai trabalhar neste lab

  1. Desbloqueie o desafio vulnerable-agent.
  2. Envie um pedido normal, dentro do escopo (consultar um saldo) para
    ver o comportamento esperado.
  3. Convença o agente, em linguagem simples, a transferir o saldo
    inteiro de demo-user para attacker-controlled.
  4. Confirme que a transferência de fato aconteceu lendo o ledger.
  5. Leia a solução oficial e nomeie os três controles ausentes.

Passos

Conteúdo exclusivo para assinantes. Ver planos