CVE-2025-32019
Description
Harbor is an open source trusted cloud native registry project that stores, signs, and scans content. Versions 2.11.2 and below, as well as versions 2.12.0-rc1 and 2.13.0-rc1, contain a vulnerability where the markdown field in the info tab page can be exploited to inject XSS code. This is fixed in versions 2.11.3 and 2.12.3.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Harbor versions ≤2.11.2 and release candidates contain a stored XSS vulnerability in the repository info markdown field, allowing attackers to inject arbitrary JavaScript.
Vulnerability
Harbor, an open source container registry, is vulnerable to stored cross-site scripting (XSS) in the markdown field of the repository info tab. The markdown content is not properly sanitized, allowing injection of malicious HTML/JavaScript. [1][2]
Exploitation
An attacker with write access to a repository (e.g., project admin or developer) can update the repository description with crafted markdown containing XSS payloads. When other users view the repository info, the payload executes in their browser. No user interaction beyond viewing is required. [3]
Impact
Successful exploitation leads to arbitrary JavaScript execution in the context of the Harbor web interface, potentially enabling session hijacking, credential theft, or unauthorized actions on behalf of the victim user.
Mitigation
The issue is fixed in Harbor versions 2.11.3 and 2.12.3. Users should upgrade immediately. The fix uses HTML escaping for the description field. [4] For older versions, restricting write access to trusted users can reduce risk.
AI Insight generated on May 19, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/goharbor/harborGo | >= 2.12.0-rc1, < 2.12.4-rc1 | 2.12.4-rc1 |
github.com/goharbor/harborGo | >= 2.13.0-rc1, < 2.13.1-rc1 | 2.13.1-rc1 |
github.com/goharbor/harborGo | >= 2.4.0-rc1.1, <= 2.11.2 | — |
github.com/goharbor/harborGo | < 2.4.0-rc1.0.20250421072404-a13a16383a41 | 2.4.0-rc1.0.20250421072404-a13a16383a41 |
Affected products
2Patches
376c2c5f7cfd9[cherry-pick] Update artifact info (#21908)
1 file changed · +2 −1
src/server/v2.0/handler/repository.go+2 −1 modified@@ -17,6 +17,7 @@ package handler import ( "context" "fmt" + "html/template" "github.com/go-openapi/runtime/middleware" @@ -235,7 +236,7 @@ func (r *repositoryAPI) UpdateRepository(ctx context.Context, params operation.U if err := r.repoCtl.Update(ctx, &repomodel.RepoRecord{ RepositoryID: repository.RepositoryID, Name: repository.Name, - Description: params.Repository.Description, + Description: template.HTMLEscapeString(params.Repository.Description), }, "Description"); err != nil { return r.SendError(ctx, err) }
f01943087211[cherry-pick] Update artifact info (#21907)
1 file changed · +2 −1
src/server/v2.0/handler/repository.go+2 −1 modified@@ -17,6 +17,7 @@ package handler import ( "context" "fmt" + "html/template" "github.com/go-openapi/runtime/middleware" @@ -235,7 +236,7 @@ func (r *repositoryAPI) UpdateRepository(ctx context.Context, params operation.U if err := r.repoCtl.Update(ctx, &repomodel.RepoRecord{ RepositoryID: repository.RepositoryID, Name: repository.Name, - Description: params.Repository.Description, + Description: template.HTMLEscapeString(params.Repository.Description), }, "Description"); err != nil { return r.SendError(ctx, err) }
a13a16383a41update artifact info (#21902)
1 file changed · +2 −1
src/server/v2.0/handler/repository.go+2 −1 modified@@ -17,6 +17,7 @@ package handler import ( "context" "fmt" + "html/template" "github.com/go-openapi/runtime/middleware" @@ -235,7 +236,7 @@ func (r *repositoryAPI) UpdateRepository(ctx context.Context, params operation.U if err := r.repoCtl.Update(ctx, &repomodel.RepoRecord{ RepositoryID: repository.RepositoryID, Name: repository.Name, - Description: params.Repository.Description, + Description: template.HTMLEscapeString(params.Repository.Description), }, "Description"); err != nil { return r.SendError(ctx, err) }
Vulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
6- github.com/advisories/GHSA-f9vc-vf3r-pqqqghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2025-32019ghsaADVISORY
- github.com/goharbor/harbor/commit/76c2c5f7cfd9edb356cbb373889a59cc3217a058nvdWEB
- github.com/goharbor/harbor/commit/a13a16383a41a8e20f524593cb290dc52f86f088nvdWEB
- github.com/goharbor/harbor/commit/f019430872118852f83f96cac9c587b89052d1e5nvdWEB
- github.com/goharbor/harbor/security/advisories/GHSA-f9vc-vf3r-pqqqnvdWEB
News mentions
0No linked articles in our index yet.