CASM
Continuous Attack Surface Monitoring
Evidence-first attack surface monitoring with safe, scope-bound verification and run-over-run change tracking.
CASM helps security teams continuously monitor external exposure in authorized environments. It discovers assets, verifies HTTP/TLS posture, and compares each run against a baseline to show exactly what changed.
Quick Start
# Install
pip install g2cv-casm
# Create a minimal scope and targets file
cat > scope.yaml <<'YAML'
engagement_id: quickstart
allowed_domains: [example.com]
allowed_ips: []
allowed_ports: [443]
allowed_protocols: [https]
seed_targets: [example.com]
max_rate: 5
max_concurrency: 2
active_allowed: false
auth_allowed: false
YAML
cat > targets.json <<'JSON'
{
"targets": [
{"url": "https://example.com", "method": "HEAD"}
]
}
JSON
# Run a unified scan
casm run unified --config scope.yaml --targets-file targets.json --dry-run false
# Compare with a previous run
casm diff --old runs/baseline/results.sarif --new runs/current/results.sarif
By default, CASM auto-resolves tool binaries in this order: bundled wheel tools,
local hands/bin (source tree), cache, then optional download configured with
CASM_TOOL_DOWNLOAD_URL_TEMPLATE and CASM_TOOL_MANIFEST_URL.
In a source checkout, if hands/bin/<tool> is missing and Go is installed,
CASM auto-builds the tool on first use.
What CASM Does
- Discover exposed assets across HTTP, DNS, and TLS contexts.
- Verify web hardening signals and transport/security headers.
- Track change between scans with baseline-aware diffs.
- Report in SARIF, Markdown, PDF, and JSONL evidence streams.
Safety by Default
- Authorization-first scope controls (domains, IPs, ports, protocols).
- Dry-run support, deterministic blocking reasons, and rate/concurrency guardrails.
Screenshots
Executive Summary (PDF)
Changes Since Last Scan (PDF)
Documentation
- Full docs:
docs/(or runmkdocs serve) - Tutorials:
docs/tutorials/ - CLI reference:
docs/reference/cli.md - Configuration reference:
docs/reference/configuration.md - GitHub Auto-Diff Bot guide:
docs/how-to/github-auto-diff.md - Release guide:
docs/how-to/release-python-package.md - Security model:
docs/explanation/security-model.md
Project Notes
- Package name on PyPI:
g2cv-casm - CLI commands:
casmandg2cv-casm - Versioning is tag-driven (
vMAJOR.MINOR.PATCH)
Contributing and Security
- Contribution guide:
CONTRIBUTING.md - Security policy:
SECURITY.md - Code of conduct:
CODE_OF_CONDUCT.md
Support
If CASM is useful for your team, consider starring the repository. It helps others discover the project and supports ongoing development.
License
AGPL-3.0. See LICENSE.
Questions or partnerships: contact@g2cv.com
Release files for g2cv-casm 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| g2cv_casm-0.3.2.tar.gz | 12.3 MB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| g2cv_casm-0.3.2-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| g2cv_casm-0.3.2-py3-none-manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
Total release size: 61.5 MB
Release files / g2cv_casm-0.3.2.tar.gz
| Download URL | g2cv_casm-0.3.2.tar.gz |
|---|---|
| Size | 12.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
26512276c4e9da768e911dd45e91daa12ff13428dc283283f5c15b7bff7d3cd2
|
|
BLAKE2b-256 checksum How to use checksums |
5915c75edb0cc059f0487483ffabbcfb25487d1617a238fc8ab11b3dc2c0673b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.
Transparency logRelease files / g2cv_casm-0.3.2-py3-none-win_amd64.whl
| Download URL | g2cv_casm-0.3.2-py3-none-win_amd64.whl |
|---|---|
| Size | 24.5 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a5eff5de39e76e45c4b1f233174ae848252cb9d7932979cde5cef8e245707c8f
|
|
BLAKE2b-256 checksum How to use checksums |
a2ed95d56c6c7fe5bd9957011f7fd3afdbe8505e83d7605296ac0cfd2858ad14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.
Transparency logRelease files / g2cv_casm-0.3.2-py3-none-manylinux2014_x86_64.whl
| Download URL | g2cv_casm-0.3.2-py3-none-manylinux2014_x86_64.whl |
|---|---|
| Size | 24.6 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
f35a6ab5a2f3cd42b1fb4021c69e14690267b41b18337882ab67340f4311ef12
|
|
BLAKE2b-256 checksum How to use checksums |
5a63bb270240962673582436ff9b8a37cecb0e2aa0c1d7b228df0756919a098c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.
Transparency log