
Sean's Surf & Skate Co. — 취약한 SnakeYAML 의존성(CVE-2022-1471)을 포함한 Seal Security 데모용 Spring Boot 스토어프론트
Spring Boot로 구축된 작지만 실제처럼 보이는 전자상거래 스토어프론트("Sean's Surf & Skate Co.")입니다. 알려진 취약점이 있는 오픈소스 의존성을 포함하고 있어, 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(신뢰할 수 없는 입력에 대한 임의 객체 인스턴스화)에 취약합니다. 조작된 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을 통해 브라우저에서 접근하려면(예: 녹화된 데모의 경우), ngrok을 사용하여 포트 8080을 노출하세요: ngrok http 8080.
이 리포지토리는 의도적으로 취약하며 해결 전 상태로 커밋되어 있습니다 — CI에 아직 Seal 단계가 없습니다. 데모에서는 Seal의 GitHub 통합이 해결 워크플로우를 추가하는 풀 리퀘스트를 엽니다. 병합되고(SEAL_TOKEN이 Actions 시크릿으로 설정되면) 빌드는 빌드 시간에 봉인된 패치(예: snakeyaml 1.33 → 1.33+sp1)를 적용합니다. 표면상 동일한 버전, 동일한 통과 테스트 — CVE가 사라집니다.
| 시크릿 | 용도 |
|---|---|
SEAL_TOKEN | Seal 아티팩트 서버 / CLI 액세스 토큰 (프로덕션) |
NGROK_TOKEN | ngrok 인증 토큰, CI에서 실행 중인 앱을 노출하는 용도 |
NGROK_DOMAIN | 사용자가 예약한 ngrok 도메인 (예: your-name.ngrok-free.dev) |