// threat brief
GitHub CLI token leak: gh attestation and gh release verify could send your token to TUF and artifact hosts
- CVSS
- 9.1 CRITICAL
- CISA KEV
- Not listed
- Weakness
- CWE-863
- Topics
- Supply chain
Human review 2026-09-24Command tests: none yetReproduced: not yetVerification record ↓
GitHub CLI before 2.93.0 could attach your GitHub login token to requests to TUF and artifact hosts during three verification commands.
| Who is affected | Anyone using GitHub CLI (gh) before 2.93.0 with authentication set up (or an enterprise token environment variable set) who ran gh attestation, gh release verify or gh release verify-asset, including in CI. |
|---|---|
| What happens | The token went to hosts that should never have received it. Anyone holding the token could use the permissions that token was granted, depending on its type and scopes. GitHub says there is no evidence tokens were logged, retained or accessed by unauthorised parties. |
| What to do now | Upgrade gh to 2.93.0 or later, revoke the tokens and OAuth authorisation you used with GitHub CLI, then review your security log and audit logs.View evidence(4)
|
| Affected versions | Versions before 2.93.0 (github.com/cli/cli/v2 ≤ 2.92.0)View evidence(4)
|
| Fixed versions | 2.93.0 or laterView evidence(3)
|
| CVSS vector | Show full vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Timeline |
|
| CISA KEV | Not listed(Not being in KEV does not mean it has not been exploited)View evidence(3)
|
Blue team playbook
Check, fix / mitigate, respond, harden. Matching the affected versions does not mean you were compromised, and a check that finds nothing does not prove you are safe; each item says what it can and cannot show. Tagged steps point to where the attack flow below can be stopped.
- 01Check your gh version
Anything below 2.93.0 is in the affected range. Check CI images as well as developer machines.
Read-only checkgh --version - 02Check whether the exposure conditions applied
If you ran one of the three verification commands while logged in, you may be affected; if an enterprise token variable was also set, that token may have reached hosts outside GitHub. This check is PlainCVE's reading of the advisory's conditions, not an official procedure. The command below prints only variable names, never the token value.
Read-only checkenv | grep -oE '^(GH|GITHUB)_ENTERPRISE_TOKEN' - 03Review your security log
In GitHub, go to Settings → Archives → Security log to see the last 90 days, including OAuth and personal access token events; it can be filtered and exported. Organizations and enterprises should also check audit logs.
- 01Upgrade to 2.93.0 or later
Update gh the same way you installed it (package manager, official installer or Go module), then confirm the version. No workaround without upgrading has been published.
Read-only checkgh --version
- 01Revoke tokens used with GitHub CLI
The advisory recommends revoking personal access tokens and the GitHub CLI OAuth app authorisation; revoke enterprise tokens too if you had them set. This is a precaution; GitHub says there is no evidence tokens were accessed.
- 02Widen the investigation if you find suspicious activity
If the security or audit logs show token use you don't recognise, treat it as an account compromise and check the repositories and settings that token could reach.
- 01Set enterprise tokens only when needed
The worst case here was the enterprise token being used as the fallback for unknown hosts. Avoid keeping it set in environments that don't need it, such as CI jobs that only verify public artifacts. This is PlainCVE's suggestion.
- 02Give tokens the least privilege
A leaked token grants whatever access it carries, so the narrower its scope, the smaller the damage.
Full remediation steps and notes
| Version | Status |
|---|---|
≤ 2.92.0 (github.com/cli/cli/v2) | Affected |
| 2.93.0 or later | Fixed |
- Order matters. Upgrade first, then log in again or switch to new tokens. If you replace the token but run these verification commands again on an old version, the new token could be sent out the same way. This is PlainCVE’s note; the advisory lists the steps as revoke, upgrade, review logs.
- Revoking the OAuth authorisation logs you out. After you revoke the GitHub CLI OAuth app authorisation, gh loses its login and you’ll need to log in again.
- Don’t forget CI. If these token variables were set in CI, update both the gh version CI uses and the stored secrets.
- No workaround. No way to avoid the issue without upgrading has been published.
Attack flow
Read left to right: this is the order the attack happens in. A blue shield means the step can be stopped; the earlier, the better. Click an icon for details.
- Your system
A user or CI job runs a verification command
gh attestation, gh release verify or gh release verify-asset runs while gh is logged in, or while GH_ENTERPRISE_TOKEN / GITHUB_ENTERPRISE_TOKEN is set.
Defense: Upgrade to 2.93.0 or later before running these commands.
- Your system
The shared HTTP client picks a token by hostname
Older versions treated every *.github.com subdomain as github.com, and for hosts they did not recognise, fell back to the enterprise token if one was set.
Defense: 2.93.0 fixes how the token is attached.
- External
The github.com token is sent to tuf-repo.github.com
This is a GitHub Pages site, not a GitHub API server; it never needed the token.
Defense: Revoke personal access tokens and the OAuth authorisation used with gh.
- External
The enterprise token is sent to hosts outside GitHub
For users with an enterprise token set, it went to tuf-repo-cdn.sigstore.dev and tmaproduction.blob.core.windows.net (Azure Blob Storage).
Defense: Revoke the enterprise token; don't keep it set in the environment unless needed.
- Attacker
If someone obtained a token, they could act with your access
This is a risk scenario, not something known to have happened: GitHub says there is no evidence tokens were logged, retained or accessed by unauthorised parties.
Defense: Look for suspicious token activity in your security log and audit logs.
Who is affected
GitHub CLI (gh) is GitHub’s official command-line tool. The affected commands are three “verification” commands: gh attestation, gh release verify and gh release verify-asset. They check where a file or release was built and whether it has been changed.
| Condition | Where the token was sent | Affected? |
|---|---|---|
| gh before 2.93.0 + logged in to github.com + ran one of these commands | tuf-repo.github.com (a GitHub Pages site, not an API server) | Affected |
gh before 2.93.0 + GH_ENTERPRISE_TOKEN or GITHUB_ENTERPRISE_TOKEN set + ran one of these commands | tuf-repo-cdn.sigstore.dev and tmaproduction.blob.core.windows.net (Azure Blob Storage), both outside GitHub | Affected |
| gh before 2.93.0, but never ran these three commands | Nowhere | Not affected under the conditions the advisory describes |
| gh 2.93.0 or later | Nowhere | Fixed |
A “token” is a string that stands in for your identity: a program holding it can access GitHub with your permissions. GH_ENTERPRISE_TOKEN / GITHUB_ENTERPRISE_TOKEN hold the token for GitHub Enterprise Server; GH_TOKEN / GITHUB_TOKEN are for github.com.
In CI (continuous integration, the automated pipelines that build and verify code), tokens are often stored in environment variables, and these verification commands may run there too. That is PlainCVE’s inference; the sources don’t state it directly.
How it works
To verify, these commands download TUF data (The Update Framework, which gh uses to fetch the signing metadata it should trust) and artifact data. They download it through gh’s shared HTTP client, which has an authentication layer that automatically adds a token to outgoing requests.
The problem was in how it chose which token to attach:
- When normalising hostnames, the code treated every
*.github.comsubdomain asgithub.com, sotuf-repo.github.comreceived the github.com token. - For hosts it didn’t recognise, it fell back to the enterprise token if one was set, so that token went to the sigstore.dev and Azure hosts.
This maps to CWE-863 (Incorrect Authorization). That CWE comes from GitHub; NVD lists none of its own.
The flawed approach (conceptual illustration, not the original source code):
Show code example(go)
// Attach the github.com token if the host "looks like" GitHub, otherwise the enterprise token
func tokenFor(host string) string {
if strings.HasSuffix(host, ".github.com") || host == "github.com" {
return githubToken
}
return enterpriseToken // unknown hosts get a token too
}The fixed approach:
Show code example(go)
// Attach a token only to an exact list of API hosts; third-party downloads get none
func tokenFor(host string) string {
if isKnownAPIHost(host) { // exact-match list
return tokenForHost(host)
}
return ""
}GitHub says there is no evidence tokens were logged, retained or accessed by unauthorised parties. The advisory notes, however, that anyone who did obtain one of these tokens could use the permissions that token was granted, which, depending on the token’s type and permissions, could include private repositories, organization resources or enterprise administration. That is why it still recommends revoking them. For github.com users, the advisory says all authentication types are affected.
Timeline
| Date | Event |
|---|---|
| Unknown | When the bug was introduced and when it was reported have not been disclosed |
| 2026-05-27 | v2.93.0 released; GitHub security advisory published |
| 2026-05-29 | CVE published; NVD listed it the same day |
| 2026-06-25 | Go Vulnerability Database publishes GO-2026-5271 |
| 2026-07-21 | NVD analysis last modified |
| 2026-07-30 | GitHub advisory last updated |
Further reading
- Scoring differences: NVD rates it CVSS 3.1 9.1 (Critical) and GitHub (the CNA) rates it 7.4 (High). The only difference is attack complexity: NVD says Low, GitHub says High. This page uses the NVD score; some third-party sites, such as Strix, also show 9.1.
- Exploitation status: This CVE is not in CISA’s Known Exploited Vulnerabilities (KEV) catalog, and CISA’s SSVC assessment says “Exploitation: none”. EPSS was 0.289% at the time of research.
- Go Vulnerability Database: The old module path
github.com/cli/cli(without v2) is listed as “all versions, no fix available”. That is an automatically generated, unreviewed entry; the actual fix is ingithub.com/cli/cli/v22.93.0. - Not yet established: The sources don’t say which version introduced the bug or which commit or PR fixed it.
- Supply-chain angle: The bug sits in the very tools meant to protect the software supply chain (Sigstore, TUF, attestations).
- Related weakness type: CWE-863.
Verification Reviewed and checked against sources; not yet reproduced in our lab
| Reviewed | 2026-09-24 |
|---|
Verification records describe the environment and the result only, never reproduction steps or code that could attack other people’s systems. See our policy.
Sources
- AdvisoryIncorrect authorization header in API requests to TUF repository mirrors via gh attestation, gh release verify, and gh release verify-asset commands (GHSA-8xvp-7hj6-mcj9) · GitHub (cli/cli), 2026-05-27 · accessed 2026-09-23
- AdvisoryGitHub Advisory Database: GHSA-8xvp-7hj6-mcj9 · GitHub, 2026-05-27 · accessed 2026-09-23
- AdvisoryCVE-2026-48501 record (CVE Services API) · CVE Program / MITRE, 2026-05-29 · accessed 2026-09-23
- CVE / NVD / OSVNVD CVE API: CVE-2026-48501 · NIST NVD, 2026-05-29 · accessed 2026-09-23
- AdvisoryOSV: GHSA-8xvp-7hj6-mcj9 · OSV / Google, 2026-05-29 · accessed 2026-09-23
- AdvisoryGO-2026-5271 · Go Vulnerability Database, 2026-06-25 · accessed 2026-09-23
- Patch / releaseGitHub CLI 2.93.0 release · GitHub (cli/cli), 2026-05-27 · accessed 2026-09-23
- Patch / releaseGitHub CLI 2.93.0 (release API metadata) · GitHub, 2026-05-27 · accessed 2026-09-23
- OtherCVE-2026-48501: Cli Incorrect Authorization (CVSS 9.1) · Strix · accessed 2026-09-23
- Vendorgh attestation verify · GitHub CLI manual · accessed 2026-09-23
- Vendorgh help environment · GitHub CLI manual · accessed 2026-09-23
- VendorReviewing your security log · GitHub Docs · accessed 2026-09-23
- VendorManaging your personal access tokens · GitHub Docs · accessed 2026-09-24
Press brief
In one sentence
GitHub CLI is GitHub's official command-line tool. Versions before 2.93.0 could send a user's GitHub login token to hosts that should never have received it, some outside GitHub, when running three commands used to verify where software came from. GitHub released the fixed version 2.93.0 on May 27, 2026, and says there is no evidence tokens were logged or accessed by unauthorised parties. The flaw is not listed in CISA's Known Exploited Vulnerabilities catalog.
Key facts
- Severity (NVD)
- CVSS 3.1 9.1 services.nvd.nist.gov
- Severity (GitHub, CNA)
- CVSS 3.1 7.4 github.com
- Fixed version
- 2.93.0 (released 2026-05-27) api.github.com
- CVE published
- 2026-05-29 cveawg.mitre.org
- CISA SSVC assessment
- Exploitation: none cveawg.mitre.org
Confirmed
- Before 2.93.0, three GitHub CLI verification commands could attach the user's token in the authorization header of requests to TUF and artifact hosts.
- github.com tokens went to tuf-repo.github.com; enterprise tokens went to hosts on sigstore.dev and Azure Blob Storage.
- GitHub says there is no evidence tokens were logged, retained or accessed by unauthorised parties.
Unconfirmed / disputed
- Scores differ: NVD rates it 9.1 and GitHub 7.4; the only difference is attack complexity.
- Which version first introduced the bug has not been stated.
- The fix commit or PR has not been publicly linked.
Quotable line
The tool meant to prove your software hadn't been tampered with was handing your keys to hosts that never asked for them.
Images
Download the share image (PNG) · Attack flow diagram (downloadable)
Please credit "PlainCVE" and link to this page. Full citation format is under "How to cite" below. Found a factual error? Report it.
GitHub CLI token leak: gh attestation and gh release verify could send your token to TUF and artifact hosts GitHub CLI is GitHub's official command-line tool. Versions before 2.93.0 could send a user's GitHub login token to hosts that should never have received it, some outside GitHub, when running three commands used to verify where software came from. GitHub released the fixed version 2.93.0 on May 27, 2026, and says there is no evidence tokens were logged or accessed by unauthorised parties. The flaw is not listed in CISA's Known Exploited Vulnerabilities catalog. Key facts: - Severity (NVD):CVSS 3.1 9.1(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-48501) - Severity (GitHub, CNA):CVSS 3.1 7.4(https://github.com/cli/cli/security/advisories/GHSA-8xvp-7hj6-mcj9) - Fixed version:2.93.0 (released 2026-05-27)(https://api.github.com/repos/cli/cli/releases/tags/v2.93.0) - CVE published:2026-05-29(https://cveawg.mitre.org/api/cve/CVE-2026-48501) - CISA SSVC assessment:Exploitation: none(https://cveawg.mitre.org/api/cve/CVE-2026-48501) Confirmed: - Before 2.93.0, three GitHub CLI verification commands could attach the user's token in the authorization header of requests to TUF and artifact hosts. - github.com tokens went to tuf-repo.github.com; enterprise tokens went to hosts on sigstore.dev and Azure Blob Storage. - GitHub says there is no evidence tokens were logged, retained or accessed by unauthorised parties. Unconfirmed / disputed: - Scores differ: NVD rates it 9.1 and GitHub 7.4; the only difference is attack complexity. - Which version first introduced the bug has not been stated. - The fix commit or PR has not been publicly linked. 「The tool meant to prove your software hadn't been tampered with was handing your keys to hosts that never asked for them.」— PlainCVE https://plaincve.date/en/vulns/cve-2026-48501-github-cli-token-leak
How to cite this page
This article is CC BY 4.0. Please keep the attribution and link when republishing.
PlainCVE Team (2026). "GitHub CLI token leak: gh attestation and gh release verify could send your token to TUF and artifact hosts". PlainCVE. https://plaincve.date/en/vulns/cve-2026-48501-github-cli-token-leak (accessed YYYY-MM-DD)BibTeX
@misc{cve202648501githubclitokenleak2026,
title = {GitHub CLI token leak: gh attestation and gh release verify could send your token to TUF and artifact hosts},
author = {PlainCVE Team},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/en/vulns/cve-2026-48501-github-cli-token-leak},
note = {Updated 2026-09-24}
}