
小さいながらも本物そっくりの e コマースストアフロント("Sean's Surf & Skate Co.")で、Spring Boot で構築されています。既知の脆弱性を含むオープンソース依存関係が同梱されているため、Seal Security がバックポートされた "sealed" パッチで CVE をどのように修復するかをデモできます — パッケージのバージョンを 1 つもアップグレードせずに。
ストアフロントのニュースレター / "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 のシークレットとして設定されると)、ビルド時に sealed パッチ(例: snakeyaml 1.33 → 1.33+sp1)が適用されます。表面上は同じバージョン、同じ合格テスト — CVE は消えています。
| シークレット | 目的 |
|---|---|
SEAL_TOKEN | Seal artifact-server / CLI アクセストークン(本番) |
NGROK_TOKEN | CI から実行中のアプリを公開するための ngrok 認証トークン |
NGROK_DOMAIN | 予約済みの ngrok ドメイン(例: your-name.ngrok-free.dev) |