«DevSecOps para Iniciantes»: Testando Pipelines CI/CD com Vulnerabilidades Reais

«DevSecOps para Iniciantes»: Testando Pipelines CI/CD com Vulnerabilidades Reais

Este artigo detalha um teste prático de um pipeline CI/CD de desenvolvimento seguro, utilizando uma aplicação React intencionalmente vulnerável para identificar falhas e validar a eficácia das ferramentas de segurança.

MundiX News·27 de junho de 2026·12 min de leitura·👁 1 views

Nos seis episódios anteriores, construímos nosso próprio pipeline de desenvolvimento seguro: configuramos máquinas virtuais, estabelecemos a infraestrutura com GitLab, Vault, Nexus, DefectDojo e Dependency-Track, criamos um pipeline CI/CD, integramos scanners de segurança e configuramos backups. A questão principal que permanece é: nosso pipeline consegue identificar vulnerabilidades reais, ou apenas exibe "checkmarks" verdes para os desenvolvedores no GitLab? Como diz o ditado antigo dos "DevSecOps Boyars": "No nosso negócio, não acreditamos em palavras – a segurança precisa ser verificada".

Portanto, hoje submeteremos nosso pipeline a um teste de fogo. Utilizaremos a aplicação vulnerável Reactvulna, a carregaremos no GitLab e a executaremos através do pipeline que construímos. Em seguida, analisaremos os resultados do escaneamento e veremos quão bem nossa infraestrutura integrada lida com a detecção de problemas de segurança. É importante estabelecer um acordo inicial: este ciclo de artigos não substitui os requisitos de metodologias sérias de desenvolvimento seguro como GOST, OWASP SAMM, BSIMM, entre outras. É, antes, um exemplo prático de como organizar um pipeline de desenvolvimento seguro de software com investimento mínimo. Tudo o que é descrito no ciclo é puramente minha experiência pessoal, os "tropeços" que tive e os resultados de longas noites debruçado sobre o teclado. Não representa a posição oficial dos meus empregadores atuais ou anteriores. Não encare este artigo como um guia para cópia cega; teste tudo em ambientes de teste, faça backups e aborde experimentos com a cabeça fria. Erros são possíveis, e não se deve ter medo de cometê-los. O importante é tirar conclusões e construir gradualmente processos mais confiáveis do que os de ontem.

Para testar o pipeline, utilizaremos o Reactvulna – uma aplicação React propositalmente vulnerável para testar ferramentas de segurança. À primeira vista, é um serviço web comum para compra de ingressos de cinema, com autenticação de usuários, catálogo de filmes, chat e outras funcionalidades familiares. No entanto, por baixo do capô, os desenvolvedores deixaram intencionalmente um conjunto de vulnerabilidades típicas, incluindo XSS, CSRF, segredos de teste no código-fonte e outros problemas de segurança comuns. Vamos analisar alguns exemplos:

  1. XSS (Cross-Site Scripting): A aplicação possui várias vulnerabilidades XSS. Uma delas está na função websocketMessageArrived. O nome do usuário (chatMessage.author.name) e o texto da mensagem (chatMessage.message) são inseridos diretamente no innerHTML do elemento <p>. O código relevante é: p.innerHTML = '<span><i>' + chatMessage.author.name + '</i></span><span>:&nbsp;</span><span>' + chatMessage.message + '</span>'. Isso permite a injeção de scripts maliciosos.
  2. CSRF (Cross-Site Request Forgery): Na função sendChatToBackend, as requisições PUT são executadas sem o uso de tokens CSRF. Se um usuário já estiver autenticado na aplicação, um atacante pode tentar forçar o navegador dele a executar tal requisição em seu nome. O trecho de código é: fetch(Constants.backendRESTUrlBase + 'messages/chat', { method: 'PUT', credentials: 'include', headers: { 'Content-Type': 'application/json', 'Cache': 'no-cache' }, body: JSON.stringify({text: text, toUser: addressee}) });.
  3. Hardcoded Secrets: No código-fonte do Reactvulna, incluí um arquivo config.js contendo chaves de API para um serviço de análise fictício. Verificaremos se o Gitleaks consegue encontrá-las.
  4. Cabeçalhos Inseguros: A configuração da aplicação não inclui Content Security Policy (CSP). Esta é uma das descobertas que nos motivou a integrar o Nuclei ao nosso pipeline.
  5. Dependências Vulneráveis: O package.json contém versões desatualizadas de bibliotecas com vulnerabilidades conhecidas. Tais problemas devem ser detectados por ferramentas de análise de dependências e geração de SBOM.
  6. Armazenamento Inseguro de Tokens: Após a autenticação bem-sucedida, o token JWT é armazenado no localStorage em vez de um cookie httpOnly. Combinado com XSS, isso permite o acesso ao token do usuário. O código em src/Login.js demonstra isso: window.localStorage.setItem('loggedIn', true); window.localStorage.setItem('loggedInUser', JSON.stringify(loginResponse));.

Se nosso pipeline de desenvolvimento seguro encontrar pelo menos uma parte desses problemas, já será um bom resultado. Se algo for perdido, ajustaremos as configurações, alteraremos as regras para o Opengrep e adicionaremos verificações customizadas no Nuclei. O mais importante é obtermos uma imagem honesta do que o pipeline vê e o que permanece em sua zona cega. Isso é inestimável para um startup que não quer ir para produção com "caravelas" sob os pés. É melhor cair uma vez em um campo de treinamento do que em um ambiente de produção. O Reactvulna é uma "caixa de areia", um "boneco de treino". Após cada grande atualização de ferramentas, é útil retestar o pipeline com ele e verificar se a qualidade da detecção de problemas mudou. Se houver progresso – ótimo. Se não – significa que ainda há algo a ser aprimorado.

Começamos clonando o repositório Reactvulna e o carregando no GitLab. Em seguida, preparamos as integrações necessárias: criamos um produto no DefectDojo e um projeto no Dependency-Track, além de adicionarmos as variáveis do GitLab DEPENDENCY_TRACK_PROJECT_DOCKER_UUID, DEPENDENCY_TRACK_PROJECT_UUID e DOJO_PRODUCT_ID. Agora, podemos executar o pipeline e verificar seu desempenho em uma aplicação real. O Gitleaks escaneará por segredos, o Opengrep buscará vulnerabilidades no código, o Trivy gerará o SBOM e o Nuclei realizará o escaneamento dinâmico da aplicação em execução. Os relatórios obtidos serão enviados automaticamente para o DefectDojo e Dependency-Track. Após a conclusão do pipeline, acessaremos o DefectDojo para ver quais descobertas foram incluídas nos relatórios finais. Em seguida, compararemos os resultados com a lista de vulnerabilidades conhecidas do Reactvulna, publicada pelos autores do projeto. Tentaremos rastrear tanto as vulnerabilidades perdidas quanto os falsos positivos. Esperamos que o pipeline de desenvolvimento seguro detecte entre 70% e 90% das vulnerabilidades inseridas. As ferramentas não são onipotentes, portanto, não esperamos um resultado de 100%. No entanto, o Gitleaks deve encontrar segredos no código sem dificuldade, o Trivy certamente chamará a atenção para dependências desatualizadas, e o Nuclei não deixará de lado problemas de segurança nos cabeçalhos.

