Skip to main content

CVM — Configuration Vulnerability Meter

Quantitative, reproducible scoring of the risk a system's configuration introduces, based on CCSS (NISTIR 7502). CASPAR is the reference implementation.

Configuration scanners tend to answer pass or fail against a checklist. Vulnerability scanners answer which known CVEs apply. CVM sits between them: it scores how much risk a configuration actually introduces, on a comparable scale, and detects attack chains — combinations of individually moderate weaknesses that together are severe.

pip install cvm-caspar
caspar init                      # restore the built-in knowledge base
caspar demo                      # write example configurations
caspar scan caspar-demo/apache-vulnerable.conf

caspar init is required once and only for pip installs: it restores the same canonical knowledge base that the Docker image and the repository installer ship, so scores are comparable across all three.

What it assesses

Twelve targets out of the box — Apache HTTP Server, nginx, SSH, MySQL, PostgreSQL, Redis, Tomcat, Docker, Dockerfile, Kubernetes, Ubuntu and Azure IaC — from knowledge derived from public CIS Benchmarks and DISA STIGs, with the provenance of every rule recorded.

caspar scan /etc/apache2/                # a directory
caspar scan --live apache2               # the installed service
caspar scan docker://httpd:2.4           # an image
caspar scan k8s-manifest.yaml            # IaC

Every scan ends with a reproducible: … kb sha256:… line. Scores are only comparable between identical knowledge bases, so that hash is what makes a result checkable by someone else.

The web console

pip install "cvm-caspar[api]"
caspar serve                             # http://127.0.0.1:2027

Both consoles are already installed by pip install cvm-caspar — built, no Node toolchain, about 2 MB of the wheel. What [api] adds is the server that serves them: FastAPI and uvicorn. The v2 console answers at /app, v1 at /v1/app, and the REST API with its Swagger UI at /api/v1 and /docs.

The split keeps the default install pure-Python and small, which is what a CI runner wants — it scans and never opens a browser — and it means a security tool does not install an HTTP server on machines that never asked for one. Running caspar serve without the extra tells you exactly this and prints the command to fix it.

Extras

Written literally, inside square brackets, quoted so the shell does not treat them as a glob: pip install "cvm-caspar[api]". Combine with a comma — "cvm-caspar[api,publish]".

Extra Adds For
(none) — the CLI (scan, report, diff, explain) and both web consoles
[api] fastapi, uvicorn the server behind caspar serve
[publish] requests pushing results to an external endpoint
[dev] pytest, httpx running the test suite

Build-time knowledge extraction

Adding a target from a benchmark PDF uses an LLM with RAG and is a build-time operation, separate from scanning:

caspar plugin add --source benchmark.pdf --target nginx
caspar build --provider anthropic        # or ollama (local), openai

Hosted providers read ANTHROPIC_API_KEY / OPENAI_API_KEY from the environment only — never a command-line flag or an API field, which would put the key in shell history or in a stored job record. Scanning itself uses no LLM and is fully deterministic.

Scope

Single instance, self-hosted. No multi-tenancy, no user accounts, no hosted service. CVM runs where the systems it assesses are, which is also why it needs no agents and no third-party SSH credentials.

Licence and provenance

Apache 2.0. The scoring method implements CCSS (NISTIR 7502, NIST — a US Government publication, not subject to copyright).

The knowledge base derives from public CIS Benchmarks and DISA STIGs, with provenance declared per target: what ships is machine-extracted rules carrying their own metrics, justifications and remediations — the benchmark documents themselves are never redistributed, and building a new target means supplying your own copy. The SCAP Security Guide (ComplianceAsCode/content, BSD-3-Clause, © Red Hat) is pinned by version with its SHA recorded in the reproducibility manifest. Full detail in the NOTICE file shipped with the package.

Source, documentation and the Docker images: https://github.com/AFilipe-IT/cvm

Metadata

Release files for cvm-caspar 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cvm-caspar 1.1.1
File Size Uploaded
cvm_caspar-1.1.1.tar.gz 5.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for cvm-caspar 1.1.1
File Interpreter ABI Platform
cvm_caspar-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 6.5 MB

Release files / cvm_caspar-1.1.1.tar.gz

Download URL cvm_caspar-1.1.1.tar.gz
Size 5.2 MB
Tags Source
SHA-256 checksum
How to use checksums
c85ea2473dec71284d80a51f12f391ebf6547414235fa9d9b4a7fca69c822446
BLAKE2b-256 checksum
How to use checksums
0f3d80e5774a3313cf106a43ec93c146a24d7b2056818ae08ed9213649e7bd9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cvm_caspar-1.1.1-py3-none-any.whl

Download URL cvm_caspar-1.1.1-py3-none-any.whl
Size 1.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
fe845b8e02b382cfa955386d6b5e6fe482fa37fab43be1a896cd5d3d03865f63
BLAKE2b-256 checksum
How to use checksums
da4ed35c3dd9255c9cc82fdd4a9ec686d4d18e86c67baebc236decea87fbd569
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page