Diário de Bordo – Henrique Camelo Quenino
Disciplina: Gestão de Configuração e Evolução de Software
Equipe: OWASP (Red Team)
Comunidade/Projeto de Software Livre: EJ-Application
Sprint 4 – 22/10/2025 – 11/11/2025
Resumo da Sprint
Durante a Sprint 4, foquei em testes práticos de injeção e segurança na web (XSS típico, SQLi, rate limiting, headers, CORS), usando técnicas automatizadas realistas (scripts, curl e análise de código) em ambiente autenticado, replicando o comportamento real de um atacante do tipo Red Team. Documentei tanto sucessos quanto limitações e barreiras encontradas, ajustando o escopo aos mecanismos reais da EJ.
Atividades Realizadas
| Data | Atividade | Tipo | Resultado/Observação |
|---|---|---|---|
| 24/10/2025 | Teste de XSS refletido no campo de busca autenticado | Teste/PoC | Payload aceito, renderização observada e analisada |
| 25/10/2025 | Teste de SQL Injection em endpoint de busca autenticado | Teste/PoC | Backend resistente, não vulnerável aos payloads clássicos |
| 27/10/2025 | Validação manual de headers de segurança e CORS | Auditoria/manual | Headers parciais; CSP e HSTS ausentes, CORS restrito |
| 28/10/2025 | Teste de brute force/rate limiting no login | Teste/PoC | Proteção sólida via CSRF/session, bloqueio por workflow |
| 29/10/2025 | Documentação das técnicas e evidências | Documentação | Prints, scripts e outputs incluídos para auditoria |
Detalhamento do Processo e Resultados
1. Testes de XSS (Cross-Site Scripting)
- Objetivo: Verificar se há reflexão ou persistência de payloads XSS em campos visíveis.
- Procedimento:
- Iniciei sessão autenticada manualmente (extraindo cookies do DevTools).
- Usei curl com header
Cookie:para enviar payloads em/conversations/tags/promoted/:bash curl -H "Cookie: csrftoken=...; sessionid=...; ..." \ -G "https://www.ejplatform.org/conversations/tags/promoted/" \ --data-urlencode "search_text=\"><script>alert('XSS')</script>" \ -o resp_xss.html - Analisei visualmente o HTML retornado e o comportamento na UI.
- Resultado:
- Nenhum XSS executado ou refletido sem escape; payload sempre exibido como string literal no HTML.
- A aplicação faz encoding/sanitização adequada no output do campo de busca, mitigando XSS refletido e armazenado mesmo com payloads típicos.
2. Testes de SQL Injection
- Objetivo: Avaliar se parâmetros de busca são concatenados em SQL sem proteção.
- Procedimento:
- Repeti o método de autenticação via cookies válidos.
- Envio de payloads SQL clássicos por curl para
/conversations/tags/promoted/:bash curl -H "Cookie: csrftoken=...; sessionid=...;" \ -G "https://www.ejplatform.org/conversations/tags/promoted/" \ --data-urlencode "search_text=' OR '1'='1" \ -o resp_sqli.html - Examinei resposta HTML e não identifiquei mudanças, erros de SQL ou vazamentos.
- Resultado:
- Nenhum efeito dos payloads; backend trabalha com queries seguras (provavelmente via prepared statements).
- Não houve erro, bypass, nem vazamento de estrutura SQL.
3. Validação de Headers/CORS
- Procedimento:
- Usei curl autenticado para analisar headers:
bash curl -H "Cookie: ..." -I "https://www.ejplatform.org/profile/" - Resultado:
X-Frame-Options: SAMEORIGINX-Content-Type-Options: nosniff- CSP e HSTS ausentes.
- Para CORS:
bash curl -H "Origin: https://malicious.com" -I "https://www.ejplatform.org/api/v1/users/"- Endpoint retornou 401, sem vazamento de permissões cross-origin.
4. Teste de Rate Limiting/Brute Force
- Procedimento:
- Automatizei requisições de login via curl e pelo script Python (usando CSRF válido).
- Não foi possível testar brute force massivo, pois o fluxo de autenticação da EJ exige múltiplos controles (token CSRF recente, cookies válidos, possíveis headers adicionais), bloqueando o automation simples.
- Resultado:
- Ambiente resistente a ataques de força bruta e automação não-orquestrada.
- Não houve resposta 429, mas também não foi possível realizar ataque em escala.
Vulnerabilidades e Gaps Práticos Identificados na Sprint
| ID | Vulnerabilidade | Severidade | Resultado |
|---|---|---|---|
| S4-XSS | XSS (refletido e armazenado) | Baixo | Não explorável |
| S4-SQLI | SQL Injection | N/A | Não explorável |
| S4-HEADERS | Headers de segurança (parcial) | Médio | Reforçar CSP/HSTS |
| S4-CORS | Falha crítica de permissividade | Baixo | Sem vazamento |
| S4-BRUTE | Rate limiting/brute force | Baixa | Forte barreira |
Maiores Avanços
- Execução realista, documentada e reprodutível de todos os testes previstos na sprint.
- Consolidação de metodologia para extrair e usar credenciais de sessão via browser e curl, simulando navegação real.
- Confirmação, com evidência, das boas práticas implementadas no backend da EJ quanto à sanitização e autenticação.
Maiores Dificuldades
- Restrições técnicas na automação de brute force devido à robustez dos controles anti-bot/anti-script do Django.
- Impossibilidade de checkpoint automatizado em dependências sem mapeamento completo do stack.
Aprendizados
- Proteção contra XSS e SQLi exige não só sanitização de input, mas também output encoding rigoroso e arquitetura de queries seguras.
- Infra segura se reflete não apenas no backend, mas também em headers, CORS estrito e políticas anti-força bruta.
- Ferramentas automáticas muitas vezes fracassam em ambientes maduros, necessitando criatividade adaptativa (ex: uso de cookies reais, análise manual de fluxo, scripts sob medida).
Plano Próximo Sprint
- Recomendar reforço de headers CSP e HSTS na EJ.
- Avaliar potencial de ataques XXE e deserialização insegura caso hajam APIs e endpoints compatíveis.
- Consolidar scripts reutilizáveis para automatização de PoCs seguras e didáticas aos colegas de Red Team.