
Sean's Surf & Skate Co. — Vetrina Spring Boot con una dipendenza SnakeYAML vulnerabile (CVE-2022-1471) per le demo di Seal Security
Un piccolo negozio di e-commerce dall'aspetto realistico ("Sean's Surf & Skate Co.") realizzato con Spring Boot. Include dipendenze open-source note per essere vulnerabili così da poter essere usato per dimostrare come Seal Security risana le CVE con patch "sealed" backportate — senza aggiornare una singola versione di pacchetto.
La pagina di iscrizione alla newsletter / "Deal Alerts" della vetrina fa passare il valore inserito attraverso
Yaml.load() di SnakeYAML:
Yaml yaml = new Yaml();
Object parsed = yaml.load(name); // untrusted input
org.yaml:snakeyaml:1.33 è vulnerabile a CVE-2022-1471 (istanziazione arbitraria di oggetti su input non attendibile). Incollare un payload SnakeYAML appositamente costruito nel campo di iscrizione consente l'esecuzione remota di codice e sostituisce la vetrina con una pagina "You've Been PWNED". Il payload dell'exploit si trova nel repository associato yaml-payload.
Il pom.xml fissa inoltre diverse altre librerie intenzionalmente vulnerabili (jackson-databind,
commons-text / Text4Shell, log4j-core / Log4Shell, spring-core e altre), quindi una scansione si accende
con risultati reali.
mvn clean package
java -jar target/seans-surf-and-skate-1.0.0.jar
# open http://localhost:8080
Per raggiungerlo da un browser tramite un URL pubblico (ad es. per una demo registrata), esponi la porta 8080 con ngrok: ngrok http 8080.
Questo repository è volutamente nello stato vulnerabile, pre-remediation — non c'è
ancora alcuno step di Seal nella CI. Nella demo, l'integrazione GitHub di Seal apre una pull request che
aggiunge il workflow di remediation; una volta unita (e con SEAL_TOKEN impostato come segreto di Actions),
la build applica le patch sealed al momento della build (es. snakeyaml 1.33 → 1.33+sp1). Stesse
versioni in apparenza, stessi test superati — CVE sparite.
| Segreto | Scopo |
|---|---|
SEAL_TOKEN | Token di accesso a Seal artifact-server / CLI (Produzione) |
NGROK_TOKEN | token di autenticazione ngrok, per esporre l'app in esecuzione dalla CI |
NGROK_DOMAIN | il tuo dominio ngrok riservato (es. ) |
your-name.ngrok-free.dev