Open-source project
ossf/cve-bin-tool avatar
ossf/cve-bin-tool

CVE Binary Tool: Binary and SBOM vulnerability scanning

The CVE Binary Tool helps you determine if your system includes known vulnerabilities. You can scan binaries for over 350 common, vulnerable components (openssl, libpng, libxml2, expat and others), or if you know the components used, you can get a list of known vulnerabilities associated with an SBOM or a list of components and versions.

1,797 stars690 forksPythonGPL-3.0

At a glance

What is it?
CVE Binary Tool checks binaries for recognized components and maps component lists or SBOMs to known vulnerability data. It suits Python-based security workflows that need local scanning, CI integration, SBOM generation, VEX generation, or offline operation.
Who is it for?
Adopt CVE Binary Tool when engineers need one Python CLI for binary inspection, SBOM-based checks, component discovery, and CI vulnerability reporting. Do not treat it as a complete security assessment, because its binary scan covers 451 recognized checkers and cannot establish that a system contains no vulnerable code.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What cve-bin-tool is designed to find

CVE Binary Tool answers a specific supply-chain question: does a piece of software contain components with known vulnerabilities? It is intended for developers, security teams, and continuous integration workflows that need to inspect software before release or while maintaining it. The README also positions it as a way to receive early warning about known issues and, in supported workflows, to detect components and create SBOMs.

The project has two principal operating modes. Its binary scanner uses checkers to identify packages that may have been included in software. The README reports 451 checkers, with early coverage focused on common open-source components such as openssl, libpng, libxml2, and expat. This mode is useful when an organization has a binary or executable but does not have a trustworthy component manifest.

The second mode accepts known component lists. Supported inputs include .csv files, several Linux distribution package lists, language-specific package scanner output, and multiple Software Bill of Materials formats. When a component and version are already known, scanning that inventory avoids making the binary checkers responsible for discovering every dependency. The resulting component set is checked against vulnerability records from the National Vulnerability Database, Redhat, the Open Source Vulnerability Database, GitLab Advisory Database, and Curl.

The tool is not described as a complete software composition analysis system. It focuses on finding known vulnerabilities associated with identified components. Its output can support triage and release decisions, but it does not replace code review, application testing, or investigation of vulnerabilities that have not received an advisory identifier.

The cve-bin-tool scan and report pipeline

The README describes a workflow with four connected stages. First, CVE Binary Tool obtains vulnerability data from NVD, Redhat, OSV, GitLab, and Curl. The documentation says this download normally happens once per day rather than during every scan. The first download can therefore take time because the local vulnerability corpus must be prepared.

Second, the tool creates or reads a component list. During binary scanning, component discovery comes from a combination of binary checkers and language component lists such as Python's requirements.txt. SBOM mode begins with an existing standardized inventory. This distinction matters: SBOM scanning does not need to reconstruct an unknown component list, while binary scanning may report only components that a checker recognizes.

Third, the tool uses the detected or supplied components to create a CVE list. Known vulnerability information is then associated with those components. Fourth, optional triage information can be added. The README identifies options for notes, information from previous reports, tracking changes in vulnerability status, and known fix data.

The final stage produces output. Documented report formats include console, json, csv, html, and pdf. This range allows the same result to support an engineer's terminal session, a machine-readable CI artifact, or a review document. The repository also documents SBOM generation, VEX generation, offline operation, and GitHub Actions use. The quick-start content quoted in the repository does not preserve the commands or arguments for those workflows, so the linked documentation should be used for their exact syntax.

Installing cve-bin-tool and preparing its database

The normal installation route is PyPI through pip. This is the documented first step for users who want the packaged tool:

bash
pip install cve-bin-tool

Pip installs the declared Python dependencies. The project metadata requires Python 3.10 or later. Some extraction operations also use system libraries, so the README points users with extraction problems to the additional requirements lists for Linux and Windows.

For someone working directly with a checkout, the README gives a separate editable installation command. Run it from the repository root so that pip resolves the local package:

bash
pip install --user -e .

That command is intended for trying the latest code or doing development. Contributor-specific setup is delegated to `CONTRIBUTING.md`; the README excerpt does not reproduce its additional steps.

On first usage, the tool downloads vulnerability data. This can take some time even before a target has been scanned. Later data refreshes are documented as occurring once per day by default. Starting from release 3.3, the default data path uses the project's own NVD mirror at `https://cveb.in/` because of reliability issues with direct NVD access. To contact NVD servers directly, the documentation says a user must supply an `NVD_API_KEY`. The README does not preserve a complete command-line example for a first binary or SBOM scan, so it would be unsafe to invent one. The linked quick-start guide is the source for the exact scanner invocation.

Binary discovery, SBOM input, and component coverage

The binary scanner is the more interesting mode when source manifests are incomplete. Its checkers search software for signs of particular packages and versions. That creates a straightforward dependency on the checker catalog. The README says there are 451 checkers, but a count alone does not mean every executable can be decomposed into a complete dependency inventory. Binary formats can conceal or obscure component information, and a package that lacks a checker may not be identified by this path.

