
Laboratório abrangente de vulnerabilidades Java com código vulnerável e corrigido, cenários de ataque, notas de auditoria de source/sink e orientação de codificação segura para treinamento em segurança e avaliação de ferramentas.
JavaSecLab - Um Laboratório Abrangente de Vulnerabilidades JavaJavaSecLab é um laboratório abrangente de vulnerabilidades Java para aprendizado de segurança de aplicações, prática de auditoria de código, treinamento em desenvolvimento seguro e avaliação de ferramentas de segurança. Construído sobre Spring Boot, ele fornece código vulnerável, implementações corrigidas, cenários de ataque realistas, notas de auditoria orientadas a source e sink, orientações de remediação, explicações de codificação segura e exemplos de análise de tráfego.
O objetivo é prático: ajudar os usuários a entender não apenas como uma vulnerabilidade é explorada, mas também por que ela existe no código e como deve ser corrigida.


JavaSecLab cobre uma ampla variedade de cenários de segurança web em Java, incluindo:
Site de demonstração: http://whgojp.top/
Conta padrão: admin/admin
JavaSecLab é intencionalmente vulnerável e contém endpoints perigosos, dependências vulneráveis e configurações inseguras. Execute sua própria implantação apenas em um ambiente isolado. Não o exponha diretamente à internet pública.
O autor trabalhou em funções de segurança corporativa e vivenciou o ciclo de vida completo de vulnerabilidades. Após testes de penetração ou avaliações de segurança, as vulnerabilidades frequentemente são atribuídas às equipes de desenvolvimento por meio de sistemas como TAPD ou Jira. Na prática, duas perguntas surgem repetidamente:
JavaSecLab foi criado para conectar o comportamento da vulnerabilidade, o código vulnerável, as abordagens de remediação e o raciocínio de auditoria. Comparado a um relatório apenas textual ou a um PoC, o projeto enfatiza a compreensão das vulnerabilidades sob a perspectiva do código.
Na auditoria de código, um fluxo de trabalho comum é localizar primeiro um sink, como execução de comandos, execução de SQL, acesso a arquivos, renderização de templates, desserialização ou saída de resposta. O auditor então rastreia para trás para identificar o source correspondente, como parâmetros de requisição, cabeçalhos, cookies, arquivos enviados, dados serializados ou conteúdo do banco de dados. Muitos cenários do JavaSecLab são projetados em torno desse caminho source-to-sink, tornando-os úteis tanto para aprendizado quanto para verificação de ferramentas.
O mesmo tipo de vulnerabilidade frequentemente aparece por meio de múltiplos caminhos de acionamento em sistemas reais. Portanto, o JavaSecLab fornece múltiplos cenários para as principais classes de vulnerabilidade sempre que possível, para que os usuários possam comparar como diferentes padrões de codificação, recursos de frameworks e fluxos de negócios afetam o risco.
JavaSecLab inclui exemplos de análise de tráfego de vulnerabilidades para ajudar os aprendizes a conectar o comportamento de requisição/resposta com a execução do código. Contribuições com pacotes mais claros, melhores notas de reprodução ou exemplos adicionais de análise são bem-vindas.

Por exemplo, em um cenário de injeção de SQL baseada em tempo, o padrão de tráfego pode ser observado pela latência da resposta: o servidor responde após aproximadamente cinco segundos.

Clone o repositório:
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

Requisitos:
Crie o banco de dados e importe sql/JavaSecLab.sql.
Defina o perfil ativo como dev em src/main/resources/application.yml:
spring:
profiles:
active: dev
Atualize a conexão com o banco de dados em src/main/resources/application-dev.yml:
username: root
password: QWE123qwe
url: jdbc:mysql://localhost:13306/JavaSecLab?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
Inicie a aplicação pela IDEA ou com Maven.
Conta padrão: admin/admin

Requisitos:
Opção 1: iniciar com a imagem publicada:
docker compose -f docker-compose.image.yml up -d
Opção 2: construir a imagem localmente e iniciar o laboratório:
mvn clean package -DskipTests
docker compose -p javaseclab up -d
Se o banco de dados estiver vazio após a inicialização, importe manualmente sql/JavaSecLab.sql.


Para mais opções de implantação e notas de solução de problemas, consulte o Guia de Implantação.
JavaSecLab é um projeto de laboratório vulnerável. Ele mantém intencionalmente endpoints perigosos, dependências vulneráveis e configurações inseguras para reprodução e ensino. Execute-o apenas localmente ou em uma rede isolada.
Precauções recomendadas:
Os exemplos de código seguro neste projeto são para ensino e demonstração. Sistemas de negócios reais geralmente exigem autenticação, auditoria, limitação de taxa, validação de dados, governança de dependências, monitoramento, alertas e defesa em profundidade.
Issues e pull requests são bem-vindos. Boas contribuições incluem:
Quando falamos de software livre, estamos nos referindo à liberdade, não ao preço.
JavaSecLab é distribuído sob a Apache License 2.0. Consulte LICENSE para detalhes.
Consulte o Registro de Atualizações para notas de versão e histórico do projeto.
Blog do autor: 今天是几号
Se você tem interesse em segurança de aplicações, desenvolvimento seguro, SDL, DevSecOps ou laboratórios de vulnerabilidades, sinta-se à vontade para participar do grupo da comunidade.
Se o JavaSecLab ajuda você, um patrocínio é bem-vindo. O apoio será usado para manter o ambiente online e melhorar continuamente o projeto.