Aplicação Bancária Vulnerável 🏦
Uma aplicação web deliberadamente vulnerável para praticar testes de segurança de aplicações Web, APIs e LLMs, revisão de código seguro e implementação de segurança em pipelines de CI/CD.
⚠️ AVISO: Esta aplicação é intencionalmente vulnerável e deve ser usada apenas para fins educacionais em ambientes isolados.

Visão Geral
Este projeto é uma aplicação bancária simples com múltiplas vulnerabilidades de segurança incorporadas. Ele foi projetado para ajudar engenheiros de segurança, desenvolvedores, estagiários, analistas de QA e profissionais de DevSecOps a aprender sobre:
- Vulnerabilidades comuns de aplicações web e APIs
- Vulnerabilidades de IA/LLM
- Práticas de codificação segura
- Automação de testes de segurança
- Implementação de DevSecOps
Recursos e Vulnerabilidades
Recursos Bancários Principais
- 🔐 Autenticação e Autorização de Usuários
- 💰 Gerenciamento de Saldo da Conta
- 💸 Transferências de Dinheiro
- 📝 Solicitações de Empréstimo
- 👤 Upload de Foto de Perfil
- 📊 Histórico de Transações
- 📈 Painel de Análise de Transações (com suporte a GraphQL)
- 🔑 Sistema de Redefinição de Senha (PIN de 3 dígitos)
- 💳 Gerenciamento de Cartões Virtuais Multi-Moeda
- 💱 Recarga de Cartão Virtual a partir do Saldo Principal em USD com conversão de moeda integrada (
USD, GBP, NGN, JPY, EUR, QAR, BTC, ETH)
- 🛒 API Pública de Pagamentos para Comerciantes para integrações de ecommerce/demo intencionalmente vulneráveis
- 📱 Sistema de Pagamento de Contas
- 🤖 Agente de Suporte ao Cliente com IA (LLM real com API DeepSeek / Modo Mock)

Vulnerabilidades Implementadas
-
Autenticação e Autorização
- Injeção de SQL no login
- Implementação fraca de JWT
- Autorização de nível de objeto quebrada (BOLA)
- Autorização de nível de propriedade de objeto quebrada (BOPLA)
- Mass Assignment e Exposição Excessiva de Dados
- Mecanismo fraco de redefinição de senha (PIN de 3 dígitos)
- Token armazenado no localStorage
- Sem invalidação de token no lado do servidor
- Sem expiração de sessão
-
Segurança de Dados
- Divulgação de informações
- Exposição de dados sensíveis
- Armazenamento de senhas em texto puro
- Pontos de injeção de SQL
- Exposição de informações de depuração
- Mensagens de erro detalhadas expostas
-
Vulnerabilidades de Transação
- Sem validação de valor
- Transferências com valores negativos possíveis
- Sem limites de transação
- Condições de corrida em transferências e atualizações de saldo
- Divulgação de informações do histórico de transações
- Sem validação em contas de destinatário
-
Operações de Arquivo
- Upload de arquivo sem restrições
- Vulnerabilidades de path traversal
- Sem validação de tipo de arquivo
- Directory traversal
- Sem limites de tamanho de arquivo
- Nomenclatura insegura de arquivos
- Server-Side Request Forgery (SSRF) via importação de imagem de perfil baseada em URL
-
Gerenciamento de Sessão
- Vulnerabilidades de token
- Sem expiração de sessão
- Chaves secretas fracas
- Exposição de tokens em URLs
-
Falhas no Lado do Cliente e do Servidor
- Cross Site Scripting (XSS)
- Cross Site Request Forgery (CSRF)
- Referências diretas inseguras a objetos
- Sem rate limiting
-
Vulnerabilidades de Cartão Virtual
- Mass Assignment em atualizações de limite do cartão
- Mass Assignment no tratamento da taxa de câmbio na recarga do cartão
- Geração previsível de números de cartão
- Armazenamento em texto puro dos detalhes do cartão
- Sem validação de limites do cartão
- BOLA em operações com cartão
- Condições de corrida em atualizações de saldo
- Divulgação de informações dos detalhes do cartão
- Sem verificação de transações
- Falta de monitoramento de atividade do cartão
- Conversão de moeda controlada pelo cliente durante a recarga do cartão
-
Vulnerabilidades de Pagamento de Contas
- Sem validação de valores de pagamento
- Injeção de SQL em consultas de cobrador
- Divulgação de informações no histórico de pagamentos
- Números de referência previsíveis
- Exposição do histórico de transações
- Sem validação em contas de cobrador
- Condições de corrida no processamento de pagamentos
- BOLA no acesso ao histórico de pagamentos
- Limites de pagamento ausentes
-
Vulnerabilidades da API de Pagamentos para Comerciantes
- Senhas de comerciante e chaves de API em texto puro
- Chaves de API retornadas nas respostas de registro e login
- Número de cartão/CVV brutos aceitos pelas APIs de pagamento do comerciante
- Consultas de comerciante e cartão propensas a injeção de SQL
- Ausência de idempotência, proteção contra replay, limites de pagamento e rate limiting
- Lacunas de autorização de nível de objeto na consulta de pagamentos do comerciante
- Motivos detalhados de recusa de pagamento e exposição de dados de depuração
- Geração previsível de código de autorização
-
Vulnerabilidades do Suporte ao Cliente com IA
- Prompt Injection (CWE-77)
- Divulgação de Informações baseada em IA (CWE-200)
- Autorização Quebrada no contexto de IA (CWE-862)
- Exposição de Informações do Sistema de IA (CWE-209)
- Validação de Entrada Insuficiente para prompts de IA (CWE-20)
- Acesso Direto ao Banco de Dados por meio de manipulação da IA
- Ataques de substituição de papel da IA
- Vulnerabilidades de injeção de contexto
- Acesso não autorizado a dados assistido por IA
- Prompts e configurações do sistema de IA expostos
-
Vulnerabilidades GraphQL
- Introspection de schema habilitada no endpoint de análise de transações
- Autenticação fraca baseada em JWT herdada pelo
/graphql
- Injeção de SQL na construção de consultas do resolver GraphQL
- Controles de profundidade/complexidade GraphQL ausentes
- Divulgação bruta de erros GraphQL
- Exposição da análise de transações por meio de consultas com escopo de administrador
Instalação e Configuração 🚀
Pré-requisitos
- Docker e Docker Compose (para configuração em contêineres)
- PostgreSQL (se executado localmente)
- Python 3.9 ou superior (para configuração local)
- Git
Opção 1: Usando Docker (Recomendado)
Usando Docker Compose (Mais Fácil)
- Clone o repositório:
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
- Inicie a aplicação:
docker-compose up -d --build
A aplicação estará disponível em http://localhost:5000
Comportamento de recuperação do contêiner
A configuração Docker inclui algumas salvaguardas operacionais para que a aplicação possa se recuperar sem intervenção manual por SSH:
web e db usam restart: unless-stopped, então o Docker os reinicia automaticamente se o processo sair.
db expõe um health check, e web aguarda o Postgres estar pronto antes de iniciar.
web executa o servidor de desenvolvimento Flask com debug=True (intencional — preserva os cenários de treinamento que têm como alvo o depurador Werkzeug).
web expõe GET /healthz para que o contêiner possa informar se a aplicação e o banco de dados estão realmente utilizáveis.
Isso mantém o comportamento intencionalmente vulnerável da aplicação intacto, tornando o ciclo de vida do contêiner mais resiliente.