SBOM scanning addresses a different problem. The user starts with a standardized component inventory, and CVE Binary Tool checks the components and versions in that file. The README lists.csv, Linux distribution package lists, language-specific package scanners, and several SBOM formats as accepted input categories. It does not enumerate every accepted format, so a format compatibility check should be made against the full documentation before automation is built around it.

The tool can also generate an SBOM from discovered components. That makes it possible to use binary discovery first and standardized inventory output later. This does not prove the generated SBOM is exhaustive. Its coverage depends on the same checker and language-list mechanisms used to construct the initial component list.

For a team that already receives an accurate standardized component inventory from another system, SBOM input is likely to be the more predictable route. For a team receiving opaque binaries with no manifest, binary discovery can fill a gap, but the result should be reviewed for missing components. Neither mode turns an unrecognized dependency into a confirmed absence of vulnerabilities.

CVE Binary Tool limits, sources, and operational trade-offs

The main limitation is detection scope. The binary mode searches for packages using a defined set of checkers. The README's examples identify common vulnerable components, but it does not claim that 451 checkers cover every library, statically linked dependency, custom component, or renamed binary. A clean result can therefore mean only that no known issue was matched within the available checker and vulnerability-data coverage.

The second limitation concerns vulnerability data. CVE Binary Tool combines records from several sources, which can provide broader coverage than one feed alone. That also creates source consistency questions. The tool states that it uses the NVD API but is not endorsed or certified by NVD. Teams that require a particular authoritative feed, update schedule, or deduplication policy must inspect the resulting reports and documentation rather than assuming all sources have identical behavior.

Network availability matters on initial use and normal refreshes. The README documents offline use, but it does not state the command or database setup for entering that mode in the quoted quick-start content. That boundary is practical for isolated build systems: the vulnerability corpus has to be obtained and prepared before scans can avoid normal downloads.

Report generation is broad, but format availability does not imply workflow-specific semantics. Console, json, csv, html, and pdf outputs are named, while exact filtering, suppression, triage, and exit-code behavior are not included in the quoted README content. These details need to be verified from the full option documentation before CVE Binary Tool controls a CI release gate.

CVE Binary Tool versus looking up NVD records

The NVD website is a real alternative for a person who already knows the exact product and version and wants to search published vulnerability records.

CVE Binary Tool takes a broader operational path. It can inspect a binary, read a component list, or consume an SBOM, then associate the resulting components with records from multiple advisory sources. It also offers output formats and documentation for CI use. That makes it more relevant when the initial problem is to discover or inventory components rather than search one known CVE record.

The difference is not that either method removes uncertainty. NVD lookup requires accurate product identity, while CVE Binary Tool's discovery mode can miss components outside checker coverage. Its multi-source data can also require decisions about duplicate or differing advisory records. The appropriate choice depends on whether the organization needs identification and repeatable reporting, or merely manual research for an already known component.

Maintenance, upgrades, and GPL-3.0 use

The repository is not archived. Its last push was on 2026-10-15. That supports treating the repository as recently changed, but it does not promise stable releases or low upgrade effort. The listed release history includes `v3.4.1rc0` from 2025-06-13, while `v3.4` dates to 2024-09-17. A recent push can therefore arrive before a new stable release.

The packaged project uses `setuptools`, requires Python 3.10 or later, and declares dependencies including `lib4sbom`, `lib4vex`, `requests`, `aiohttp`, `xmlschema`, `pefile`, and packaging-related libraries. An upgrade can therefore bring Python dependency changes as well as changes to scanners, data-source behavior, or report formats. Environments should pin and validate the packaged version used in CI rather than assuming that every repository push is an operational release.

The repository metadata identifies the license as `GPL-3.0-or-later`, while the repository description lists `GPL-3.0`. This distinction may matter when code from the project is redistributed or incorporated into another codebase, because the exact version and distribution terms need to be evaluated. This is a licensing boundary, not legal advice. Package installation and internal execution also warrant their own organizational policy review.

Editorial conclusion

Adopt CVE Binary Tool when engineers need one Python CLI for binary inspection, SBOM-based checks, component discovery, and CI vulnerability reporting. Do not treat it as a complete security assessment, because its binary scan covers 451 recognized checkers and cannot establish that a system contains no vulnerable code. Verify first that the target components match its checker and input support, then review the selected vulnerability sources and the planned report workflow.

Frequently asked questions

How do I install CVE Binary Tool?

Install it with `pip install cve-bin-tool`. The project requires Python 3.10 or later, and the README notes that some extraction operations may require system libraries.

Can CVE Binary Tool scan binaries as well as SBOM files?

Yes. Its binary mode uses 451 checkers to identify components, while its other mode reads known component lists, including supported SBOM formats.

Does CVE Binary Tool need network access for vulnerability data?

On first usage, the tool downloads vulnerability data and may take some time doing so. The README says updates normally occur once per day and documents an offline mode, although the exact offline command is not included in the quoted quick-start content.

Official sources

  1. License: GPL-3.0
  2. ossf/cve-bin-tool on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ossf-cve-bin-tool.svg)](https://hysenlabs.com/projects/ossf-cve-bin-tool)