Para começar, verificamos se o artefato construído foi carregado no Nexus. Tudo normal: o artefato está no lugar e a tag BUGS está presente. Verificamos o Dependency-Track. A importação também foi concluída com sucesso. Verificamos os resultados da análise de dependências no Dependency-Track. Como previmos, a ferramenta detectou um grande número de vulnerabilidades. Adicionalmente, podemos visualizar o grafo de dependências da aplicação. Não esquecemos do contêiner. Para a imagem Docker, o Dependency-Track também construiu com sucesso o grafo de dependências e realizou a análise de vulnerabilidades. Foram encontradas algumas vulnerabilidades no curl. Agora, verificamos quais defeitos foram encontrados nas etapas de secrets-scan, sast, iac-scan e dast. Navegamos até o DefectDojo e verificamos se um novo "Engagement" apareceu para a execução atual do pipeline. Spoiler: tudo funcionou perfeitamente. No total, os scanners coletaram 97 descobertas. Parte delas certamente serão falsos positivos, então agora é hora de comparar os resultados com a lista de vulnerabilidades conhecidas do Reactvulna e ver quão precisamente nosso pipeline funcionou. É preciso considerar que o Opengrep consegue encontrar não apenas erros no código, mas também alguns problemas de IaC e segredos. Devido a isso, parte dos defeitos pode aparecer várias vezes, mas com diferentes fontes de detecção. Para verificar os relatórios dos scanners, filtraremos a lista pelo campo Test Type com valores de Found By. Estamos interessados nos valores Semgrep JSON Report, Gitleaks Scan, Nuclei Scan e Checkov Scan. Começando com o Semgrep JSON Report, encontramos o XSS: Em seguida, encontramos o segredo de teste: Detectamos a ausência de content-security-policy na configuração: Também foi detectado um defeito no arquivo Docker: Em geral, não consegui encontrar apenas o CSRF na lista de defeitos, mas talvez eu não tenha procurado bem. Podemos considerar o teste um sucesso! Importante não é apenas quais vulnerabilidades foram detectadas, mas como o próprio pipeline funcionou. Todas as etapas foram concluídas com sucesso: compilação da aplicação, geração de SBOM, busca por segredos, análise estática, verificação de código de infraestrutura, escaneamento dinâmico, bem como a publicação dos resultados no DefectDojo, Dependency-Track e Nexus. Vale a pena prestar atenção especial à velocidade de execução. Com o conjunto completo de verificações, o pipeline concluiu o trabalho em um tempo razoável. Para os desenvolvedores, isso é tão importante quanto a qualidade da detecção de vulnerabilidades: se as verificações forem muito lentas, a equipe rapidamente as começará a perceber como um obstáculo. A figura abaixo mostra os jobs do pipeline executado e o tempo de trabalho de cada etapa. Em resumo, o pipeline passou com sucesso no teste com a aplicação vulnerável. A maioria dos problemas esperados foi detectada automaticamente, e as integrações com serviços externos funcionaram sem falhas.

Voltando ao nosso "reino de startup". Lembra-se de como tudo começou? Um jovem CEO, prazos apertados, hackers mal-intencionados à porta, vazamento de bancos de dados, usuários fugindo... E agora, vamos ver o que nós, com os "boyars" desenvolvedores, conseguimos construir. Em sete artigos, passo a passo, construímos nosso próprio pipeline de desenvolvimento seguro, utilizando ferramentas gratuitas e hardware comum. Não tínhamos assinaturas "gold", clusters na nuvem por um milhão de moedas e um exército de engenheiros DevSecOps. Viemos com VirtualBox gratuito, cinco máquinas virtuais em um PC doméstico e ferramentas de código aberto. O que alcançamos em nosso reino? Os "boyars" desenvolvedores:

  • Aprenderam a "alfabetização" da segurança.
  • Pararam de armazenar senhas e segredos no repositório – o Gitleaks os captura em tempo real.
  • Pararam de escrever código "furado" – o Opengrep destaca defeitos de segurança e funções perigosas.
  • Pararam de construir contêineres como root – o Checkov reclama do Dockerfile.
  • Pararam de implantar em produção sem verificações – o Nuclei escaneia a aplicação em tempo real.
  • Pararam de perder dependências – SBOM e Dependency-Track monitoram cada pacote.
  • Pararam de adivinhar qual imagem é de quem – o Nexus armazena tudo com tags claras (e até :bugs, se algo quebrar).
  • Pararam de se perder em relatórios – o DefectDojo coleta tudo em um só lugar e deduplica.
  • Pararam de temer falhas – backups são feitos todas as noites, mesmo que o PC esteja em modo de suspensão.

