
Laboratorio integral de vulnerabilidades en Java con código vulnerable y corregido, escenarios de ataque, notas de auditoría de fuentes/sinks y guía de codificación segura para formación en seguridad y evaluación de herramientas.
JavaSecLab - Un laboratorio integral de vulnerabilidades de JavaJavaSecLab es un laboratorio integral de vulnerabilidades de Java para el aprendizaje de seguridad de aplicaciones, la práctica de auditoría de código, la formación en desarrollo seguro y la evaluación de herramientas de seguridad. Construido sobre Spring Boot, proporciona código vulnerable, implementaciones corregidas, escenarios de ataque realistas, notas de auditoría orientadas a fuentes y sumideros, guías de remediación, explicaciones de codificación segura y ejemplos de análisis de tráfico.
El objetivo es práctico: ayudar a los usuarios a comprender no solo cómo se explota una vulnerabilidad, sino también por qué existe en el código y cómo debería corregirse.


JavaSecLab cubre una amplia gama de escenarios de seguridad web en Java, incluidos:
Sitio de demostración: http://whgojp.top/
Cuenta predeterminada: admin/admin
JavaSecLab es intencionalmente vulnerable y contiene endpoints peligrosos, dependencias vulnerables y configuraciones inseguras. Ejecute su propio despliegue solo en un entorno aislado. No lo exponga directamente a Internet público.
El autor ha trabajado en roles de seguridad empresarial y ha experimentado el ciclo de vida completo de las vulnerabilidades. Después de las pruebas de penetración o las evaluaciones de seguridad, las vulnerabilidades a menudo se asignan a los equipos de desarrollo a través de sistemas como TAPD o Jira. En la práctica, surgen repetidamente dos preguntas:
JavaSecLab se creó para conectar el comportamiento de la vulnerabilidad, el código vulnerable, los enfoques de remediación y el pensamiento de auditoría. En comparación con un informe solo de texto o un PoC, el proyecto enfatiza la comprensión de las vulnerabilidades desde la perspectiva del código.
En la auditoría de código, un flujo de trabajo común es localizar primero un sumidero (sink), como la ejecución de comandos, la ejecución de SQL, el acceso a archivos, la representación de plantillas, la deserialización o la salida de respuesta. Luego, el auditor rastrea hacia atrás para identificar la fuente (source) correspondiente, como parámetros de solicitud, encabezados, cookies, archivos cargados, datos serializados o contenido de la base de datos. Muchos escenarios de JavaSecLab están diseñados en torno a esta ruta de fuente a sumidero, lo que los hace útiles tanto para el aprendizaje como para la verificación de herramientas.
El mismo tipo de vulnerabilidad a menudo aparece a través de múltiples rutas de activación en sistemas reales. Por lo tanto, JavaSecLab proporciona múltiples escenarios para las clases de vulnerabilidad principales cuando es posible, de modo que los usuarios puedan comparar cómo los diferentes patrones de codificación, características del framework y flujos de negocio afectan el riesgo.
JavaSecLab incluye ejemplos de análisis de tráfico de vulnerabilidades para ayudar a los estudiantes a conectar el comportamiento de solicitud/respuesta con la ejecución del código. Se aceptan contribuciones con paquetes más claros, mejores notas de reproducción o ejemplos de análisis adicionales.

Por ejemplo, en un escenario de inyección SQL basada en tiempo, el patrón de tráfico se puede observar a través de la latencia de respuesta: el servidor responde después de aproximadamente cinco segundos.

Clonar el repositorio:
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

Requisitos:
Cree la base de datos e importe sql/JavaSecLab.sql.
Establezca el perfil activo en dev en src/main/resources/application.yml:
spring:
profiles:
active: dev
Actualice la conexión a la base de datos en 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 la aplicación desde IDEA o con Maven.
Cuenta predeterminada: admin/admin

Requisitos:
Opción 1: iniciar con la imagen publicada:
docker compose -f docker-compose.image.yml up -d
Opción 2: construir la imagen localmente e iniciar el laboratorio:
mvn clean package -DskipTests
docker compose -p javaseclab up -d
Si la base de datos está vacía después del inicio, importe manualmente sql/JavaSecLab.sql.


Para obtener más opciones de despliegue y notas de solución de problemas, consulte la Guía de despliegue.
JavaSecLab es un proyecto de laboratorio vulnerable. Mantiene intencionalmente endpoints peligrosos, dependencias vulnerables y configuraciones inseguras para la reproducción y la enseñanza. Ejecútelo solo localmente o en una red aislada.
Precauciones recomendadas:
Los ejemplos de código seguro en este proyecto son para enseñanza y demostración. Los sistemas empresariales reales generalmente requieren autenticación, auditoría, limitación de velocidad, validación de datos, gobernanza de dependencias, monitoreo, alertas y defensa en profundidad.
Se aceptan issues y pull requests. Las buenas contribuciones incluyen:
Cuando hablamos de software libre, nos referimos a la libertad, no al precio.
JavaSecLab se publica bajo la Apache License 2.0. Consulte LICENSE para más detalles.
Consulte el Registro de actualizaciones para notas de la versión e historial del proyecto.
Blog del autor: 今天是几号
Si está interesado en seguridad de aplicaciones, desarrollo seguro, SDL, DevSecOps o laboratorios de vulnerabilidades, no dude en unirse al grupo de la comunidad.
Si JavaSecLab le ayuda, se agradece el patrocinio. El apoyo se utilizará para mantener el entorno en línea y mejorar continuamente el proyecto.