Skip to main content

ghsa-cli

CLI for efficiently coordinating vulnerability reports and remediations with GitHub Security Advisories (GHSA).

Install from PyPI (python -m pip install ghsa-cli) and authenticate using a GH_TOKEN environment variable within the shell session with a GitHub personal access token. Repository automatically resolves to the upstream/origin remote of the current working directory git repository or can be set manually via GH_REPO or --repo.

Below are some common workflows this tool is designed for:

Assigning yourself as 'Coordinator' for a ticket

Assign yourself as a coordinator. The alias me works for options specified via the command line to mean the currently authenticated user.

ghsa-cli credit GHSA-xxxx-xxxx-xxxx --coordinator me

Adding collaborators by name

Adds collaborators by name, either teams or individual users.

ghsa-cli collaborators GHSA-xxxx-xxxx-xxxx --login sethmlarson
ghsa-cli collaborators GHSA-xxxx-xxxx-xxxx --team python/fuzzers

Moving a GHSA to a public GitHub issue

Prompts the user with a new GitHub issue templated with the same title and description as the current ticket. By default, closes the GHSA if the GHSA isn't already closed.

ghsa-cli move-to-issue GHSA-xxxx-xxxx-xxxx

You can skip closing the GHSA after the issue templating page is opened by passing --no-close.

Listing open GHSAs where you are assigned 'Coordinator'

Useful for prioritizing which ticket you should work on next depending on their state, age, and whether a fix has been developed and reviewed.

ghsa-cli list --coordinator me

┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┳━━━━━━┓
┃ id                  ┃ title ┃ state  ┃ age  ┃ cvss ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━╇━━━━━━┩
│ GHSA-xxxx-xxxx-xxxx │ ...   │ triage │ 10d  │ 6.5  │
│ GHSA-xxxx-xxxx-xxxx │ ...   │ draft  │ 16d  │ 7.0  │
│ GHSA-xxxx-xxxx-xxxx │ ...   │ draft  │ 21d  │ 2.0  │
│ GHSA-xxxx-xxxx-xxxx │ ...   │ draft  │ 60d  │ 2.0  │
└─────────────────────┴───────┴────────┴──────┴──────┘

Prioritizing reports based on CVSS or age

ghsa-cli list --sort cvss age

┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┳━━━━━━┓
┃ id                  ┃ title ┃ state  ┃ age  ┃ cvss ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━╇━━━━━━┩
│ GHSA-xxxx-xxxx-xxxx │ ...   │ draft  │ 16d  │ 7.0  │
│ GHSA-xxxx-xxxx-xxxx │ ...   │ triage │ 10d  │ 6.5  │
│ GHSA-xxxx-xxxx-xxxx │ ...   │ draft  │ 60d  │ 2.0  │
│ GHSA-xxxx-xxxx-xxxx │ ...   │ draft  │ 21d  │ 2.0  │
└─────────────────────┴───────┴────────┴──────┴──────┘

Searching for reports based on text

Use the search command and supply text to search through advisory titles and descriptions.

ghsa-cli search crlf

┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ id                  ┃ state  ┃ title                                             ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ GHSA-xxxx-xxxx-xxxx │ closed │ IMAP Protocol Command Injection (CRLF) in imaplib │
│ GHSA-xxxx-xxxx-xxxx │ closed │ POP3 Protocol Command Injection (CRLF) in poplib  │
└─────────────────────┴────────┴───────────────────────────────────────────────────┘

Creating reports and integrating with CVE APIs

CVE APIs require a CVE Services API key. Set the CVE_USERNAME, CVE_CNA, and CVE_API_KEY environment variables to access properties about CVE IDs and records.

Use the --columns parameter with list to add additional columns to the report.

ghsa-cli list --state triage draft closed --columns id state cve_id cve_state

┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ id                  ┃ state  ┃ cve_id         ┃ cve_state ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ GHSA-xxxx-xxxx-xxxx │ triage │                │           │
│ GHSA-xxxx-xxxx-xxxx │ closed │ CVE-YYY-YYYY   │ published │
│ GHSA-xxxx-xxxx-xxxx │ draft  │ CVE-YYY-YYYY   │ reserved  │
└─────────────────────┴────────┴────────────────┴───────────┘

Creating a template CVE Record from a GHSA

The command cve-record will create a template CVE record from the information available in a GHSA for use with a program like Vulnogram. This makes creating a CVE record quick and transfers information like credits and CVSS automatically.

ghsa-cli cve-record GHSA-xxxx-yyyy-zzzz

{
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "cveMetadata": {
    "cveId": "CVE-YYYY-XXXX",
    "state": "PUBLISHED"
  },
  "containers": {
    "cna": {
      "title": "...",
      "affected": [
        {
          "vendor": "Python Software Foundation",
          "product": "CPython",
          "repo": "https://github.com/python/cpython",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "versionType": "python",
              "version": "0"
            }
          ],
          "modules": []
        }
      ]
...

Metadata

Release files for ghsa-cli 2026.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ghsa-cli 2026.5.1
File Size Uploaded
ghsa_cli-2026.5.1.tar.gz 11.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ghsa-cli 2026.5.1
File Interpreter ABI Platform
ghsa_cli-2026.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 23.2 kB

Release files / ghsa_cli-2026.5.1.tar.gz

Download URL ghsa_cli-2026.5.1.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ec52bf1f766f728ab8b3c7c328e45e0b627bb5509cf33fecca9eaf0cc4f26b9d
BLAKE2b-256 checksum
How to use checksums
5a2f2e1b5dd349eb7c2550b9db0de4733c9026446e583ee269c3b2721322f45a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 May 1, 2026.

Transparency log

Release files / ghsa_cli-2026.5.1-py3-none-any.whl

Download URL ghsa_cli-2026.5.1-py3-none-any.whl
Size 11.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c1384dd6d4f93f1e84e73b08f6c552adcf752628b3287a3d06ed3107473639c3
BLAKE2b-256 checksum
How to use checksums
20e5d0d1610f783ee712c7c66433e6cf30f15d2ceadb1a16c8722cf03069f7af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 May 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.5.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page