O trabalho para os desenvolvedores, é claro, aumentou. Mas não tanto a ponto de iniciar um motim. Concordamos em corrigir vulnerabilidades reais em primeiro lugar, e deixar o restante para refatoração planejada. E o que dizer do "rei"? O "rei" até recompensou os "boyars" – não com ouro, mas com novos servidores e permissão para finalmente parar de economizar cada megabyte. Mas o laboratório antigo foi mantido – para memória e para novos experimentos. No "reino" permaneceu um baú inteiro de conhecimento:

  • Como planejar um RBPO do zero.
  • Como implantar cinco máquinas virtuais e conectá-las em rede.
  • Como instalar GitLab, Nexus, Vault, DefectDojo, Dependency-Track e scanners CLI.
  • Como configurar tudo isso, conectar autenticação JWT.
  • Como escrever um pipeline multi-etapas com quatro fases e dez jobs: obter segredos do Vault, gerar SBOM, escanear código e contêineres, enviar relatórios para DefectDojo e Dependency-Track, e imagens para o Nexus.
  • Como fazer backup e não chorar se o disco falhar.
  • Como testar todo o sistema em uma aplicação vulnerável e garantir que ele funcione.

A principal lição de todo o ciclo foi bastante simples. A segurança não surge por si só. Ela precisa ser construída gradualmente, "tijolo por tijolo". Mas se for feita de forma consistente, mesmo com os materiais mais modestos, é possível construir um "terem" (uma casa tradicional russa) sólido. "A história é uma mentira, mas há uma dica nela"... E este ciclo de artigos não é uma história, mas uma realidade. Eu mesmo passei por esse caminho, cometi erros e tentei resumir minha experiência neste ciclo. Agora você poderá seguir o mesmo caminho mais rápido e com mais confiança, sem pisar nos meus "degraus". E se encontrar novos – conte sobre eles. E agora, vá, "príncipe-startup". Construa seus pipelines, proteja seu código, desenvolva seu "reino" e implemente desenvolvimento seguro onde ontem não havia tempo nem recursos para isso. Que seus pipelines sejam verdes, seus segredos – bem escondidos, e seus relatórios de escaneamento – chatos e vazios :)

Se este ciclo foi útil – compartilhe os artigos com colegas, dê "likes" e escreva comentários no Habr. O que vem a seguir? Durante o trabalho neste ciclo, me convenci de uma coisa: mesmo um pipeline aparentemente completo como este, sempre pode ser melhorado. Apesar do final desta série, ainda há muitos temas para continuação. É possível configurar notificações em mensageiros ao aparecerem novas vulnerabilidades, integrar um repositório interno de dependências ao processo de desenvolvimento, conectar novas ferramentas de análise e discutir muitos outros cenários práticos. Fim do ciclo ou início de um novo? A decisão é sua! PURP – um canal no Telegram onde a cibersegurança é revelada de ambos os lados da barricada: t.me/purp_sec – insights e informações do mundo do hacking ético e da proteção orientada a negócios por especialistas da Bastion.

🛡️⚡

Pare de pesquisar. Comece a hackear.

O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 Compartilhar & Baixar

🧰 Ferramentas recomendadas

Divulgação: alguns links são patrocinados. Podemos receber comissão se você comprar — sem custo extra para você. Só indicamos o que faz sentido para a comunidade.

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Com centenas de ferramentas pré-instaladas, a distribuição Kali Linux facilita o trabalho de os profissionais de segurança começarem a fazer testes de segurança rapidamente. No entanto, com mais de 600 ferramentas em seu arsenal, o Kali Linux também pode ser desafiador. A nova edição deste prático livro abrange as atualizações nas ferramentas e inclui uma melhor abordagem da análise forense e da engenharia reversa. Ric Messier, autor, não fica apenas no teste de segurança, mas também faz uma abordagem sobre a execução de análise forense, incluindo a análise em disco e na memória, assim como alguma análise básica de malware. • Explore as diversas ferramentas disponíveis no Kali Linux • Entenda o valor do teste de segurança e examine os tipos de teste disponíveis • Aprenda os aspectos básicos do pentest em todo o ciclo de vida do ataque • Instale o Kali Linux em vários sistemas, tanto físicos quanto virtuais • Descubra como usar diferentes ferramentas destinadas à segurança • Estruture um teste de segurança baseado nas ferramentas do Kali Linux • Estenda as ferramentas do Kali para criar técnicas de ataque avançadas • Use o Kali Linux para ajudar a criar relatórios quando o teste terminar “A abordagem concisa, clara e baseada na experiência adotada por Ric Messier para a introdução do Kali Linux e dos testes de cibersegurança é incomparável. Este livro é uma leitura excelente e acessível para iniciantes e um recurso valioso para qualquer pessoa.” —Alexander Arlt, Consultor sênior de segurança, Google

