oras-go: Blind SSRF via unvalidated Link header URL in pagination allows internal network probing
## Summary oras-go's pagination helper `parseLink()` in `registry/remote/utils.go` follows the `Link` response header from a registry without validating the URL's host or scheme. When a malicious registry returns a `Link` header containing an absolute URL pointing to an arbitrary host (e.g., a cloud metadata endpoint), the client makes GET requests to that host from the victim's network. This affects all pagination-based listing operations: Tags, Referrers, and Repositories (catalog). ## Root Cause `parseLink()` at `registry/remote/utils.go:54` calls `resp.Request.URL.Parse(link)` which, for absolute URLs, returns the absolute URL unchanged. The result is passed directly to the next pagination loop iteration where `http.NewRequestWithContext()` creates a GET request to the attacker-specified URL. No host comparison, scheme validation, or IP filtering exists between `parseLink` output and the HTTP request. ## Affected Code Paths - `registry/remote/repository.go:Tags()` calls `parseLink()` for next page URL - `registry/remote/repository.go:Referrers()` calls `parseLink()` for next page URL - `registry/remote/registry.go:Repositories()` calls `parseLink()` for next page URL ## Impact **Blind SSRF from the victim's network.** A malicious registry operator can force any oras-go client that lists tags, referrers, or repositories to issue GET requests to arbitrary internal endpoints: - Cloud instance metadata endpoints for service discovery and IAM role enumeration - Internal HTTP s
GHSA-h7vf-4x9w-h99v
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: osv:GHSA-h7vf-4x9w-h99v
oras.land/oras-go/v2
Source reference: /affected/0/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- 2.6.2
Source reference:
/affected/0/ranges - Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.6.2"
}
]
}
],
"package": {
"name": "oras.land/oras-go/v2",
"purl": "pkg:golang/oras.land/oras-go/v2",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-h7vf-4x9w-h99v/GHSA-h7vf-4x9w-h99v.json",
"last_known_affected_version_range": "<= 2.6.1"
}
}
]- Related CVEs
- CVE-2026-85732
Source reference:
/aliases
Publisher severity
No explicit severity was provided.
- Event
- #63907 · Revision 1
- Added to Heist Feed
- Publisher date