Security audit workflow - vulnerability scan โ verification
npx skills add hardw00t/ai-security-arsenal --skill "sca-security"
Install specific skill from multi-skill repository
# Description
Software Composition Analysis skill for identifying vulnerable dependencies, license compliance, and supply chain security. This skill should be used when scanning dependencies for CVEs, analyzing SBOM (Software Bill of Materials), checking license compliance, auditing npm/pip/maven/cargo packages, or assessing supply chain risks. Triggers on requests to scan dependencies, check for vulnerable packages, generate SBOM, analyze license compliance, or audit software supply chain.
# SKILL.md
name: sca-security
description: "Software Composition Analysis skill for identifying vulnerable dependencies, license compliance, and supply chain security. This skill should be used when scanning dependencies for CVEs, analyzing SBOM (Software Bill of Materials), checking license compliance, auditing npm/pip/maven/cargo packages, or assessing supply chain risks. Triggers on requests to scan dependencies, check for vulnerable packages, generate SBOM, analyze license compliance, or audit software supply chain."
Software Composition Analysis (SCA)
This skill enables comprehensive analysis of software dependencies for security vulnerabilities, license compliance, and supply chain risks using tools like Snyk, OWASP Dependency-Check, Trivy, Grype, and various ecosystem-specific scanners.
When to Use This Skill
This skill should be invoked when:
- Scanning project dependencies for known vulnerabilities
- Generating and analyzing Software Bill of Materials (SBOM)
- Checking license compliance for open source components
- Auditing npm, pip, Maven, Cargo, Go modules
- Assessing supply chain security risks
- Integrating dependency scanning into CI/CD
Trigger Phrases
- "scan dependencies for vulnerabilities"
- "check package security"
- "generate SBOM"
- "license compliance check"
- "audit npm packages"
- "supply chain security scan"
Prerequisites
Required Tools
| Tool | Purpose | Installation |
|---|---|---|
| Trivy | Multi-ecosystem scanner | brew install trivy |
| Grype | Vulnerability scanner | brew install grype |
| Syft | SBOM generator | brew install syft |
| OWASP Dependency-Check | Java-focused scanner | Download from GitHub |
| Snyk CLI | Commercial scanner | npm install -g snyk |
| npm audit | Node.js native | Built into npm |
| pip-audit | Python packages | pip install pip-audit |
| cargo audit | Rust crates | cargo install cargo-audit |
| OSV-Scanner | Google OSV database | go install github.com/google/osv-scanner/cmd/osv-scanner@latest |
Quick Start Workflow
1. **Identify Package Ecosystem**
- Node.js (package.json, package-lock.json, yarn.lock)
- Python (requirements.txt, Pipfile.lock, poetry.lock)
- Java (pom.xml, build.gradle)
- .NET (packages.config, *.csproj)
- Rust (Cargo.lock)
- Go (go.mod, go.sum)
- Ruby (Gemfile.lock)
- PHP (composer.lock)
2. **Generate SBOM**
- Use Syft for comprehensive SBOM
- Export in CycloneDX or SPDX format
3. **Vulnerability Scan**
- Run Trivy/Grype against SBOM or directory
- Check ecosystem-specific tools
4. **License Analysis**
- Extract license information
- Check compliance with policy
5. **Remediation**
- Upgrade vulnerable packages
- Replace deprecated dependencies
- Document accepted risks
6. **CI/CD Integration**
- Add scanning to pipeline
- Set failure thresholds
- Generate reports
SBOM Generation
Syft SBOM Creation
# Scan directory
syft dir:/path/to/project
# Scan container image
syft nginx:latest
# Output formats
syft dir:. -o json > sbom.json
syft dir:. -o cyclonedx-json > sbom-cyclonedx.json
syft dir:. -o spdx-json > sbom-spdx.json
syft dir:. -o table
# Scan specific package files
syft file:package-lock.json
syft file:requirements.txt
# Include file metadata
syft dir:. -o json --file-metadata
CycloneDX Native Tools
# Node.js
npx @cyclonedx/cyclonedx-npm --output-file sbom.json
# Python
pip install cyclonedx-bom
cyclonedx-py environment -o sbom.json
# Java/Maven
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
# .NET
dotnet tool install --global CycloneDX
dotnet CycloneDX project.csproj -o sbom.json
# Go
go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest
cyclonedx-gomod mod -json > sbom.json
Vulnerability Scanning
Trivy Dependency Scanning
# Scan filesystem for vulnerabilities
trivy fs /path/to/project
# Scan specific file
trivy fs --scanners vuln package-lock.json
# Filter by severity
trivy fs --severity HIGH,CRITICAL .
# Output formats
trivy fs -f json -o results.json .
trivy fs -f sarif -o results.sarif .
trivy fs -f table .
# Ignore unfixed vulnerabilities
trivy fs --ignore-unfixed .
# Exit code on findings
trivy fs --exit-code 1 --severity CRITICAL .
# Scan SBOM
trivy sbom sbom.json
Grype Scanning
# Scan directory
grype dir:/path/to/project
# Scan SBOM
grype sbom:./sbom.json
# Output formats
grype dir:. -o json > results.json
grype dir:. -o table
grype dir:. -o cyclonedx > results-sbom.xml
# Fail on severity
grype dir:. --fail-on high
# Only show fixed vulnerabilities
grype dir:. --only-fixed
OSV-Scanner
# Scan directory
osv-scanner -r /path/to/project
# Scan specific lockfile
osv-scanner --lockfile package-lock.json
# Scan SBOM
osv-scanner --sbom sbom.json
# Output formats
osv-scanner -r . --format json > results.json
osv-scanner -r . --format table
# Experimental call analysis (Go)
osv-scanner -r --experimental-call-analysis .
OWASP Dependency-Check
# Basic scan
dependency-check --project "MyProject" --scan /path/to/project
# Specific formats
dependency-check --project "MyProject" --scan . \
--format HTML --format JSON --out reports/
# Fail on CVSS score
dependency-check --project "MyProject" --scan . \
--failOnCVSS 7
# Update NVD database
dependency-check --updateonly
# Suppress false positives
dependency-check --project "MyProject" --scan . \
--suppression suppressions.xml
Ecosystem-Specific Scanning
Node.js / npm
# npm audit
npm audit
npm audit --json > audit.json
npm audit fix
npm audit fix --force # May introduce breaking changes
# Yarn
yarn audit
yarn audit --json > audit.json
# pnpm
pnpm audit
pnpm audit --json > audit.json
# Snyk
snyk test
snyk test --json > snyk.json
snyk monitor # Continuous monitoring
Python
# pip-audit
pip-audit
pip-audit -r requirements.txt
pip-audit -f json -o audit.json
pip-audit --fix # Auto-upgrade packages
# Safety (PyUp.io)
pip install safety
safety check
safety check -r requirements.txt --json > safety.json
# Bandit for code + dependencies
bandit -r . -f json -o bandit.json
# Snyk
snyk test --file=requirements.txt
Java / Maven
# OWASP Dependency-Check Maven Plugin
mvn org.owasp:dependency-check-maven:check
# SpotBugs with security plugin
mvn com.github.spotbugs:spotbugs-maven-plugin:check
# Snyk
snyk test --file=pom.xml
snyk test --all-projects # Multi-module
# Gradle
./gradlew dependencyCheckAnalyze
Go
# govulncheck (official)
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
# Nancy (Sonatype)
go install github.com/sonatype-nexus-community/nancy@latest
go list -json -deps ./... | nancy sleuth
# Snyk
snyk test --file=go.mod
Rust
# cargo-audit
cargo install cargo-audit
cargo audit
cargo audit --json > audit.json
# cargo-deny (licenses + advisories)
cargo install cargo-deny
cargo deny check
# Snyk
snyk test --file=Cargo.toml
Ruby
# Bundler audit
gem install bundler-audit
bundle-audit check
bundle-audit check --update
# Snyk
snyk test --file=Gemfile.lock
.NET
# dotnet list vulnerable packages
dotnet list package --vulnerable
# Snyk
snyk test --file=project.csproj
# OWASP Dependency-Check
dependency-check --project "DotNetProject" --scan . \
--enableExperimental
PHP
# Composer audit
composer audit
# Local PHP Security Checker
symfony security:check
# Snyk
snyk test --file=composer.lock
License Compliance
License Detection
# Syft with license info
syft dir:. -o json | jq '.artifacts[].licenses'
# licensee (GitHub)
gem install licensee
licensee detect .
# license-checker (npm)
npx license-checker --json > licenses.json
npx license-checker --onlyAllow 'MIT;Apache-2.0;BSD-3-Clause'
# pip-licenses (Python)
pip install pip-licenses
pip-licenses --format=json > licenses.json
pip-licenses --fail-on "GPL"
License Categories
## Permissive (Generally Safe)
- MIT
- Apache 2.0
- BSD-2-Clause / BSD-3-Clause
- ISC
- Unlicense
## Copyleft (Requires Review)
- GPL v2 / v3
- LGPL v2.1 / v3
- AGPL v3
- MPL 2.0
## Restrictive / Commercial
- Proprietary
- Commercial
- Source-available
## Unknown / Custom
- Requires manual review
- May need legal consultation
License Policy Enforcement
# .licensepolicy.yaml
allowed:
- MIT
- Apache-2.0
- BSD-2-Clause
- BSD-3-Clause
- ISC
denied:
- GPL-2.0
- GPL-3.0
- AGPL-3.0
exceptions:
- package: some-gpl-package
license: GPL-2.0
reason: "Used only at build time, not distributed"
Supply Chain Security
Dependency Confusion Prevention
## Checks
- [ ] Private registry configured
- [ ] Scoped packages used (@company/package)
- [ ] Registry priority enforced
- [ ] Lock files committed
- [ ] Integrity hashes verified
## npm Configuration
// .npmrc
registry=https://registry.npmjs.org/
@company:registry=https://npm.company.com/
## pip Configuration
// pip.conf
[global]
index-url = https://pypi.company.com/simple/
extra-index-url = https://pypi.org/simple/
Typosquatting Detection
# Check for similar package names
# Manual: Compare with official package names
# Automated tools
# - Snyk monitors for typosquatting
# - Socket.dev detects suspicious packages
# - npm diff to compare packages
Lockfile Integrity
# npm
npm ci # Clean install from lockfile
npm install --package-lock-only # Update lockfile only
# pip
pip-compile requirements.in # Generate locked requirements
pip install --require-hashes -r requirements.txt
# Go
go mod verify
# Cargo
cargo check --locked
Provenance & Signing
# npm provenance
npm publish --provenance # Sign with OIDC
# Sigstore / cosign
cosign sign package.tar.gz
cosign verify package.tar.gz
# Go module checksums
# Automatically verified via sum.golang.org
# Python (PEP 458)
# Experimental TUF support
CI/CD Integration
GitHub Actions
name: Dependency Scan
on:
push:
branches: [main]
pull_request:
schedule:
- cron: '0 0 * * *' # Daily
jobs:
trivy-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
severity: 'HIGH,CRITICAL'
exit-code: '1'
format: 'sarif'
output: 'trivy-results.sarif'
- name: Upload Trivy scan results
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
npm-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm audit --audit-level=high
snyk-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Snyk
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
GitLab CI
stages:
- security
dependency-scan:
stage: security
image: aquasec/trivy:latest
script:
- trivy fs --exit-code 1 --severity HIGH,CRITICAL .
artifacts:
reports:
container_scanning: trivy-results.json
allow_failure: false
npm-audit:
stage: security
image: node:20
script:
- npm ci
- npm audit --audit-level=high
only:
changes:
- package*.json
Pre-commit Hook
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: npm-audit
name: npm audit
entry: bash -c 'npm audit --audit-level=high'
language: system
files: package-lock.json
- id: pip-audit
name: pip-audit
entry: pip-audit
language: python
files: requirements.txt
Vulnerability Database Sources
Primary Sources
| Database | URL | Coverage |
|---|---|---|
| NVD | nvd.nist.gov | CVEs (all) |
| GitHub Advisory | github.com/advisories | Multi-ecosystem |
| OSV | osv.dev | Multi-ecosystem |
| Snyk Vuln DB | snyk.io | Commercial |
| PyPI Advisory | pypi.org | Python |
| npm Registry | npmjs.com | Node.js |
| RustSec | rustsec.org | Rust |
| Go Vuln DB | vuln.go.dev | Go |
Updating Databases
# Trivy
trivy image --download-db-only
# Grype
grype db update
# OWASP Dependency-Check
dependency-check --updateonly
# OSV-Scanner
# Auto-updates from osv.dev API
Remediation Strategies
Upgrade Path Analysis
# npm
npm outdated
npm update
npm install package@latest
# pip
pip list --outdated
pip install --upgrade package
# Maven
mvn versions:display-dependency-updates
# Cargo
cargo update
cargo outdated
Vulnerability Suppression
<!-- dependency-check suppression.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
<suppress>
<notes>False positive - not using vulnerable feature</notes>
<packageUrl regex="true">^pkg:npm/example-package@.*$</packageUrl>
<cve>CVE-2021-XXXXX</cve>
</suppress>
</suppressions>
# .trivyignore
CVE-2021-XXXXX
CVE-2022-YYYYY
# Snyk .snyk file
version: v1.5.0
ignore:
SNYK-JS-EXAMPLE-123456:
- '*':
reason: 'Not exploitable in our usage'
expires: 2024-12-31
Remediation Checklist
### For Each Vulnerability
- [ ] Verify vulnerability applies to usage
- [ ] Check if patch/upgrade available
- [ ] Test upgrade compatibility
- [ ] Document if accepting risk
- [ ] Set review date for unresolved
### Priority Matrix
| Severity | Exploitable | Fix Available | Action |
|----------|-------------|---------------|--------|
| Critical | Yes | Yes | Immediate fix |
| Critical | Yes | No | Mitigate/Monitor |
| High | Yes | Yes | Fix within 7 days |
| High | No | Yes | Fix within 30 days |
| Medium | - | Yes | Fix within 90 days |
| Low | - | - | Document/Monitor |
Reporting Template
# Software Composition Analysis Report
## Executive Summary
- Project: [Name]
- Scan date: YYYY-MM-DD
- Total dependencies: X
- Direct dependencies: Y
- Transitive dependencies: Z
- Vulnerabilities: Critical (X) | High (Y) | Medium (Z) | Low (W)
## Vulnerability Summary
### Critical Vulnerabilities
| Package | Version | CVE | CVSS | Fix Version |
|---------|---------|-----|------|-------------|
| lodash | 4.17.20 | CVE-2021-23337 | 9.1 | 4.17.21 |
### High Vulnerabilities
| Package | Version | CVE | CVSS | Fix Version |
|---------|---------|-----|------|-------------|
| axios | 0.21.1 | CVE-2021-3749 | 7.5 | 0.21.2 |
## License Compliance
### License Distribution
| License | Count | Compliance |
|---------|-------|------------|
| MIT | 150 | Approved |
| Apache-2.0 | 45 | Approved |
| GPL-3.0 | 2 | Review Required |
### Flagged Packages
| Package | License | Action |
|---------|---------|--------|
| gpl-package | GPL-3.0 | Requires review |
## SBOM
Full SBOM attached in CycloneDX format.
## Recommendations
1. [P1] Upgrade lodash to 4.17.21
2. [P1] Upgrade axios to 0.21.2
3. [P2] Review GPL-licensed dependencies
4. [P3] Enable automated scanning in CI
Bundled Resources
scripts/
scan_all.sh- Multi-ecosystem dependency scansbom_generate.py- SBOM generation automationlicense_check.py- License compliance checking
references/
vulnerability_databases.md- Database source documentationlicense_guide.md- License compatibility matrixremediation_guide.md- Upgrade strategies
checklists/
sca_audit.md- SCA audit checklistsupply_chain.md- Supply chain security checklistlicense_compliance.md- License compliance checklist
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.