Ver na Amazon
Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Compatível com portas USB-C e USB-A, ideal para ampliar a conectividade de dispositivos como MacBook Pro e outros com portas USB-C. Inclui um adaptador USB-A extra, proporcionando uma conexão Ethernet estável e veloz de até 1 Gbps, perfeita para filmes, jogos online e videoconferências. Oferece três portas USB 3.0 com velocidades de transferência de até 5 Gbps, permitindo conectar mouse, teclado, discos rígidos e outros periféricos. Fabricado em alumínio durável, garantindo longa vida útil e resistência ao uso diário. Design compacto e leve, ideal para viagens de negócios e uso diário, facilitando o transporte e armazenamento. Funciona com Windows 10/8.1/8, Mac OS e Chrome OS, oferecendo versatilidade incomparável para diversas necessidades de conectividade. Assegura uma conectividade estável e rápida, perfeita para tarefas exigentes como transferência de dados, streaming e mais.

Ver na Amazon
Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs is a crash course on web API security testing that will prepare you to penetration-test APIs, reap high rewards on bug bounty programs, and make your own APIs more secure. You'll learn how REST and GraphQL APIs work in the wild and set up a streamlined API testing lab with Burp Suite and Postman. Then you'll master tools useful for reconnaissance, endpoint analysis, and fuzzing, such as Kiterunner and OWASP Amass. Next, you'll learn to perform common attacks, like those targeting an API's authentication mechanisms and the injection vulnerabilities commonly found in web applications. You'll also learn techniques for bypassing protections against these attacks. In the book's nine guided labs, which target intentionally vulnerable APIs, you'll practice: Enumerating APIs users and endpoints using fuzzing techniques Using Postman to discover an excessive data exposure vulnerability Performing a JSON Web Token attack against an API authentication process Combining multiple API attack techniques to perform a NoSQL injection Attacking a GraphQL API to uncover a broken object level authorization vulnerability

Ver oferta
Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Up-to-date strategies for thwarting the latest, most insidious network attacks This fully updated, industry-standard security resource shows, step by step, how to fortify computer networks by learning and applying effective ethical hacking techniques. Based on curricula developed by the authors at major security conferences and colleges, the book features actionable planning and analysis methods as well as practical steps for identifying and combating both targeted and opportunistic attacks. Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition clearly explains the enemy's devious weapons, skills, and tactics and offers field-tested remedies, case studies, and testing labs. You will get complete coverage of Internet of Things, mobile, and Cloud security along with penetration testing, malware analysis, and reverse engineering techniques. State-of-the-art malware, ransomware, and system exploits are thoroughly explained. Fully revised content includes 7 new chapters covering the latest threats Includes proof-of-concept code stored on the GitHub repository Authors train attendees at major security conferences, including RSA, Black Hat, Defcon, and B-Sides

Ver na Amazon
Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Proteção de privacidade aprimorada: protege o link de transmissão de dados para evitar roubo de informações, fornecendo proteção de segurança robusta que protege a privacidade do usuário durante transferências de arquivos e garante uma conexão segura para interações de dispositivos sem preocupações em vários ambientes Uso a longo prazo: a camada protetora resistente ao desgaste, combinada com um corpo de metal resistente, oferece gerenciamento de calor confiável e qualidade duradoura durante o uso diário Entrega eficiente de energia: a tecnologia de chip inteligente garante a identificação automática dos requisitos de energia, fornecendo carregamento eficiente alinhando-se com vários protocolos de carregamento rápido para maior conveniência Proteção contra sobrecarga: evitando riscos de sobrecarga, este bloqueador de dados USB protege a vida útil da bateria e garante um desempenho estável, mantendo um fluxo estável de energia para melhorar a longevidade do dispositivo de forma eficaz Prático de transportar: com atenção à portabilidade, este bloqueador de dados USB oferece um design compacto que é leve e fácil de transportar, melhorando a conveniência do usuário e operação eficiente

Ver na Amazon

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.