
Sean's Surf & Skate Co. — витрина на Spring Boot с уязвимой зависимостью SnakeYAML (CVE-2022-1471) для демонстраций Seal Security
Небольшой, но реалистичный интернет-магазин ("Sean's Surf & Skate Co."), построенный на Spring Boot. Он поставляется с заведомо уязвимыми зависимостями с открытым исходным кодом, чтобы его можно было использовать для демонстрации того, как Seal Security устраняет CVE с помощью бэкпортированных "запечатанных" патчей — без обновления ни одной версии пакета.
Регистрация на новостную рассылку магазина / "Deal Alerts" передает введенное значение через SnakeYAML Yaml.load():
Yaml yaml = new Yaml();
Object parsed = yaml.load(name); // untrusted input
org.yaml:snakeyaml:1.33 уязвим к CVE-2022-1471 (создание произвольных объектов при недоверенном вводе). Вставка специально созданного payload SnakeYAML в поле регистрации приводит к удаленному выполнению кода и заменяет магазин на страницу "You've Been PWNED". Эксплойт находится в сопутствующем репозитории yaml-payload.
Файл pom.xml также фиксирует несколько других намеренно уязвимых библиотек (jackson-databind, commons-text / Text4Shell, log4j-core / Log4Shell, spring-core и другие), так что сканирование показывает реальные находки.
mvn clean package
java -jar target/seans-surf-and-skate-1.0.0.jar
# open http://localhost:8080
Чтобы открыть его в браузере по публичному URL (например, для записи демонстрации), откройте порт 8080 с помощью ngrok: ngrok http 8080.
Этот репозиторий намеренно зафиксирован в уязвимом состоянии до исправления — шага Seal в CI пока нет. В демо-версии интеграция Seal с GitHub открывает pull request, который добавляет рабочий процесс исправления; после слияния (и установки SEAL_TOKEN как секрета Actions) сборка применяет запечатанные патчи (например, snakeyaml 1.33 → 1.33+sp1) на этапе сборки. Те же версии на поверхности, те же пройденные тесты — CVE исчезли.
| Secret | Назначение |
|---|---|
SEAL_TOKEN | Токен доступа к серверу артефактов / CLI Seal (Production) |
NGROK_TOKEN | Токен аутентификации ngrok для открытия приложения из CI |
NGROK_DOMAIN | Ваш зарезервированный домен ngrok (например, ) |
your-name.ngrok-free.dev