OWASP VulnerableApp OWASP VulnerableApp

OWASP Incubator Licença Java CI with Gradle PRs bem-vindos Docker Pulls codecov

Quebre. Escaneie. Reproduza. Use como referência. Melhore.

O OWASP VulnerableApp é uma aplicação modular deliberadamente vulnerável, pensada principalmente para validar e comparar scanners de segurança com cenários de teste reproduzíveis, além de apoiar o aprendizado e a experimentação.

🔍 O que o diferencia

Ao contrário das aplicações vulneráveis tradicionais, o VulnerableApp foi desenhado como um ecossistema de segurança testável, e não como um app estático de treino.

Ele permite:

  • 🔬 Benchmark de scanners para ferramentas como Burp Suite, OWASP ZAP e motores DAST próprios
  • 🧩 Design modular de vulnerabilidades, com novos cenários sem alterar os serviços centrais
  • 📊 Testes de regressão de segurança entre versões e ambientes
  • 🎯 Simulação realista de superfície de ataque para padrões modernos de aplicações web
  • 🧪 Comportamento determinístico das vulnerabilidades, para resultados de scan repetíveis
  • 🧠 Feito para engenheiros de segurança, pesquisadores e educadores

Entire architecture stack

O VulnerableApp ajuda você a:

  • Validar como as ferramentas de segurança se comportam em padrões de vulnerabilidade conhecidos
  • Montar ambientes controlados para experimentação em segurança
  • Ampliar a cobertura de vulnerabilidades à medida que novas técnicas de ataque aparecem
  • Executar pipelines de teste de segurança consistentes e repetíveis

⚙️ Por que isso importa

A maioria das aplicações vulneráveis é:

  • Estática
  • Difícil de estender
  • Feita só para aprendizado manual

O VulnerableApp foi feito para:

automação, reprodutibilidade e evolução

Interface do usuário

VulnerableApp-facade UI

Executando o projeto

Há 2 formas de executar o projeto:

  1. A forma mais simples é usar containers Docker, que sobem a VulnerableApplication completa com todos os componentes. Para rodar como aplicação Docker, siga os passos:
    1. Baixe e instale o Docker Compose
    2. Clone este repositório no GitHub
    3. Abra o terminal e vá para o diretório raiz do projeto
    4. Execute o comando docker-compose pull && docker-compose up
    5. Abra o navegador em http://localhost para ver a interface do VulnerableApp.
    6. O Mailpit também fica em http://localhost/mailpit/ para ver os e-mails capturados pelo SMTP local.

    Nota: Os passos acima executam a versão mais recente ainda não lançada do VulnerableApp. Se quiser a última versão lançada, use a tag Docker latest.

  2. Outra forma de executar o VulnerableApp é como aplicação vulnerável standalone:
    1. Vá até a seção de Releases no GitHub e baixe o Jar da última versão lançada
    2. Abra o terminal e vá para o diretório raiz do projeto
    3. Execute o comando java -jar VulnerableApp-*
    4. Abra o navegador em http://localhost:9090/VulnerableApp. Essa é a interface legado do VulnerableApp.

Compilando o projeto

Há 2 formas de compilar e usar este projeto:

  1. Como aplicação Docker, para rodar a VulnerableApplication completa. Siga os passos:
    1. Gere a imagem Docker com ./gradlew jibDockerBuild
    2. Baixe o Docker-Compose e, no mesmo diretório, execute docker-compose up
    3. Abra o navegador em http://localhost para ver a interface do VulnerableApp.
  2. Como aplicação Spring Boot, que sobe com a UI legado ou a API REST e facilita o debug. O caminho simples:
    1. Importe o projeto na sua IDE e execute
    2. Abra o navegador em: http://localhost:9090/VulnerableApp para usar a interface legado no debug e nos testes.

Contribuindo com o projeto

Há várias formas de contribuir:

  1. Se você é desenvolvedor e está começando, o melhor é olhar a lista de issues com a label good first issue.
  2. Se você é desenvolvedor ou profissional de segurança e quer adicionar um novo tipo de vulnerabilidade, gere o modelo com ./gradlew GenerateSampleVulnerability. Isso cria um template com placeholders e comentários. Os arquivos alterados aparecem no log do comando ou no histórico do Git. Preencha os placeholders e compile o projeto para ver o efeito.
  3. Se quiser contribuir divulgando o projeto ou ajudando no crescimento, deixe suas ideias na seção de discussions ou nas issues para conversarmos.

