
Комплексная лаборатория по уязвимостям Java с уязвимым и исправленным кодом, сценариями атак, заметками по аудиту источников/стоков и рекомендациями по безопасному кодированию для обучения безопасности и оценки инструментов.
JavaSecLab — комплексная лаборатория уязвимостей JavaJavaSecLab — это комплексная лаборатория уязвимостей Java для изучения безопасности приложений, практики аудита кода, обучения безопасной разработке и оценки инструментов безопасности. Построенная на Spring Boot, она предоставляет уязвимый код, исправленные реализации, реалистичные сценарии атак, заметки об источниках и стоках для аудита, рекомендации по устранению, объяснения безопасного кодирования и примеры анализа трафика.
Цель практическая: помочь пользователям понять не только то, как эксплуатируется уязвимость, но и почему она существует в коде и как её следует исправлять.


JavaSecLab охватывает широкий спектр сценариев безопасности Java-веб-приложений, включая:
Демо-сайт: http://whgojp.top/
Учётная запись по умолчанию: admin/admin
JavaSecLab намеренно уязвим и содержит опасные эндпоинты, уязвимые зависимости и небезопасные конфигурации. Запускайте собственное развёртывание только в изолированной среде. Не выставляйте его напрямую в публичный интернет.
Автор работал на корпоративных должностях в сфере безопасности и прошёл через полный жизненный цикл уязвимостей. После пентестов или оценок безопасности уязвимости часто назначаются командам разработки через такие системы, как TAPD или Jira. На практике постоянно возникают два вопроса:
JavaSecLab был создан, чтобы связать поведение уязвимости, уязвимый код, подходы к устранению и логику аудита. По сравнению с текстовым отчётом или PoC, проект делает акцент на понимании уязвимостей с точки зрения кода.
При аудите кода распространённый подход — сначала найти сток (sink), например выполнение команд, выполнение SQL, доступ к файлам, рендеринг шаблонов, десериализацию или вывод ответа. Затем аудитор прослеживает путь назад, чтобы определить соответствующий источник (source), например параметры запроса, заголовки, cookie, загруженные файлы, сериализованные данные или содержимое базы данных. Многие сценарии JavaSecLab построены вокруг этого пути от источника к стоку, что делает их полезными как для обучения, так и для проверки инструментов.
Один и тот же тип уязвимости часто проявляется через несколько путей срабатывания в реальных системах. Поэтому JavaSecLab, где это возможно, предоставляет несколько сценариев для ключевых классов уязвимостей, чтобы пользователи могли сравнить, как различные шаблоны кодирования, возможности фреймворков и бизнес-процессы влияют на риск.
JavaSecLab включает примеры анализа трафика уязвимостей, помогающие учащимся связать поведение запросов/ответов с выполнением кода. Приветствуются вклады с более понятными пакетами, лучшими заметками по воспроизведению или дополнительными примерами анализа.

Например, в сценарии SQL-инъекции, основанной на времени, шаблон трафика можно наблюдать по задержке ответа: сервер отвечает примерно через пять секунд.

Клонируйте репозиторий:
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

Требования:
Создайте базу данных и импортируйте sql/JavaSecLab.sql.
Установите активный профиль dev в src/main/resources/application.yml:
spring:
profiles:
active: dev
Обновите подключение к базе данных в 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
Запустите приложение из IDEA или с помощью Maven.
Учётная запись по умолчанию: admin/admin

Требования:
Вариант 1: запуск с опубликованным образом:
docker compose -f docker-compose.image.yml up -d
Вариант 2: собрать образ локально и запустить лабораторию:
mvn clean package -DskipTests
docker compose -p javaseclab up -d
Если после запуска база данных пуста, вручную импортируйте sql/JavaSecLab.sql.


Дополнительные варианты развёртывания и заметки по устранению неполадок см. в Руководстве по развёртыванию.
JavaSecLab — это проект уязвимой лаборатории. Он намеренно сохраняет опасные эндпоинты, уязвимые зависимости и небезопасные конфигурации для воспроизведения и обучения. Запускайте его только локально или в изолированной сети.
Рекомендуемые меры предосторожности:
Примеры безопасного кода в этом проекте предназначены для обучения и демонстрации. Реальные бизнес-системы обычно требуют аутентификации, аудита, ограничения скорости, валидации данных, управления зависимостями, мониторинга, оповещения и эшелонированной защиты.
Приветствуются issues и pull requests. Хорошие вклады включают:
Когда мы говорим о свободном программном обеспечении, мы имеем в виду свободу, а не цену.
JavaSecLab выпущен под Apache License 2.0. Подробности см. в LICENSE.
См. Журнал обновлений для примечаний к выпускам и истории проекта.
Блог автора: 今天是几号
Если вам интересны безопасность приложений, безопасная разработка, SDL, DevSecOps или лаборатории уязвимостей, присоединяйтесь к сообществу.
Если JavaSecLab помогает вам, мы будем признательны за спонсорскую поддержку. Средства будут использованы для поддержания онлайн-среды и постоянного улучшения проекта.