Skip to main content

Software Bill of Material (SBOM) difference tool

Project description

SBOMDiff

SBOMDiff is a tool to compare two Software Bill of Materials (SBOM) files and reports the differences. It supports SBOMs created in both SPDX and CycloneDX formats.

The following differences are detected:

  • Package version changes
  • Package license changes
  • Package removed
  • Package added

Installation

To install use the following command:

pip install sbomdiff

Alternatively, just clone the repo and install dependencies using the following command:

pip install -U -r requirements.txt

The tool requires Python 3 (3.7+). It is recommended to use a virtual python environment especially if you are using different versions of python. virtualenv is a tool for setting up virtual python environments which allows you to have all the dependencies for the tool set up in a single environment, or have different environments set up for testing using different versions of Python.

Usage

usage: sbomdiff [-h] [--sbom {auto,spdx,cyclonedx}] [--exclude-license] [-d] [-o OUTPUT_FILE] [-f {text,json,yaml}] [-V] FILE1 FILE2

SBOMDiff compares two Software Bill of Materials and reports the differences.

positional arguments:
  FILE1                 first SBOM file
  FILE2                 second SBOM file

options:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit

Input:
  --sbom {auto,spdx,cyclonedx}
                        specify type of sbom to compare (default: auto)
  --exclude-license     suppress reporting differences in the license of components

Output:
  -d, --debug           show debug information
  -o OUTPUT_FILE, --output-file OUTPUT_FILE
                        output filename (default: output to stdout)
  -f {text,json,yaml}, --format {text,json,yaml}
                        specify format of output file (default: text)

Operation

The --sbom option is used to specify the format of the SBOM files. The default is for the type and format of the SBOM to be automatically detected based on the extension of the file name.

SBOM Type Version Extension Format
SPDX 2.3 .spdx TagValue
SPDX 2.3 .spdx.rdf RDF
SPDX 2.3 .spdx.json JSON
SPDX 2.3 .spdx.yml YAML
SPDX 2.3 .spdx.yaml YAML
SPDX 2.3 .spdx.xml XML
CycloneDX 1.4 .xml XML
CycloneDX 1.4 .json JSON

Details of the formats for each of the supported SBOM formats are available for SPDX and CycloneDX.

For SPDX SBOM files, it is assumed that the name of a Package precedes the version information for the package. Only modules with a package name and associated version information shall be processed.

The --output-file option is used to control the destination of the output generated by the tool. The default is to report to the console but can be stored in a file (specified using --output-file option).

Implementation Notes

The following design decisions have been made in processing the SBOM files:

  1. The comparison only considers package names, package versions and licenses. Other differences are not detected.

  2. It is assumed that the SBOM is valid and contains syntactically valid data. Invalid files will be silently ignored.

  3. SBOMs which do not match the format of the SBOM to be processed when specified using the --sbom option is likely to result in incorrect differences being reported.

  4. In SPDX format, the tool assumes that the name of a package is followed by the version and license of the package.

  5. If there are multiple instances of a package included in the SBOM, only the first instance will be processed.

  6. In CycloneDX format, if the licenses section is not present for a component but the evidence section is, the license contained within the evidence section shall be used.

  7. If a license cannot be detected, the tool uses 'NOT FOUND' as the license to be used in the difference comparison.

  8. A non-zero return value indicates that differences were detected.

Sample Output

[LICENSE] glibc: License changed from GPL-2.0-only to (LGPL-2.0-only OR LicenseRef-3)
[LICENSE] Saxon: License changed from Apache-2.0 to MPL-1.0
[VERSION] rich: Version changed from 11.0.0 to 12.5.1
[REMOVED] colorama: Module removed (Version 0.4.4)
[VERSION] pygments: Version changed from 2.11.2 to 2.13.0

Summary
-------
Version changes:  2
License changes:  2
Removed packages: 1
New packages:     0

The following is an example of an output file in JSON format:

{
  "tool": {
    "name": "sbomdiff",
    "version": "0.4.2"
  },
  "file_1": "file1.json",
  "file_2": "file2.spdx",
  "differences": [
    {
      "package": "glibc",
      "status": "change",
      "license": {
        "from": "GPL-2.0-only",
        "to": "(LGPL-2.0-only OR LicenseRef-3)"
      }
    },
    {
      "package": "saxon",
      "status": "change",
      "license": {
        "from": "Apache-2.0",
        "to": "MPL-1.0"
      }
    },
    {
      "package": "rich",
      "status": "change",
      "version": {
        "from": "11.0.0",
        "to": "12.5.1"
      },
    },
    {
      "package": "colorama",
      "status": "remove",
      "version": {
        "from": "0.4.4"
      },
    },   
    {
      "package": "pygments",
      "status": "change",
      "version": {
        "from": "11.0.0",
        "to": "12.5.1"
      },
    }
  ],
  "summary": {
    "version_changes": "2",
    "new_packages": "0"
    "removed_packages": "1",
    "license_changes": "2",
  }
}

License

Licensed under the Apache 2.0 License.

Limitations

This tool is meant to support software development and security audit functions. However the usefulness of the tool is dependent on the SBOM data which is provided to the tool. Unfortunately, the tool is unable to determine the validity or completeness of such a SBOM file; users of the tool are therefore reminded that they should assert the quality of any data which is provided to the tool.

Feedback and Contributions

Bugs and feature requests can be made via GitHub Issues.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

sbomdiff-0.5.6-py2.py3-none-any.whl (14.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file sbomdiff-0.5.6-py2.py3-none-any.whl.

File metadata

  • Download URL: sbomdiff-0.5.6-py2.py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for sbomdiff-0.5.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d08fb0ccde574709a40686b55d94731943239f9dfe744d98f37fc14fde861544
MD5 9a473ab639a951a0d92371f6220515bd
BLAKE2b-256 507d9e2c66658297df9287d49ae9a1feb8ad3e3b46c31469ad4e98f529f43e5f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page