ca9
Open source Python package security and evidence-backed SCA triage
What it is and what it does
ca9 is a local-first supply-chain defense tool that reads your Python project's manifests, lockfiles, and SCA reports, then answers a single critical question for each CVE alert: is this vulnerable code actually reachable from your application? It combines three evidence sources—static AST import tracing, dependency graph analysis, and optional runtime coverage data—to classify each vulnerability as reachable, unreachable (static or dynamic), or inconclusive, with an evidence trail and confidence score for each verdict.
Instead of patching every flagged CVE, you get a filtered list of only the vulnerabilities that matter: code your app actually imports and executes. ca9 also provides broader supply-chain vetting (malware advisories, registry trust, artifact hashes, license policy, dependency confusion risk) and runtime preflight enforcement via `ca9 run`, so you can block unsafe packages before they install. It reads native Python manifests, npm lockfiles, and SBOM inputs, and outputs JSON, SARIF, OpenVEX, or Markdown for integration into CI gates and audit workflows.
Use it for:
- Filter CVE alerts from SCA tools to identify which vulnerabilities actually affect your code, reducing alert fatigue.
- Build a normalized package inventory from mixed lockfile formats to audit direct and transitive dependencies.
- Enforce supply-chain policy in CI by blocking untrusted registries, dependency-confusion risks, or missing hashes.
- Combine static import analysis with coverage data to confirm whether a vulnerable function is ever called.
- Generate OpenVEX or SARIF reports for downstream security tools, enriching SCA output with reachability evidence.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
ca9 analyzes Python package supply chains to determine whether flagged CVEs are actually reachable from your application code, combining static import tracing, dependency inventory, and optional runtime coverage to separate actionable vulnerabilities from unreachable alerts.
Yes, if you use Python and want to reduce CVE alert noise with evidence-backed triage. ca9 is actively maintained, has no known vulnerabilities, low install friction, and solves a real problem—most flagged CVEs are unreachable. The MPL-2.0 license is permissive for local use. Start with `ca9 scan` on an existing SCA report to see the impact. Early-stage (Alpha), so expect API evolution, but the core reachability logic is sound.
Install
ca9 on PyPI
pip
pip install ca9uv
uv add ca9poetry
poetry add ca9Installing ca9
Before you install
Low friction: pure Python wheel with only two runtime dependencies (packaging, tomli). Active maintenance—last commit 2026-08-14, released 2026-06-27, only 48 days old. Supports Python 3.10 through 3.13. No known vulnerabilities.
License in practice
MPL-2.0 is copyleft: you may use ca9 freely and modify it, but if you distribute modified versions, you must disclose source and license derivative works under MPL-2.0. For most local security tooling use, this poses no practical barrier.
Quickstart
pip install ca9[cli]
ca9 scan --repo . --coverage coverage.json
ca9 inventory --repo . -f json
Requires Python 3.10 or later. For full functionality, your project should have a recognized lockfile or SCA report to analyze.
Verify before relying
- Whether static import tracing and coverage analysis work reliably on complex dependency graphs with dynamic imports.
- Performance characteristics on large monorepos or projects with hundreds of transitive dependencies.
- Completeness of vulnerable API detection rules and how often they require manual tuning.
- Reliability of reachability verdicts across different Python packaging patterns and import styles.
Package facts
| License | MPL-2.0 (copyleft) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 2 — packaging, tomli |
| Maintenance | actively maintained — 48 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 77,301/month — #14,537 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: ca9-0.5.0-py3-none-any.whl
Keywords: cve, dependabot, openvex, osv, pip-audit, python-security, reachability, reachability-analysis, sarif, sca, security, snyk, supply-chain-security, trivy, vulnerability
Tags
More Security packages
Provides Python bindings to the FreeDesktop.org…
permissive · top 1,000 on PyPI
msalMSAL for Python handles OAuth2 and OpenID…
permissive · top 1,000 on PyPI
joserfcjoserfc implements JOSE standards (JWS, JWE,…
permissive · top 1,000 on PyPI
AuthlibAuthlib provides a complete implementation of…
permissive · top 1,000 on PyPI
argon2-cffi-bindingsProvides low-level CFFI bindings to the…
permissive · top 1,000 on PyPI
adalADAL for Python authenticates applications with…
permissive · top 1,000 on PyPI
socketsecuritySocket Security CLI scans Python projects for…
permissive · top 15,000 on PyPI
safetySafety CLI scans Python project dependencies…
permissive · top 5,000 on PyPI
pip-auditpip-audit scans Python environments and…
permissive · top 1,000 on PyPI
pysentry-rsPySentry scans Python projects for known…
permissive · top 15,000 on PyPI
guarddogGuardDog is a CLI tool that scans PyPI, npm,…
permissive · top 15,000 on PyPI
pdfidAnalyzes PDF files to identify potentially…
permissive · top 15,000 on PyPI
debsecan-mcpAn MCP server that scans Debian systems for…
unclear · top 15,000 on PyPI
flawfinderFlawfinder scans C/C++ source code to identify…
copyleft · top 15,000 on PyPI
cvssParses and scores CVSS v2, v3, and v4…
copyleft · top 5,000 on PyPI
hello-worldA minimal package with no runtime dependencies,…
unclear · top 15,000 on PyPI