Testando com a UI moderna

O VulnerableApp-facade oferece uma UI moderna para o VulnerableApp. Para testar suas alterações locais com essa UI:

  1. Pré-requisito: Docker e Docker-Compose instalados.
  2. Execute o script de teste:
    • No Windows: .\\scripts\\testWithModernUI.bat
    • No Linux/Mac: ./scripts/testWithModernUI.sh

Esse script empacota suas alterações locais numa imagem Docker (sasanlabs/owasp-vulnerableapp:unreleased) e sobe o stack completo (incluindo facade, jsp e php) com docker-compose.local.yml.

  1. Acesse a UI: abra http://localhost para ver a UI moderna com as suas mudanças.

  2. Acesse o Mailpit: abra http://localhost/mailpit/ para ver os e-mails capturados pelo SMTP local.

Tecnologias usadas

  • Java17
  • Spring Boot
  • ReactJS
  • Javascript/TypeScript

Conectando ao banco H2 embutido

Para acessar o banco pelo navegador: http://localhost:9090/VulnerableApp/h2

Propriedades de conexão:

JDBC Url: jdbc:h2:mem:testdb
User Name: admin
Password: hacker

Tipos de vulnerabilidade já cobertos

  1. JWT Vulnerability
  2. Command Injection
  3. Cryptography Failures
  4. File Upload Vulnerability
  5. Path Traversal Vulnerability
  6. SQL Injection
    1. Error Based SQLi
    2. Union Based SQLi
    3. Blind SQLi
  7. XSS
    1. Persistent XSS
    2. Reflected XSS
  8. XXE
  9. Open Redirect
    1. Http 3xx Status code based
  10. SSRF
  11. IDOR
  12. Clickjacking
  13. LDAP Injection
  14. Authentication Vulnerability
  15. Password Reset Vulnerability

Avaliando o seu scanner

O VulnerableApp inclui um comparador que nota os achados de um scanner contra a verdade de referência do projeto e grava um relatório de cobertura / missed / unmatched. Scanners DAST e SAST usam o mesmo endpoint:

  • Endpoint: POST http://<baseurl>/VulnerableApp/scanner/benchmark
  • Corpo da requisição — use o formato do seu scanner:
    • DAST: { tool, scanType: "DAST", findings: [ { url, type, cwe, wascId } ] } (scanType é opcional e o padrão é DAST; type/cwe/wascId são opcionais individualmente — basta um eixo bater)
    • SAST: { tool, scanType: "SAST", findings: [ { filePath, line, cwe, type } ] }
  • Corpo da resposta e benchmarks/<tool>-results.json em disco: relatório de cobertura

Rodar o scanner em si fica fora do escopo — você envia o JSON. Veja benchmarks/README.md para os schemas de entrada/saída, regras de matching, vocabulário canônico de tipos de vulnerabilidade e exemplos de curl.

Contato

Se travar em algum passo ou na compreensão do projeto e dos objetivos, envie um e-mail para karan.sasan@owasp.org ou abra uma issue que tentaremos ajudar.

Documentação e referências

  1. OWASP Spotlight series overview of project
  2. Overview video for OWASP Spotlight series
  3. Documentation
  4. Design Documentation
  5. Owasp VulnerableApp
  6. Overview Video

Blogs

  1. Overview of Owasp-VulnerableApp - Medium article
  2. Overview of Owasp-VulnerableApp - Blogspot post
  3. Introduction to Owasp VulnerableApp by Kenji Nakajima
  4. Gen AI based platform Shannon exploiting VulnerableApp
  5. I Built the OWASP ZAP File Upload Addon. Here’s Why VulnerableApp-Facade Had to Exist First

Uso do OWASP VulnerableApp

  1. View Global Academic Interest

Referências de troubleshooting

  1. Reddit exploiting SQL Injection Vulnerability

README em outros idiomas

  1. Russian
  2. Chinese
  3. Hindi
  4. Punjabi
  5. Korean
  6. Portuguese (Brasil)