Skip to main content

yocto-security-tools

CI OpenSSF Best Practices OpenSSF Scorecard PyPI version Python versions Downloads Ruff Checked with mypy License: MIT

Standalone CVE management tools for Yocto/OpenEmbedded Linux distributions.

Tools

Tool Purpose
cve-metadata-extractor Find fix commits for CVEs from multiple public sources (Debian, OSV, CVEList V5, Ubuntu, NVD)
cve-corrector Automate backporting CVE fixes to Yocto recipes using devtool
cve-agent Orchestrate CVE backporting with AI-assisted conflict resolution

Requirements

  • Python 3.9+
  • Git
  • For cve-corrector / cve-agent: a sourced Yocto build environment (BBPATH set)
  • For cve-agent: an AI backend — kiro-cli (default) or Claude Code (--backend claude), or a custom backend plugin
  • Optional, for cve-agent: patchutils (provides interdiff) — when installed, cve-agent enriches its review diff, console output, and AI context with a concise upstream-vs-backport adaptation delta. When absent, cve-agent falls back to its existing behavior unchanged.

Installation

From PyPI

pip install yocto-security-tools

From source (development)

git clone https://github.com/Ericsson/yocto-security-tools.git
cd yocto-security-tools
pip install -e .

Quick Start

Find CVE fix metadata

# From Yocto cve-summary.json (output of sbom-cve-check)
cve-metadata-extractor --yocto-summary cve-summary.json --output cve-metadata.json

# For a specific CVE
cve-metadata-extractor --cve-id CVE-2024-1234 --cve-component-name openssl

Apply CVE patches

# Source your Yocto build environment first
source oe-init-build-env

# Apply a CVE fix
cve-corrector --cve-id CVE-2024-1234 --cve-info cve-metadata.json

# Resume after manual conflict resolution
cve-corrector --continue

