chore: git cache cleanup
This commit is contained in:
317
.github/skills/security-verify-sbom.SKILL.md
vendored
Normal file
317
.github/skills/security-verify-sbom.SKILL.md
vendored
Normal file
@@ -0,0 +1,317 @@
|
||||
````markdown
|
||||
---
|
||||
# agentskills.io specification v1.0
|
||||
name: "security-verify-sbom"
|
||||
version: "1.0.0"
|
||||
description: "Verify SBOM completeness, scan for vulnerabilities, and perform semantic diff analysis"
|
||||
author: "Charon Project"
|
||||
license: "MIT"
|
||||
tags:
|
||||
- "security"
|
||||
- "sbom"
|
||||
- "verification"
|
||||
- "supply-chain"
|
||||
- "vulnerability-scanning"
|
||||
compatibility:
|
||||
os:
|
||||
- "linux"
|
||||
- "darwin"
|
||||
shells:
|
||||
- "bash"
|
||||
requirements:
|
||||
- name: "syft"
|
||||
version: ">=1.17.0"
|
||||
optional: false
|
||||
install_url: "https://github.com/anchore/syft"
|
||||
- name: "grype"
|
||||
version: ">=0.85.0"
|
||||
optional: false
|
||||
install_url: "https://github.com/anchore/grype"
|
||||
- name: "jq"
|
||||
version: ">=1.6"
|
||||
optional: false
|
||||
environment_variables:
|
||||
- name: "SBOM_FORMAT"
|
||||
description: "SBOM format (spdx-json, cyclonedx-json)"
|
||||
default: "spdx-json"
|
||||
required: false
|
||||
- name: "VULN_SCAN_ENABLED"
|
||||
description: "Enable vulnerability scanning"
|
||||
default: "true"
|
||||
required: false
|
||||
parameters:
|
||||
- name: "target"
|
||||
type: "string"
|
||||
description: "Docker image or file path"
|
||||
required: true
|
||||
validation: "^[a-zA-Z0-9:/@._-]+$"
|
||||
- name: "baseline"
|
||||
type: "string"
|
||||
description: "Baseline SBOM file path for comparison"
|
||||
required: false
|
||||
default: ""
|
||||
- name: "vuln_scan"
|
||||
type: "boolean"
|
||||
description: "Run vulnerability scan"
|
||||
required: false
|
||||
default: true
|
||||
outputs:
|
||||
- name: "sbom_file"
|
||||
type: "file"
|
||||
description: "Generated SBOM in SPDX JSON format"
|
||||
- name: "scan_results"
|
||||
type: "stdout"
|
||||
description: "Verification results and vulnerability counts"
|
||||
- name: "exit_code"
|
||||
type: "number"
|
||||
description: "0 if no critical issues, 1 if critical vulnerabilities found, 2 if validation failed"
|
||||
metadata:
|
||||
category: "security"
|
||||
subcategory: "supply-chain"
|
||||
execution_time: "medium"
|
||||
risk_level: "low"
|
||||
ci_cd_safe: true
|
||||
requires_network: true
|
||||
idempotent: true
|
||||
exit_codes:
|
||||
0: "Verification successful"
|
||||
1: "Verification failed or critical vulnerabilities found"
|
||||
2: "Missing dependencies or invalid parameters"
|
||||
---
|
||||
|
||||
# Security: Verify SBOM
|
||||
|
||||
Verify Software Bill of Materials (SBOM) completeness, scan for vulnerabilities, and perform semantic diff analysis.
|
||||
|
||||
## Overview
|
||||
|
||||
This skill generates an SBOM for Docker images or local files, compares it with a baseline (if provided), scans for known vulnerabilities using Grype, and reports any critical security issues. It supports both online vulnerability scanning and air-gapped operation modes.
|
||||
|
||||
## Features
|
||||
|
||||
- Generate SBOM in SPDX format (standardized)
|
||||
- Compare with baseline SBOM (semantic diff)
|
||||
- Scan for vulnerabilities (Critical/High/Medium/Low)
|
||||
- Validate SBOM structure and completeness
|
||||
- Support Docker images and local files
|
||||
- Air-gapped operation support (skip vulnerability scanning)
|
||||
- Detect added/removed packages between builds
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Syft 1.17.0 or higher (for SBOM generation)
|
||||
- Grype 0.85.0 or higher (for vulnerability scanning)
|
||||
- jq 1.6 or higher (for JSON processing)
|
||||
- Internet connection (for vulnerability database updates, unless air-gapped mode)
|
||||
- Docker (if scanning container images)
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic Verification
|
||||
|
||||
Run with default settings (generate SBOM + scan vulnerabilities):
|
||||
|
||||
```bash
|
||||
cd /path/to/charon
|
||||
.github/skills/scripts/skill-runner.sh security-verify-sbom ghcr.io/user/charon:latest
|
||||
```
|
||||
|
||||
### Verify Docker Image with Baseline Comparison
|
||||
|
||||
Compare current SBOM against a known baseline:
|
||||
|
||||
```bash
|
||||
.github/skills/scripts/skill-runner.sh security-verify-sbom \
|
||||
charon:local sbom-baseline.json
|
||||
```
|
||||
|
||||
### Air-Gapped Mode (No Vulnerability Scan)
|
||||
|
||||
Verify SBOM structure only, without network access:
|
||||
|
||||
```bash
|
||||
VULN_SCAN_ENABLED=false .github/skills/scripts/skill-runner.sh \
|
||||
security-verify-sbom charon:local
|
||||
```
|
||||
|
||||
### Custom SBOM Format
|
||||
|
||||
Generate SBOM in CycloneDX format:
|
||||
|
||||
```bash
|
||||
SBOM_FORMAT=cyclonedx-json .github/skills/scripts/skill-runner.sh \
|
||||
security-verify-sbom charon:local
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | Yes | - | Docker image tag or local image name |
|
||||
| baseline | string | No | "" | Path to baseline SBOM for comparison |
|
||||
| vuln_scan | boolean | No | true | Run vulnerability scan (set VULN_SCAN_ENABLED=false to disable) |
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Required | Default | Description |
|
||||
|----------|----------|---------|-------------|
|
||||
| SBOM_FORMAT | No | spdx-json | SBOM format (spdx-json or cyclonedx-json) |
|
||||
| VULN_SCAN_ENABLED | No | true | Enable vulnerability scanning (set to false for air-gapped) |
|
||||
|
||||
## Outputs
|
||||
|
||||
- **Success Exit Code**: 0 (no critical issues found)
|
||||
- **Error Exit Codes**:
|
||||
- 1: Critical vulnerabilities found or verification failed
|
||||
- 2: Missing dependencies or invalid parameters
|
||||
- **Generated Files**:
|
||||
- `sbom-generated.json`: Generated SBOM file
|
||||
- `vuln-results.json`: Vulnerability scan results (if enabled)
|
||||
- **Output**: Verification summary to stdout
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1: Verify Local Docker Image
|
||||
|
||||
```bash
|
||||
$ .github/skills/scripts/skill-runner.sh security-verify-sbom charon:test
|
||||
[INFO] Generating SBOM for charon:test...
|
||||
[SBOM] Generated SBOM contains 247 packages
|
||||
[INFO] Scanning for vulnerabilities...
|
||||
[VULN] Found: 0 Critical, 2 High, 15 Medium, 42 Low
|
||||
[INFO] High vulnerabilities:
|
||||
- CVE-2023-12345 in golang.org/x/crypto (CVSS: 7.5)
|
||||
- CVE-2024-67890 in github.com/example/lib (CVSS: 8.2)
|
||||
[SUCCESS] Verification complete - review High severity vulnerabilities
|
||||
```
|
||||
|
||||
### Example 2: With Baseline Comparison
|
||||
|
||||
```bash
|
||||
$ .github/skills/scripts/skill-runner.sh security-verify-sbom \
|
||||
charon:latest sbom-baseline.json
|
||||
[INFO] Generating SBOM for charon:latest...
|
||||
[SBOM] Generated SBOM contains 247 packages
|
||||
[INFO] Comparing with baseline...
|
||||
[BASELINE] Baseline: 245 packages, Current: 247 packages
|
||||
[BASELINE] Delta: +2 packages (0.8% increase)
|
||||
[BASELINE] Added packages:
|
||||
- golang.org/x/crypto@v0.30.0
|
||||
- github.com/pkg/errors@v0.9.1
|
||||
[BASELINE] Removed packages: (none)
|
||||
[INFO] Scanning for vulnerabilities...
|
||||
[VULN] Found: 0 Critical, 0 High, 5 Medium, 20 Low
|
||||
[SUCCESS] Verification complete (0.8% variance from baseline)
|
||||
```
|
||||
|
||||
### Example 3: Air-Gapped Mode
|
||||
|
||||
```bash
|
||||
$ VULN_SCAN_ENABLED=false .github/skills/scripts/skill-runner.sh \
|
||||
security-verify-sbom charon:local
|
||||
[INFO] Generating SBOM for charon:local...
|
||||
[SBOM] Generated SBOM contains 247 packages
|
||||
[INFO] Vulnerability scanning disabled (air-gapped mode)
|
||||
[SUCCESS] SBOM generation complete
|
||||
```
|
||||
|
||||
### Example 4: CI/CD Pipeline Integration
|
||||
|
||||
```yaml
|
||||
# GitHub Actions example
|
||||
- name: Verify SBOM
|
||||
run: |
|
||||
.github/skills/scripts/skill-runner.sh \
|
||||
security-verify-sbom ghcr.io/${{ github.repository }}:${{ github.sha }}
|
||||
continue-on-error: false
|
||||
```
|
||||
|
||||
## Semantic Diff Analysis
|
||||
|
||||
When a baseline SBOM is provided, the skill performs semantic comparison:
|
||||
|
||||
1. **Package Count Comparison**: Reports total package delta
|
||||
2. **Added Packages**: Lists new dependencies with versions
|
||||
3. **Removed Packages**: Lists removed dependencies
|
||||
4. **Variance Percentage**: Calculates percentage change
|
||||
5. **Threshold Check**: Warns if variance exceeds 5%
|
||||
|
||||
## Vulnerability Severity Thresholds
|
||||
|
||||
**Project Standards**:
|
||||
- **CRITICAL**: Must fix before release (blocking) - **Script exits with code 1**
|
||||
- **HIGH**: Should fix before release (warning) - **Script continues but logs warning**
|
||||
- **MEDIUM**: Fix in next release cycle (informational)
|
||||
- **LOW**: Optional, fix as time permits
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Syft not installed**:
|
||||
```bash
|
||||
Error: syft command not found
|
||||
Solution: Install Syft from https://github.com/anchore/syft
|
||||
```
|
||||
|
||||
**Grype not installed**:
|
||||
```bash
|
||||
Error: grype command not found
|
||||
Solution: Install Grype from https://github.com/anchore/grype
|
||||
```
|
||||
|
||||
**Docker image not found**:
|
||||
```bash
|
||||
Error: Unable to find image 'charon:test' locally
|
||||
Solution: Build the image or pull from registry
|
||||
```
|
||||
|
||||
**Invalid baseline SBOM**:
|
||||
```bash
|
||||
Error: Baseline SBOM file not found: sbom-baseline.json
|
||||
Solution: Verify the file path or omit baseline parameter
|
||||
```
|
||||
|
||||
**Network timeout (vulnerability scan)**:
|
||||
```bash
|
||||
Warning: Failed to update vulnerability database
|
||||
Solution: Check internet connection or use air-gapped mode (VULN_SCAN_ENABLED=false)
|
||||
```
|
||||
|
||||
## Exit Codes
|
||||
|
||||
- **0**: Verification successful, no critical vulnerabilities
|
||||
- **1**: Critical vulnerabilities found or verification failed
|
||||
- **2**: Missing dependencies or invalid parameters
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [security-sign-cosign](./security-sign-cosign.SKILL.md) - Sign artifacts with Cosign
|
||||
- [security-slsa-provenance](./security-slsa-provenance.SKILL.md) - Generate SLSA provenance
|
||||
- [security-scan-trivy](./security-scan-trivy.SKILL.md) - Alternative vulnerability scanner
|
||||
|
||||
## Notes
|
||||
|
||||
- SBOM generation requires read access to Docker images
|
||||
- Vulnerability database is updated automatically by Grype
|
||||
- Baseline comparison is optional but recommended for drift detection
|
||||
- Critical vulnerabilities will cause the script to exit with code 1
|
||||
- High vulnerabilities generate warnings but don't block execution
|
||||
- Use air-gapped mode when network access is unavailable
|
||||
- SPDX format is standardized and recommended over CycloneDX
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- Never commit SBOM files containing sensitive information
|
||||
- Review all High and Critical vulnerabilities before deployment
|
||||
- Baseline drift >5% should trigger manual review
|
||||
- Air-gapped mode skips vulnerability scanning - use with caution
|
||||
- SBOM files can reveal internal architecture - protect accordingly
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2026-01-10
|
||||
**Maintained by**: Charon Project
|
||||
**Source**: Syft (SBOM generation) + Grype (vulnerability scanning)
|
||||
|
||||
````
|
||||
Reference in New Issue
Block a user