
Sean's Surf & Skate Co. — Seal Security डेमो के लिए असुरक्षित SnakeYAML निर्भरता (CVE-2022-1471) वाला स्प्रिंग बूट स्टोरफ्रंट
स्प्रिंग बूट के साथ बनाया गया एक छोटा लेकिन वास्तविक दिखने वाला ई-कॉमर्स स्टोरफ्रंट ("Sean's Surf & Skate Co.")। यह ज्ञात कमज़ोरियों वाली ओपन-सोर्स डिपेंडेंसियों के साथ आता है ताकि इसका उपयोग यह प्रदर्शित करने के लिए किया जा सके कि Seal Security बैकपोर्टेड "सील्ड" पैच के साथ CVEs का समाधान कैसे करता है — बिना किसी एक भी पैकेज वर्ज़न को अपग्रेड किए।
स्टोरफ्रंट का न्यूज़लेटर / "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 पर पहुँचाने के लिए (जैसे रिकॉर्डेड डेमो के लिए), पोर्ट 8080 को ngrok से एक्सपोज़ करें: ngrok http 8080।
यह रिपॉज़िटरी जानबूझकर अपनी कमज़ोर, समाधान-पूर्व स्थिति में कमिट की गई है — CI में अभी Seal का कोई चरण नहीं है। डेमो में, Seal का GitHub इंटीग्रेशन एक पुल रिक्वेस्ट खोलता है जो समाधान वर्कफ़्लो जोड़ता है; एक बार मर्ज होने पर (और SEAL_TOKEN एक Actions सीक्रेट के रूप में सेट होने पर), बिल्ड, बिल्ड-टाइम पर सील्ड पैच लागू करता है (जैसे snakeyaml 1.33 → 1.33+sp1)। सतह पर वही वर्ज़न, वही पास होने वाले टेस्ट — CVEs खत्म।
| सीक्रेट | उद्देश्य |
|---|---|
SEAL_TOKEN | Seal आर्टिफैक्ट-सर्वर / CLI एक्सेस टोकन (प्रोडक्शन) |
NGROK_TOKEN | ngrok ऑथ टोकन, चल रहे ऐप को CI से एक्सपोज़ करने के लिए |
NGROK_DOMAIN | आपका आरक्षित ngrok डोमेन (जैसे your-name.ngrok-free.dev) |