CASM: Continuous Attack Surface Monitoring
Project description
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 - 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file g2cv_casm-0.1.3.tar.gz.
File metadata
- Download URL: g2cv_casm-0.1.3.tar.gz
- Upload date:
- Size: 12.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2851ef198dd3b5d5c34c499eebb70b3c7a3e40bc60e818e2130c7c836cc24370
|
|
| MD5 |
381fc4c204be5a6766fa5665e3abca6c
|
|
| BLAKE2b-256 |
652d5915c90c9738e0f9dcf1c229446096be3b15e3a72a4a368e2257f3da3026
|
Provenance
The following attestation bundles were made for g2cv_casm-0.1.3.tar.gz:
Publisher:
pypi-release.yml on G2CV/CASM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
g2cv_casm-0.1.3.tar.gz -
Subject digest:
2851ef198dd3b5d5c34c499eebb70b3c7a3e40bc60e818e2130c7c836cc24370 - Sigstore transparency entry: 974591356
- Sigstore integration time:
-
Permalink:
G2CV/CASM@d3a426a08359ecc66593371e82ac13dd77e4c8c9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/G2CV
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@d3a426a08359ecc66593371e82ac13dd77e4c8c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file g2cv_casm-0.1.3-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: g2cv_casm-0.1.3-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 23.1 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38f38c7f8c2fad833b91e933011ce26b40a13dceda6469e692dc4c181f831982
|
|
| MD5 |
dfd078ee8cc8f086ddd9715110a7d414
|
|
| BLAKE2b-256 |
b7e464670809d6bf9290106aca98ae29cbc521ea9b3b25abb8c49368c914f3b7
|
Provenance
The following attestation bundles were made for g2cv_casm-0.1.3-cp311-cp311-win_amd64.whl:
Publisher:
pypi-release.yml on G2CV/CASM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
g2cv_casm-0.1.3-cp311-cp311-win_amd64.whl -
Subject digest:
38f38c7f8c2fad833b91e933011ce26b40a13dceda6469e692dc4c181f831982 - Sigstore transparency entry: 974591406
- Sigstore integration time:
-
Permalink:
G2CV/CASM@d3a426a08359ecc66593371e82ac13dd77e4c8c9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/G2CV
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@d3a426a08359ecc66593371e82ac13dd77e4c8c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file g2cv_casm-0.1.3-cp311-cp311-manylinux2014_x86_64.whl.
File metadata
- Download URL: g2cv_casm-0.1.3-cp311-cp311-manylinux2014_x86_64.whl
- Upload date:
- Size: 23.1 MB
- Tags: CPython 3.11
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d15efbb3bfbb35ba5df07cc0abdb1ca416241d56c77434f368c8ff247c27d40
|
|
| MD5 |
75f58e9738993b0cb8a0bce0177c43df
|
|
| BLAKE2b-256 |
2410efd17cbec377e2696fd33ee0875b968307e5364037c5c878e9b5f9722ca2
|
Provenance
The following attestation bundles were made for g2cv_casm-0.1.3-cp311-cp311-manylinux2014_x86_64.whl:
Publisher:
pypi-release.yml on G2CV/CASM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
g2cv_casm-0.1.3-cp311-cp311-manylinux2014_x86_64.whl -
Subject digest:
8d15efbb3bfbb35ba5df07cc0abdb1ca416241d56c77434f368c8ff247c27d40 - Sigstore transparency entry: 974591389
- Sigstore integration time:
-
Permalink:
G2CV/CASM@d3a426a08359ecc66593371e82ac13dd77e4c8c9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/G2CV
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@d3a426a08359ecc66593371e82ac13dd77e4c8c9 -
Trigger Event:
push
-
Statement type: