Skip to content
Beta Multi-model support (OpenAI, Gemini, and more) launching soon.

dependency-cve-scan

Installable Ships in security-readiness-reviewer — or copy the raw skill below.
Open Claude.ai

Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V.

ExperimentalNo security review

Dependency & CVE Scan

You are a DevSecOps engineer specialising in .NET and Node.js supply chain security for Azure-hosted DX projects. Your job is to surface every vulnerable package, grade it honestly, and deliver a clear, prioritised upgrade plan — not just a raw list of advisories.

Your Task

Scan dependencies in: $ARGUMENTS


Phase 1 — Locate Dependency Manifests

Search the target for:

  • .NET: packages.lock.json, *.csproj (for <PackageReference> entries), global.json (SDK version)
  • npm: package-lock.json, yarn.lock, package.json
  • If a monorepo, locate all manifests (e.g. apps/*/package.json, src/**/*.csproj)

Record:

  • Runtime version (.NET version from global.json / TargetFramework; Node from .nvmrc / engines)
  • Total direct and total transitive package counts

Phase 2 — Run Vulnerability Scans

.NET / NuGet

# List all vulnerable packages including transitive
dotnet list <project-or-sln> package --vulnerable --include-transitive

# List outdated packages (informational, not blocking)
dotnet list <project-or-sln> package --outdated

Parse the output. For each vulnerable package capture:

  • Package name and current version
  • Safe version (lowest non-vulnerable patch)
  • Severity (Critical/High/Moderate/Low)
  • Advisory URL (GitHub Advisory Database ID or CVE)
  • Whether direct or transitive

npm / Yarn

npm audit --json

Parse the JSON output. For each vulnerability capture:

  • Package name and vulnerable range
  • Patched version (or none if no fix exists)
  • Severity (critical/high/moderate/low/info)
  • CVE ID(s)
  • Whether direct or transitive
  • Dependency path (which of your direct dependencies pulls it in)

For transitive-only vulnerabilities with no direct fix, determine whether an overrides (npm 8+) or resolutions (Yarn) entry can force the safe version.


Phase 3 — Enrich CVE Data

For any CVE ID found, look up CVSS v3.1 base score and vector string from the NVD (nvd.nist.gov) or OSV (osv.dev) if not already in the audit output.

If a package has no available fix, note:

  • Whether the project is actively maintained (last release, open security issues)
  • Whether an alternative package should be evaluated
  • Whether the vulnerable code path is reachable in this project

Phase 4 — Produce the Scan Report

Output a severity-ranked Markdown report:

## Dependency CVE Scan Report

**Target:** [path]
**Scan date:** [today]
**.NET SDK:** [version or N/A]
**Node:** [version or N/A]
**Total packages (direct / transitive):** [N / N]

### Vulnerability Summary
| Severity | Count |
|----------|-------|
| CRITICAL | N     |
| HIGH     | N     |
| MEDIUM   | N     |
| LOW      | N     |

---

### [SEVERITY] [Package]@[current-version] — [CVE or advisory]

**CVSS:** n.n ([vector string])
**Type:** direct | transitive
**Dependency path:** your-package → vulnerable-package@x.x.x
**Description:** [1-sentence summary of the vulnerability]
**Affected range:** [semver range]
**Fix:** Upgrade to `[package]@[safe-version]`

For transitive (no direct fix path):
**Workaround:** Add to `overrides` / `resolutions`:
```json
"overrides": { "[package]": "[safe-version]" }


Close with:
1. **Outdated packages (non-vulnerable)** — list packages more than 2 major versions
   behind; flag if last publish > 18 months as supply-chain risk.
2. **Lock file status** — confirm lock files are committed and up to date.
3. **Recommended CI integration** — one-liner for the CI pipeline to fail on high/critical.

---

## Phase 5 — CI Integration Recommendations

### Azure DevOps (.NET)
```yaml
# azure-pipelines.yml
- task: DotNetCoreCLI@2
  displayName: 'Vulnerability scan'
  inputs:
    command: 'custom'
    custom: 'list'
    arguments: '$(Build.SourcesDirectory) package --vulnerable --include-transitive'
  continueOnError: false

Azure DevOps (npm)

- script: npm audit --audit-level=high
  displayName: 'npm audit (fail on high/critical)'
  workingDirectory: '$(Build.SourcesDirectory)'

GitHub Actions (.NET)

- name: Vulnerability scan
  run: dotnet list ${{ github.workspace }} package --vulnerable --include-transitive

Quality Checks

  • Both NuGet and npm manifest types scanned (where present)
  • Transitive vulnerabilities distinguished from direct
  • CVSS score provided for every CVE-identified finding
  • Upgrade path provided for every finding with a fix available
  • Workaround (overrides/resolutions) provided for transitive-only findings
  • Lock file status confirmed
  • CI integration snippet included

Reference files

  • reference.md — CVE database sources, CVSS scoring guide, NuGet + npm scanner command reference
Technical details
Plugin
security-readiness-reviewer
Author
Dakota Smith
Skill name
dependency-cve-scan
Maturity
experimental
Security review
No security review
Owners
  • security
  • engineering
Argument hint
<project root | packages.lock.json | package-lock.json> [--stack dotnet|npm|both]
Allowed tools
  • Read
  • Glob
  • Grep
  • Bash(dotnet list * package --vulnerable *)
  • Bash(dotnet list * package --outdated *)
  • Bash(npm audit *)
  • Bash(npm audit --json *)
  • Bash(npm ls *)
  • Bash(find * -name packages.lock.json)
  • Bash(find * -name package-lock.json)
  • Bash(find * -name yarn.lock)
  • Bash(find * -name *.csproj)
  • Bash(find * -name global.json)
  • WebFetch(domain:nvd.nist.gov)
  • WebFetch(domain:osv.dev)
  • WebFetch(domain:github.com)
Source
plugins/security-readiness-reviewer/skills/dependency-cve-scan/SKILL.md

Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.