
Laboratoire complet sur les vulnérabilités Java avec code vulnérable et corrigé, scénarios d'attaque, notes d'audit source/sink et recommandations de codage sécurisé pour la formation en sécurité et l'évaluation d'outils.
JavaSecLab - Un laboratoire complet de vulnérabilités JavaJavaSecLab est un laboratoire complet de vulnérabilités Java destiné à l'apprentissage de la sécurité applicative, à la pratique de l'audit de code, à la formation au développement sécurisé et à l'évaluation d'outils de sécurité. Construit sur Spring Boot, il fournit du code vulnérable, des implémentations corrigées, des scénarios d'attaque réalistes, des notes orientées audit sur les sources et les sinks, des conseils de remédiation, des explications sur le codage sécurisé et des exemples d'analyse de trafic.
L'objectif est pratique : aider les utilisateurs à comprendre non seulement comment une vulnérabilité est exploitée, mais aussi pourquoi elle existe dans le code et comment elle devrait être corrigée.


JavaSecLab couvre un large éventail de scénarios de sécurité web Java, notamment :
Site de démonstration : http://whgojp.top/
Compte par défaut : admin/admin
JavaSecLab est intentionnellement vulnérable et contient des points de terminaison dangereux, des dépendances vulnérables et des configurations non sécurisées. N'exécutez votre propre déploiement que dans un environnement isolé. Ne l'exposez pas directement à l'internet public.
L'auteur a travaillé dans des rôles de sécurité en entreprise et a vécu l'ensemble du cycle de vie des vulnérabilités. Après des tests d'intrusion ou des évaluations de sécurité, les vulnérabilités sont souvent assignées aux équipes de développement via des systèmes tels que TAPD ou Jira. En pratique, deux questions reviennent sans cesse :
JavaSecLab a été créé pour relier le comportement de la vulnérabilité, le code vulnérable, les approches de remédiation et la réflexion d'audit. Comparé à un rapport purement textuel ou à un PoC, le projet met l'accent sur la compréhension des vulnérabilités du point de vue du code.
Dans l'audit de code, un flux de travail courant consiste à localiser d'abord un sink, tel que l'exécution de commandes, l'exécution SQL, l'accès aux fichiers, le rendu de templates, la désérialisation ou la sortie de réponse. L'auditeur remonte ensuite pour identifier la source correspondante, telle que les paramètres de requête, les en-têtes, les cookies, les fichiers téléversés, les données sérialisées ou le contenu de la base de données. De nombreux scénarios de JavaSecLab sont conçus autour de ce chemin source-vers-sink, ce qui les rend utiles à la fois pour l'apprentissage et pour la vérification d'outils.
Un même type de vulnérabilité apparaît souvent via de multiples chemins de déclenchement dans les systèmes réels. JavaSecLab fournit donc plusieurs scénarios pour les classes de vulnérabilités principales lorsque c'est possible, afin que les utilisateurs puissent comparer comment différents modèles de codage, fonctionnalités de framework et flux métier affectent le risque.
JavaSecLab inclut des exemples d'analyse de trafic de vulnérabilités pour aider les apprenants à relier le comportement requête/réponse à l'exécution du code. Les contributions avec des paquets plus clairs, de meilleures notes de reproduction ou des exemples d'analyse supplémentaires sont les bienvenues.

Par exemple, dans un scénario d'injection SQL basée sur le temps, le schéma de trafic peut être observé via la latence de réponse : le serveur répond après environ cinq secondes.

Cloner le dépôt :
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

Prérequis :
Créez la base de données et importez sql/JavaSecLab.sql.
Définissez le profil actif sur dev dans src/main/resources/application.yml :
spring:
profiles:
active: dev
Mettez à jour la connexion à la base de données dans 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
Démarrez l'application depuis IDEA ou avec Maven.
Compte par défaut : admin/admin

Prérequis :
Option 1 : démarrer avec l'image publiée :
docker compose -f docker-compose.image.yml up -d
Option 2 : construire l'image localement et démarrer le laboratoire :
mvn clean package -DskipTests
docker compose -p javaseclab up -d
Si la base de données est vide après le démarrage, importez manuellement sql/JavaSecLab.sql.


Pour plus d'options de déploiement et de notes de dépannage, consultez le Guide de déploiement.
JavaSecLab est un projet de laboratoire vulnérable. Il conserve intentionnellement des points de terminaison dangereux, des dépendances vulnérables et des configurations non sécurisées à des fins de reproduction et d'enseignement. Exécutez-le uniquement en local ou dans un réseau isolé.
Précautions recommandées :
Les exemples de code sécurisé de ce projet sont destinés à l'enseignement et à la démonstration. Les systèmes métier réels nécessitent généralement authentification, audit, limitation de débit, validation des données, gouvernance des dépendances, supervision, alertes et défense en profondeur.
Les issues et pull requests sont les bienvenues. Les bonnes contributions incluent :
Lorsque nous parlons de logiciel libre, nous faisons référence à la liberté, pas au prix.
JavaSecLab est publié sous la Licence Apache 2.0. Voir LICENSE pour plus de détails.
Consultez le Journal des mises à jour pour les notes de version et l'historique du projet.
Blog de l'auteur : 今天是几号
Si vous êtes intéressé par la sécurité applicative, le développement sécurisé, le SDL, le DevSecOps ou les laboratoires de vulnérabilités, n'hésitez pas à rejoindre le groupe communautaire.
Si JavaSecLab vous aide, un parrainage est apprécié. Le soutien sera utilisé pour maintenir l'environnement en ligne et améliorer continuellement le projet.