{"id":78842,"date":"2026-10-03T05:45:20","date_gmt":"2026-10-03T05:45:20","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=78842"},"modified":"2026-10-03T05:45:23","modified_gmt":"2026-10-03T05:45:23","slug":"owasp-dependency-check-1-hour-quick-demo-lab","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/owasp-dependency-check-1-hour-quick-demo-lab\/","title":{"rendered":"OWASP Dependency-Check \u2014 1-Hour Quick Demo Lab"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Level:<\/strong>&nbsp;Beginner \/ Basic DevSecOps<br><strong>Duration:<\/strong>&nbsp;60 minutes<br><strong>Format:<\/strong>&nbsp;Instructor-led hands-on demo<br><strong>Focus:<\/strong>&nbsp;Install \u2192 scan a real project \u2192 read findings \u2192 understand CVE\/CVSS \u2192 generate reports \u2192 demonstrate a simple security gate<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Lab Version<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Tutorial<\/span> <span class=\"hljs-selector-tag\">verified<\/span> <span class=\"hljs-selector-tag\">for<\/span>: <span class=\"hljs-selector-tag\">October<\/span> 2026\n<span class=\"hljs-selector-tag\">OWASP<\/span> <span class=\"hljs-selector-tag\">Dependency-Check<\/span>: 13<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<span class=\"hljs-selector-tag\">Recommended<\/span> <span class=\"hljs-selector-tag\">Java<\/span> <span class=\"hljs-selector-tag\">runtime<\/span>: <span class=\"hljs-selector-tag\">Java<\/span> 17 <span class=\"hljs-selector-tag\">LTS<\/span>\n<span class=\"hljs-selector-tag\">Minimum<\/span> <span class=\"hljs-selector-tag\">Java<\/span> <span class=\"hljs-selector-tag\">runtime<\/span>: <span class=\"hljs-selector-tag\">Java<\/span> 11\n<span class=\"hljs-selector-tag\">Sample<\/span> <span class=\"hljs-selector-tag\">project<\/span>: <span class=\"hljs-selector-tag\">OWASP<\/span> <span class=\"hljs-selector-tag\">NodeGoat<\/span>\n<span class=\"hljs-selector-tag\">Pinned<\/span> <span class=\"hljs-selector-tag\">sample<\/span> <span class=\"hljs-selector-tag\">commit<\/span>: 9336<span class=\"hljs-selector-tag\">e34<\/span>\n<span class=\"hljs-selector-tag\">Primary<\/span> <span class=\"hljs-selector-tag\">report<\/span> <span class=\"hljs-selector-tag\">format<\/span>: <span class=\"hljs-selector-tag\">HTML<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Important for a 1-hour class:<\/strong>&nbsp;Dependency-Check must download vulnerability data before it can perform useful analysis. The first update can take significant time. The instructor should pre-populate the Dependency-Check data directory before the session, or provide students with a prepared lab VM\/environment.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Learning Objectives<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">By the end of this 60-minute lab, students should be able to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explain what OWASP Dependency-Check does.<\/li>\n\n\n\n<li>Explain why Software Composition Analysis (SCA) matters.<\/li>\n\n\n\n<li>Verify a Dependency-Check installation.<\/li>\n\n\n\n<li>Scan a real GitHub project.<\/li>\n\n\n\n<li>Generate an HTML vulnerability report.<\/li>\n\n\n\n<li>Identify the affected dependency, CVE, severity, and CVSS score.<\/li>\n\n\n\n<li>Understand why a detected vulnerability still needs investigation.<\/li>\n\n\n\n<li>Generate a machine-readable report.<\/li>\n\n\n\n<li>Demonstrate a simple CVSS-based security gate.<\/li>\n\n\n\n<li>Explain where Dependency-Check fits into CI\/CD.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. 60-Minute Agenda<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Time<\/th><th class=\"has-text-align-left\" data-align=\"left\">Activity<\/th><\/tr><\/thead><tbody><tr><td>0\u20135 min<\/td><td>SCA and Dependency-Check overview<\/td><\/tr><tr><td>5\u201312 min<\/td><td>Environment and installation verification<\/td><\/tr><tr><td>12\u201318 min<\/td><td>Clone the real sample application<\/td><\/tr><tr><td>18\u201332 min<\/td><td>Run the first Dependency-Check scan<\/td><\/tr><tr><td>32\u201343 min<\/td><td>Read the HTML report<\/td><\/tr><tr><td>43\u201350 min<\/td><td>CVE, CVSS, severity, evidence, and false positives<\/td><\/tr><tr><td>50\u201355 min<\/td><td>JSON report + simple security gate<\/td><\/tr><tr><td>55\u201360 min<\/td><td>CI\/CD placement, validation, recap<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. What Is OWASP Dependency-Check?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">OWASP Dependency-Check is a Software Composition Analysis tool that identifies publicly disclosed vulnerabilities in third-party software components used by an application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simplified workflow is:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Application source code\n        \u2193\nDependency manifests \/ packages\n        \u2193\nOWASP Dependency-Check\n        \u2193\nComponent identification\n        \u2193\nKnown vulnerability matching\n        \u2193\nCVE \/ CVSS information\n        \u2193\nHTML \/ <span class=\"hljs-built_in\">JSON<\/span> \/ XML \/ SARIF reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Dependency-Check helps answer questions such as:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">What third-party components are we using?\n        \u2193\nAre known vulnerabilities associated <span class=\"hljs-keyword\">with<\/span> those components?\n        \u2193\nHow severe are the findings?\n        \u2193\nDo the findings actually apply to our application?\n        \u2193\nShould we upgrade, mitigate, suppress, or investigate further?\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Key lesson:<\/strong>&nbsp;A Dependency-Check finding is a security signal that requires analysis. It is not automatic proof that the application is exploitable.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Prerequisites<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Student workstation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended environment:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Ubuntu 22.04\/24.04+ or current macOS\nJava 17\nGit\nunzip\nInternet access\nOWASP Dependency-Check 13.0.0\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Recommended resources:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">CPU<\/span>: 2+ cores\n<span class=\"hljs-attribute\">RAM<\/span>: 4 GB minimum, 8 GB recommended\n<span class=\"hljs-attribute\">Disk<\/span>: 3+ GB free for the lab and vulnerability data\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Verify Java<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">java -version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">openjdk<\/span> <span class=\"hljs-selector-tag\">version<\/span> \"17<span class=\"hljs-selector-class\">.x<\/span><span class=\"hljs-selector-class\">.x<\/span>\"\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Verify Git<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">git --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">git<\/span> <span class=\"hljs-selector-tag\">version<\/span> 2<span class=\"hljs-selector-class\">.x<\/span><span class=\"hljs-selector-class\">.x<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Install Dependency-Check<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">If the instructor has already prepared Dependency-Check, students can skip directly to&nbsp;<strong>Installation Verification<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Linux\/macOS \u2014 CLI distribution<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a lab tools directory:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">mkdir -p ~\/odc-lab\ncd ~\/odc-lab\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Download the 13.0.0 CLI distribution:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl -LO https:<span class=\"hljs-comment\">\/\/github.com\/dependency-check\/DependencyCheck\/releases\/download\/v13.0.0\/dependency-check-13.0.0-release.zip<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Extract it:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">unzip<\/span> <span class=\"hljs-selector-tag\">dependency-check-13<\/span><span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0-release<\/span><span class=\"hljs-selector-class\">.zip<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The executable is located under:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">dependency-check\/bin\/\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Installation Verification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">.\/dependency-check\/bin\/dependency-check.sh --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected result:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Dependency-Check<\/span> <span class=\"hljs-selector-tag\">Core<\/span> <span class=\"hljs-selector-tag\">version<\/span> 13<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">On Windows, use&nbsp;<code>dependency-check.bat<\/code>&nbsp;instead of&nbsp;<code>dependency-check.sh<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Instructor Preparation \u2014 Do This Before Class<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A first-time vulnerability database update can consume much of a 60-minute lab. Pre-populate the data directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create a reusable data directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mkdir -p ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>odc-data\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If an NVD API key is available:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">export<\/span> NVD_API_KEY=<span class=\"hljs-string\">\"YOUR_NVD_API_KEY\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Populate\/update Dependency-Check data:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh \\\n  --updateonly \\\n  --data ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>odc-data \\\n  --nvdApiKey <span class=\"hljs-string\">\"$NVD_API_KEY\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If no API key is available, the instructor can perform the update without&nbsp;<code>--nvdApiKey<\/code>, but updates can be considerably slower and are more likely to encounter rate limiting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the live class, reuse the same data directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>odc-data\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Clone the Real Sample Application<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For this quick demo we use&nbsp;<strong>OWASP NodeGoat<\/strong>, a deliberately vulnerable application maintained for security training.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Clone NodeGoat<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/odc-lab\ngit <span class=\"hljs-keyword\">clone<\/span> https:<span class=\"hljs-comment\">\/\/github.com\/OWASP\/NodeGoat.git<\/span>\ncd NodeGoat\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Pin the lab revision<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">git checkout 9336e34\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output is similar to:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">HEAD is now at 9336e34 ...\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Confirm dependency files<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">ls<\/span> <span class=\"hljs-selector-tag\">package<\/span><span class=\"hljs-selector-class\">.json<\/span> <span class=\"hljs-selector-tag\">package-lock<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">package-lock<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<span class=\"hljs-selector-tag\">package<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Why pin the commit?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Using an immutable Git commit keeps the training project stable even if the NodeGoat default branch changes later.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Understand the Project Before Scanning<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Inspect the beginning of the dependency manifest:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">head<\/span> <span class=\"hljs-selector-tag\">-40<\/span> <span class=\"hljs-selector-tag\">package<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Optional quick dependency search:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">grep -n <span class=\"hljs-string\">'marked'<\/span> package.json package-lock.json | head\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The pinned training revision contains intentionally old dependencies. This gives Dependency-Check useful material to analyze.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">We are&nbsp;<strong>not<\/strong>&nbsp;trying to run NodeGoat in this lab. The goal is to analyze its third-party dependencies.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Run the First Dependency-Check Scan<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create a report directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mkdir -p ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">From the NodeGoat directory, run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh \\\n  --project <span class=\"hljs-string\">\"OWASP NodeGoat Quick Lab\"<\/span> \\\n  --scan . \\\n  --data ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>odc-data \\\n  --format HTML \\\n  --out ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If the environment is not pre-populated and an NVD API key is available, add:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">--nvdApiKey <span class=\"hljs-string\">\"$NVD_API_KEY\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">What Dependency-Check is doing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">During the scan it broadly performs this sequence:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Read application files\n        \u2193\nIdentify dependencies\n        \u2193\nCollect evidence about components\n        \u2193\nMatch components to vulnerability intelligence\n        \u2193\nAssociate possible CVEs\n        \u2193\nGenerate the report\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Expected completion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The output should eventually indicate that analysis completed and that a report was written.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do&nbsp;<strong>not<\/strong>&nbsp;expect an identical number of vulnerabilities every time. Vulnerability intelligence can change independently of the pinned application source code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Locate the HTML Report<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">List the output directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ls -lh ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">You should see:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">dependency-check-report<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Open the report<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">macOS<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">open ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\/dependency-check-report.html\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Linux desktop<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">xdg-open ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\/dependency-check-report.html\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If a graphical browser is not available, copy the report to a workstation with a browser.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Read the HTML Report<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Spend several minutes examining one vulnerable dependency.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For one finding, identify these fields:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Dependency \/ component\n        \u2193\nDetected version\n        \u2193\nEvidence \/ identifiers\n        \u2193\nCVE\n        \u2193\nSeverity\n        \u2193\nCVSS score\n        \u2193\nVulnerability description\n        \u2193\nReferences\n        \u2193\nAffected-version information\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">What the fields mean<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Field<\/th><th class=\"has-text-align-left\" data-align=\"left\">Meaning<\/th><\/tr><\/thead><tbody><tr><td>Dependency<\/td><td>The library or component being analyzed<\/td><\/tr><tr><td>Version<\/td><td>Version Dependency-Check identified<\/td><\/tr><tr><td>CVE<\/td><td>Public vulnerability identifier<\/td><\/tr><tr><td>CVSS<\/td><td>Numerical severity score supplied by the vulnerability source<\/td><\/tr><tr><td>Severity<\/td><td>Human-readable severity classification<\/td><\/tr><tr><td>Evidence<\/td><td>Information used to identify the component<\/td><\/tr><tr><td>CPE \/ identifiers<\/td><td>Component identity information used during matching where applicable<\/td><\/tr><tr><td>Description<\/td><td>Summary of the vulnerability<\/td><\/tr><tr><td>References<\/td><td>Vendor, advisory, NVD, patch, or other supporting links<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. CVE and CVSS \u2014 5-Minute Explanation<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">CVE<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CVE means&nbsp;<strong>Common Vulnerabilities and Exposures<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example pattern:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">CVE-YYYY-NNNNN\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A CVE identifies a publicly disclosed vulnerability. It does not by itself tell you whether your application is exploitable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CVSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CVSS means&nbsp;<strong>Common Vulnerability Scoring System<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical interpretation:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-right\" data-align=\"right\">CVSS score<\/th><th class=\"has-text-align-left\" data-align=\"left\">Common severity label<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-right\" data-align=\"right\">0.0<\/td><td>None<\/td><\/tr><tr><td class=\"has-text-align-right\" data-align=\"right\">0.1\u20133.9<\/td><td>Low<\/td><\/tr><tr><td class=\"has-text-align-right\" data-align=\"right\">4.0\u20136.9<\/td><td>Medium<\/td><\/tr><tr><td class=\"has-text-align-right\" data-align=\"right\">7.0\u20138.9<\/td><td>High<\/td><\/tr><tr><td class=\"has-text-align-right\" data-align=\"right\">9.0\u201310.0<\/td><td>Critical<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The score helps prioritize investigation, but it must be combined with application context.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Detection Is Not the Same as Confirmation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Teach students this workflow:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Dependency-Check finding\n        \u2193\nIs the dependency really present?\n        \u2193\nIs the detected version correct?\n        \u2193\nDoes the CVE apply to that version?\n        \u2193\nDoes our application use the vulnerable functionality?\n        \u2193\nIs the component reachable\/exploitable <span class=\"hljs-keyword\">in<\/span> our deployment?\n        \u2193\nUpgrade \/ mitigate \/ investigate \/ suppress <span class=\"hljs-keyword\">with<\/span> justification\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Useful terms<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Detected vulnerability<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dependency-Check found a relationship between a component and vulnerability intelligence.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Confirmed vulnerability<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Engineering\/security analysis confirms that the vulnerable component\/version and relevant conditions apply.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">False positive<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The tool associated a vulnerability with the dependency incorrectly or the identification is not applicable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Needs investigation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The tool has provided enough evidence to justify review, but the team has not yet confirmed applicability or exploitability.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Never teach teams to suppress a finding simply because they do not want the pipeline to fail.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Generate a JSON Report<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Machine-readable output is useful for CI\/CD and security tooling.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh \\\n  --project <span class=\"hljs-string\">\"OWASP NodeGoat Quick Lab\"<\/span> \\\n  --scan . \\\n  --data ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>odc-data \\\n  --format <span class=\"hljs-built_in\">JSON<\/span> \\\n  --out ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check the directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ls -lh ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">You should now see a JSON report in addition to the HTML report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical uses:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">HTML  \u2192 Human review\n<span class=\"hljs-built_in\">JSON<\/span>  \u2192 Automation \/ parsing \/ CI tools\nXML   \u2192 Integrations\nSARIF \u2192 Security\/code-scanning platforms that consume SARIF\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Quick Security-Gate Demo<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Dependency-Check can return a failing exit status when findings meet or exceed a configured CVSS threshold.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a demonstration threshold of&nbsp;<strong>7.0<\/strong>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh \\\n  --project <span class=\"hljs-string\">\"OWASP NodeGoat Gate Demo\"<\/span> \\\n  --scan . \\\n  --data ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>odc-data \\\n  --format HTML \\\n  --out ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports \\\n  --failOnCVSS <span class=\"hljs-number\">7<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Immediately inspect the shell exit code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">echo<\/span> $?\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Scan\n \u2193\nFind vulnerabilities\n \u2193\nEvaluate CVSS scores\n \u2193\nCompare <span class=\"hljs-keyword\">with<\/span> threshold\n \u2193\nReturn pass\/fail status\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Important distinction<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Report generation \u2260 vulnerability remediation\n\nSecurity gate \u2260 vulnerability proof\n\nBuild failure \u2260 application compromise\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A production threshold should be set by an organization&#8217;s risk policy, not copied blindly from this training example.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Where Dependency-Check Fits in CI\/CD<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A simple pipeline placement is:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Developer\n   \u2193\nGit push \/ Pull request\n   \u2193\nCI pipeline\n   \u2193\nRestore\/install dependencies\n   \u2193\nOWASP Dependency-Check\n   \u2193\nPublish security report\n   \u2193\nSecurity gate\n   \u2193\nBuild \/ Test \/ Deploy\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Typical automation pattern:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-number\">1.<\/span> Cache or centrally maintain Dependency-Check vulnerability data.\n<span class=\"hljs-number\">2.<\/span> Scan the application during CI.\n<span class=\"hljs-number\">3.<\/span> Save HTML\/<span class=\"hljs-built_in\">JSON<\/span>\/SARIF <span class=\"hljs-keyword\">as<\/span> artifacts.\n<span class=\"hljs-number\">4.<\/span> Apply an agreed policy threshold.\n<span class=\"hljs-number\">5.<\/span> Investigate findings.\n<span class=\"hljs-number\">6.<\/span> Upgrade or mitigate vulnerable components.\n<span class=\"hljs-number\">7.<\/span> Use documented suppressions only <span class=\"hljs-keyword\">for<\/span> justified <span class=\"hljs-literal\">false<\/span> positives\/not-applicable findings.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. Essential CLI Options for This Lab<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Option<\/th><th class=\"has-text-align-left\" data-align=\"left\">Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>--project<\/code><\/td><td>Sets the project name shown in the report<\/td><\/tr><tr><td><code>--scan<\/code><\/td><td>Specifies the file\/directory to analyze<\/td><\/tr><tr><td><code>--out<\/code><\/td><td>Specifies where reports are written<\/td><\/tr><tr><td><code>--format<\/code><\/td><td>Selects report format<\/td><\/tr><tr><td><code>--data<\/code><\/td><td>Specifies the Dependency-Check local data directory<\/td><\/tr><tr><td><code>--nvdApiKey<\/code><\/td><td>Supplies an NVD API key for vulnerability-data updates<\/td><\/tr><tr><td><code>--updateonly<\/code><\/td><td>Updates Dependency-Check data without running a project scan<\/td><\/tr><tr><td><code>--failOnCVSS<\/code><\/td><td>Returns a failing status when the threshold is met\/exceeded<\/td><\/tr><tr><td><code>--version<\/code><\/td><td>Displays the installed Dependency-Check version<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For a quick lab, students do&nbsp;<strong>not<\/strong>&nbsp;need the full CLI option catalogue.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Three Student Tasks<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Task 1 \u2014 Verify and Scan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then complete an HTML scan of NodeGoat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Student can show:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Dependency-Check<\/span> 13<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<span class=\"hljs-selector-tag\">and<\/span>\n<span class=\"hljs-selector-tag\">dependency-check-report<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Task 2 \u2014 Investigate One Finding<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Choose one dependency from the HTML report and record:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Dependency:\nVersion:\nCVE:\nCVSS:\nSeverity:\nWhat evidence identified the component?\nWhat should be investigated before calling it exploitable?\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Student can explain why:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-string\">\"CVE detected\"<\/span> does not automatically mean <span class=\"hljs-string\">\"application exploitable.\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Task 3 \u2014 Demonstrate a Gate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run the scan with:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">--failOnCVSS 7\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then inspect:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">echo<\/span> $?\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-37\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Student can explain that the exit status can be consumed by a CI system as a security gate.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Quick Troubleshooting<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Problem \u2014 Java command not found<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause:<\/strong>&nbsp;Java is not installed or is not on&nbsp;<code>PATH<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Check:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">java -version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Solution:<\/strong>&nbsp;Install a supported Java runtime. Java 17 is recommended for this lab.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem \u2014&nbsp;<code>dependency-check.sh<\/code>&nbsp;permission denied<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check permissions:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ls -l ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If required:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-39\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">chmod +x ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-40\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>dependency-check\/bin\/dependency-check.sh --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-40\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem \u2014 First scan is extremely slow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Likely cause:<\/strong>&nbsp;Vulnerability data is being downloaded for the first time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Best lab solution:<\/strong>&nbsp;Pre-populate and reuse the&nbsp;<code>--data<\/code>&nbsp;directory before class.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem \u2014 NVD update errors or rate limiting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Likely causes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No NVD API key.<\/li>\n\n\n\n<li>API rate limiting.<\/li>\n\n\n\n<li>Proxy\/firewall restrictions.<\/li>\n\n\n\n<li>Temporary network issues.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lab solution:<\/strong>&nbsp;Use the instructor-prepared Dependency-Check data directory rather than spending class time rebuilding it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem \u2014 No report appears<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Confirm the requested output directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-41\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ls -lah ~<span class=\"hljs-regexp\">\/odc-lab\/<\/span>reports\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-41\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then confirm the scan path exists:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-42\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">pwd<\/span>\n<span class=\"hljs-selector-tag\">ls<\/span> <span class=\"hljs-selector-tag\">package<\/span><span class=\"hljs-selector-class\">.json<\/span> <span class=\"hljs-selector-tag\">package-lock<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-42\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem \u2014 Many findings appear<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That can be expected for a deliberately vulnerable training application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not try to fix every finding during the 1-hour demo. Pick one finding and teach the investigation process.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. Lab Validation Checklist<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">At the end of the session, students should be able to check:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-43\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&#91; ] Java works\n&#91; ] Git works\n&#91; ] Dependency-Check <span class=\"hljs-number\">13.0<\/span><span class=\"hljs-number\">.0<\/span> is available\n&#91; ] NodeGoat is cloned\n&#91; ] Commit <span class=\"hljs-number\">9336e34<\/span> is checked out\n&#91; ] Dependency-Check data is available\n&#91; ] HTML scan completed\n&#91; ] HTML report opened\n&#91; ] One dependency was investigated\n&#91; ] One CVE was identified\n&#91; ] CVSS\/severity were interpreted\n&#91; ] <span class=\"hljs-built_in\">JSON<\/span> output was demonstrated\n&#91; ] failOnCVSS security gate was demonstrated\n&#91; ] CI\/CD placement is understood\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-43\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. Five-Minute Knowledge Check<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">1. What problem does Dependency-Check help solve?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;It helps identify known vulnerabilities associated with third-party software components used by an application.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Does a reported CVE automatically prove the application is exploitable?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;No. The finding must be validated in the context of the actual dependency, version, use, and deployment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Why can the first Dependency-Check run take much longer?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;Dependency-Check may need to download and build\/update its local vulnerability data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Which report is easiest for a person to review?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;HTML.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Why generate JSON or SARIF?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;They are machine-readable formats suitable for automation and security\/tool integrations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. What does&nbsp;<code>--failOnCVSS 7<\/code>&nbsp;demonstrate?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;A CI\/security gate that returns a failing status when a finding reaches the configured CVSS threshold.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. Should suppression be used to make an uncomfortable finding disappear?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Answer:<\/strong>&nbsp;No. Suppression should be documented and justified for false positives or findings determined not to apply.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. Key Takeaways<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-44\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-number\">1.<\/span> Dependency-Check is an SCA tool.\n\n<span class=\"hljs-number\">2.<\/span> It analyzes application dependencies and matches them <span class=\"hljs-keyword\">with<\/span> known vulnerability intelligence.\n\n<span class=\"hljs-number\">3.<\/span> A finding is the beginning <span class=\"hljs-keyword\">of<\/span> investigation\u2014not the end.\n\n<span class=\"hljs-number\">4.<\/span> CVE identifies the vulnerability; CVSS helps communicate severity.\n\n<span class=\"hljs-number\">5.<\/span> HTML is useful <span class=\"hljs-keyword\">for<\/span> people; <span class=\"hljs-built_in\">JSON<\/span>\/XML\/SARIF are useful <span class=\"hljs-keyword\">for<\/span> automation and integrations.\n\n<span class=\"hljs-number\">6.<\/span> Dependency-Check can participate <span class=\"hljs-keyword\">in<\/span> a CI\/CD security gate using failOnCVSS.\n\n<span class=\"hljs-number\">7.<\/span> Pre-populating the vulnerability database is essential <span class=\"hljs-keyword\">for<\/span> a smooth <span class=\"hljs-number\">1<\/span>-hour classroom demo.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-44\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">23. Trainer Quick-Run Commands<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use these commands for the live demo after the Dependency-Check data directory has been prepared.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># 1. Verify Dependency-Check<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\n~\/odc-lab\/dependency-check\/bin\/dependency-check.sh --version\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># 2. Clone and pin NodeGoat<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\ncd ~\/odc-lab\ngit clone https:\/\/github.com\/OWASP\/NodeGoat.git\ncd NodeGoat\ngit checkout 9336e34\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># 3. HTML scan<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\nmkdir -p ~\/odc-lab\/reports\n~\/odc-lab\/dependency-check\/bin\/dependency-check.sh \\\n  --project \"OWASP NodeGoat Quick Lab\" \\\n  --scan . \\\n  --data ~\/odc-lab\/odc-data \\\n  --format HTML \\\n  --out ~\/odc-lab\/reports\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># 4. Inspect output<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\nls -lh ~\/odc-lab\/reports\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># 5. JSON scan<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\n~\/odc-lab\/dependency-check\/bin\/dependency-check.sh \\\n  --project \"OWASP NodeGoat Quick Lab\" \\\n  --scan . \\\n  --data ~\/odc-lab\/odc-data \\\n  --format JSON \\\n  --out ~\/odc-lab\/reports\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># 6. Security-gate demo<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\n~\/odc-lab\/dependency-check\/bin\/dependency-check.sh \\\n  --project \"OWASP NodeGoat Gate Demo\" \\\n  --scan . \\\n  --data ~\/odc-lab\/odc-data \\\n  --format HTML \\\n  --out ~\/odc-lab\/reports \\\n  --failOnCVSS 7\n\necho $?\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-45\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">24. Trainer Notes<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For a successful one-hour delivery:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prepare the Dependency-Check vulnerability data\u00a0<strong>before<\/strong>\u00a0students arrive.<\/li>\n\n\n\n<li>Do not spend classroom time troubleshooting NVD downloads unless update troubleshooting is the lesson.<\/li>\n\n\n\n<li>Demonstrate only one or two findings in depth.<\/li>\n\n\n\n<li>Emphasize evidence and investigation rather than vulnerability counts.<\/li>\n\n\n\n<li>Avoid turning the session into a complete SCA governance course.<\/li>\n\n\n\n<li>Use the CVSS threshold only to explain how a gate works; do not present\u00a0<code>7.0<\/code>\u00a0as a universal production policy.<\/li>\n\n\n\n<li>End by showing where the scan would run in CI\/CD rather than configuring a full pipeline during the hour.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">25. Official References<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use these source categories when expanding the lab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OWASP Dependency-Check documentation<\/li>\n\n\n\n<li>Dependency-Check official GitHub repository and releases<\/li>\n\n\n\n<li>NVD API documentation<\/li>\n\n\n\n<li>OWASP NodeGoat repository<\/li>\n\n\n\n<li>Official CI platform documentation when implementing pipeline integration<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For instructor-led delivery, verify the Dependency-Check release and upstream documentation again before reusing this lab in a future semester or training cycle.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Level:&nbsp;Beginner \/ Basic DevSecOpsDuration:&nbsp;60 minutesFormat:&nbsp;Instructor-led hands-on demoFocus:&nbsp;Install \u2192 scan a real project \u2192 read findings \u2192 understand CVE\/CVSS \u2192 generate reports \u2192 demonstrate a simple security gate&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-78842","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/78842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=78842"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/78842\/revisions"}],"predecessor-version":[{"id":78843,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/78842\/revisions\/78843"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=78842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=78842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=78842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}