Dependent commit chains. --fix-url is repeatable. A single URL applies one fix commit (or one pull request's commits); two or more URLs are treated as one ordered, dependent chain — the caller controls the order, and all commits must apply or the run stops at a conflict (no falling back to applying just one of them). Use this when a CVE is fixed by a short series of follow-up commits on the same branch, e.g. acl's CVE-2026-XXXXX:

cve-corrector --cve-id CVE-2026-XXXXX --recipe acl \
  --fix-url https://cgit.git.savannah.nongnu.org/cgit/acl.git/commit/?id=5906d2868ec8d3b08be556153696e6b1122eeeda \
  --fix-url https://cgit.git.savannah.nongnu.org/cgit/acl.git/commit/?id=0071c6d1fea0a8a6270333baa85fb609be325c26 \
  --fix-url https://cgit.git.savannah.nongnu.org/cgit/acl.git/commit/?id=170dbd3beff9bd5bdab3f72db1a04bf282f6087c

If the chain conflicts partway through, resolve it and resume with cve-corrector --continue — the remaining commits are applied in the same order. cve-agent accepts the same repeated --fix-url flag and forwards it unchanged to cve-corrector.

AI-assisted backporting

# Requires an AI backend CLI: kiro-cli (default) or Claude Code
cve-agent --cve-id CVE-2024-1234 --cve-info cve-metadata.json --trust

# Batch mode
cve-agent --cve-list cves.txt --cve-info cve-metadata.json --trust

# Use the Claude Code backend (install and authenticate the `claude` CLI first)
cve-agent --cve-id CVE-2024-1234 --cve-info cve-metadata.json --backend claude --model sonnet

# Use a custom backend plugin from extra/
cve-agent --cve-id CVE-2024-1234 --cve-info cve-metadata.json --backend my_backend

AI backends. kiro (default) drives kiro-cli; claude drives the Claude Code claude CLI directly. The Claude Code backend needs a recent claude on PATH, already authenticated (Anthropic API key, or Bedrock/Vertex), supporting -p, --permission-mode, --allowedTools/--disallowedTools, --append-system-prompt, and --add-dir. Pass --model sonnet|opus|haiku (or a full model id); the default claude-sonnet-5 is mapped to sonnet. Both backends run under the same file-scope guard, so the AI can only modify the files the upstream fix touches.

How It Works

graph LR
    E["cve-metadata-extractor<br/>Find fix commits"] -->|cve-metadata.json| C["cve-corrector<br/>Apply patches via devtool"]
    C -->|exit code + state| A["cve-agent<br/>AI-assisted resolution"]
    A -->|subprocess| C

Each tool works independently. Chain them via --cve-info cve-metadata.json.

Supported Input Formats

Format Flag Description
cve-summary.json --yocto-summary Output from Yocto's sbom-cve-check class
Direct CVE ID --cve-id One or more CVE identifiers
CVE list file --cve-list Text file with one CVE ID per line (agent only)

Configuration

The extractor reads configuration from cve_metadata_extractor/config.json by default. Override with the CVE_EXTRACTOR_CONFIG environment variable.

Storage (XDG Compliant)

Directory Default Override
Persistent data ~/.local/share/yocto-security-tools/ CVE_TOOLS_DATA_DIR
Cache (expendable) ~/.cache/yocto-security-tools/ CVE_TOOLS_CACHE_DIR

Config Keys

Key Default Description
cvelistv5_url GitHub Git URL to clone CVEList V5 from
debian_tracker_url salsa.debian.org Git URL for Debian tracker
nvd_url GitHub Git URL for NVD data
oe_branches ["scarthgap"] OE branches to check for fix status

Environment Variables

Variable Purpose
CVE_EXTRACTOR_CONFIG Override config.json path
CVE_TOOLS_DATA_DIR Override XDG data directory
CVE_TOOLS_CACHE_DIR Override XDG cache directory
GITHUB_TOKEN GitHub API access (required for PR metadata)
OPENEMBEDDED_TOKEN OE mailing list API
BBPATH Required for cve-corrector/cve-agent (Yocto build env)
CVE_EXTRA_SOURCES_DIR Override plugin directory for extractor
CVE_EXTRA_BACKENDS_DIR Override plugin directory for agent backends

Plugin System

Add custom CVE data sources or AI backends by dropping .py files in the extra/ directory. See extra/README.md for the plugin development guide.

Quick Example: Custom Source

# extra/my_source.py
from cve_metadata_extractor.sources import CveSource, SOURCE_REGISTRY

class MySource(CveSource):
    name = 'my_source'
    def is_enabled(self, args): return True
    def extract(self, cve_id, stats): return [], [], [], []

SOURCE_REGISTRY.append(MySource())

Development

python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
pytest

See CONTRIBUTING.md for full development guidelines.

License

MIT — see LICENSE

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yocto_security_tools-1.0.4.tar.gz (141.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yocto_security_tools-1.0.4-py3-none-any.whl (168.4 kB view details)

Uploaded Python 3

File details

Details for the file yocto_security_tools-1.0.4.tar.gz.

File metadata

  • Download URL: yocto_security_tools-1.0.4.tar.gz
  • Upload date:
  • Size: 141.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yocto_security_tools-1.0.4.tar.gz
Algorithm Hash digest
SHA256 df24b8ce247fe2a29ec1ce06b8d14d765074cdd0ad3b9dc8c892dfed45a23355
MD5 d64452d2cd138a412ad0c5444ce06f05
BLAKE2b-256 37c1c127bd89ec2850117c05eedc9e897e44835174a753bc01301200d730d67e

See more details on using hashes here.

Provenance

The following attestation bundles were made for yocto_security_tools-1.0.4.tar.gz:

Publisher: publish.yml on Ericsson/yocto-security-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yocto_security_tools-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for yocto_security_tools-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 94a8ee04e6c73a49b555e87b5c2e3ee94016b8a9d5940d5dfba19de1b8b7df7b
MD5 789ccb2821d6dabc9ae6c757b86b3016
BLAKE2b-256 e5fd5f9666771758db5b690458725aa5c390dff59b46506169676b1828ce60e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for yocto_security_tools-1.0.4-py3-none-any.whl:

Publisher: publish.yml on Ericsson/yocto-security-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page