What goharbor/harbor shipped
Written by FoxPlug from the repository's own releases; not affiliated with Goharbor. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/goharbor/harbor; Goharbor did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Released v2.16.0-rc2, which adds a source column to
artifact_accessory, replaces Redis with Valkey as the cache backend, and enables full multi-architecture support for amd64 and arm64. Release - Replaced gorilla/csrf with net/http.CrossOriginProtection to address CVE-2025-24358 reported by govulncheck. Pull request #23915
- Cherry-picked the CSRF middleware replacement to release-2.16.0, preserving the Host port through the plain-HTTP nginx proxy with regression tests and dependency cleanup. Pull request #24311
- Fixed SameOrigin to compare the IPv6 zone identifier exactly, since interface names are case-sensitive, as a follow-up to GHSA-xgp2-5vxg-rgh2. Pull request #24071
- Backported the IPv6 zone identifier comparison fix to release-2.15.0. Pull request #24096
- Redacted the upload Location in registry rejection errors as a follow-up to GHSA-wjpm-hv5w-gxr6. Pull request #24068
- Restored robot member role assignment compatibility, allowing authenticated robots with project member create or update permission to assign built-in and custom roles while preserving human escalation checks. Pull request #24300
- Cherry-picked the robot member role assignment compatibility fix to the release branch, including regression coverage. Pull request #24302
- Added audit-log events for custom role creation, updates, and deletion so those actions appear in the audit log alongside other resource mutations. Pull request #24018
- Cherry-picked the custom role audit-log events into release-2.16.0. Pull request #24277
Why it matters
This week brings several security fixes, including removing a vulnerable CSRF dependency, tightening IPv6 origin checks, and redacting sensitive upload locations in errors. It also restores robot permission behavior and adds audit logging for custom roles, while the release candidate introduces Valkey caching and multi-architecture support.
Changelog entry
- Release v2.16.0-rc2: add source column to
artifact_accessory, replace Redis with Valkey as cache backend, enable full multi-architecture support for amd64 and arm64. Release - Replace gorilla/csrf with net/http.CrossOriginProtection to remove CVE-2025-24358 exposure. Pull request #23915
- Cherry-pick CSRF middleware replacement to release-2.16.0, preserving Host port through the plain-HTTP nginx proxy with regression tests and dependency cleanup. Pull request #24311
- Fix SameOrigin to compare the IPv6 zone identifier exactly, since interface names are case-sensitive. Pull request #24071
- Backport exact IPv6 zone identifier comparison in SameOrigin to release-2.15.0. Pull request #24096
- Redact the upload Location in registry rejection errors as a follow-up to GHSA-wjpm-hv5w-gxr6. Pull request #24068
- Restore robot member role assignment compatibility while preserving human escalation checks and enforcing permission scope on robot updates. Pull request #24300
- Cherry-pick robot member role assignment compatibility fix to the release branch. Pull request #24302
- Emit audit-log events for custom role creation, updates, and deletion. Pull request #24018
- Cherry-pick custom role audit-log events into release-2.16.0. Pull request #24277
- Change the size of the add-role wizard and add horizontal scroll when required. Pull request #24275
- Cherry-pick the add-role wizard size and horizontal scroll change. Pull request #24276
V2.16.0-rc2 is out: Valkey cache backend, multi-arch amd64+arm64, and a source column on artifact_accessory. Also landed: CSRF middleware replaced after CVE-2025-24358, IPv6 zone comparison fix, robot role assignment restored, and audit-log events for custom roles.
Harbor v2.16.0-rc2 is available, adding Valkey as the cache backend, full multi-architecture support for amd64 and arm64, and a source column on artifact_accessory. This week also includes security work: gorilla/csrf was replaced with net/http.CrossOriginProtection after CVE-2025-24358 was reported, SameOrigin now compares IPv6 zone identifiers exactly, and upload Location values are redacted in registry rejection errors. Robot member role assignment compatibility is restored with escalation checks intact, and custom role creation, updates, and deletion now emit audit-log events.
Week of October 26, 2026
What shipped
- The v2.16.0-rc1 release candidate is out, including Valkey as the cache backend, full multi-architecture support for amd64 and arm64, and a source column on artifact accessories. Release
- Sentinel error comparisons across controller, jobservice, lib and pkg now use errors.Is instead of direct equality checks. Pull request #24149
- UpdateProject now returns 400 Bad Request when
registry_iddiffers from the project's current value, matching the documented create-only behavior. Pull request #24162 - Go was bumped from 1.24.13 to 1.26.10 on release-2.13.0, adding the crypto/x509 SPKI distrust list for compromised eMudhra intermediate CAs. Pull request #24212
- Go was bumped from 1.26.7 to 1.26.10 on release-2.15.0, bringing the same crypto/x509 SPKI distrust list. Pull request #24211
- The publish-release workflow now uses the runner's Docker engine so Buildx no longer fails with a permission error under /home/runner/.docker. Pull request #24244
- The runner Docker Buildx fix was cherry-picked into release-2.16.0. Pull request #24243
- The release process now preserves the empty installer argument that was causing release failures. Pull request #24241
- The empty online installer argument introduced earlier was fixed by quoting all getAssets arguments so the assetsPath parameter is not dropped. Pull request #24242
- The ADDOPTERS file was archived and now points only to the community page as the single place for adopter logos. Pull request #24221
Why it matters
This week brings a 2.16.0 release candidate with Valkey cache support and full multi-architecture images for amd64 and arm64. Several release and update fixes reduce confusing failures: registry_id changes now return an error instead of a misleading success, the release workflow no longer breaks on Buildx permissions, and the installer keeps its empty argument. Go security bumps on the 2.13 and 2.15 release branches add a distrust list for compromised intermediate CAs.
Changelog entry
- V2.16.0-rc1 released with Valkey cache backend, multi-arch amd64/arm64 support, and a source column for artifact accessories. Release
- Standardized sentinel error comparisons to errors.Is across controller, jobservice, lib and pkg. Pull request #24149
- UpdateProject returns 400 Bad Request when
registry_iddiffers from the current value. Pull request #24162 - Bumped Go to 1.26.10 on release-2.13.0 for the crypto/x509 SPKI distrust list. Pull request #24212
- Bumped Go to 1.26.10 on release-2.15.0 for the crypto/x509 SPKI distrust list. Pull request #24211
- Release workflow uses runner Docker to avoid Buildx permission failure. Pull request #24244
- Cherry-picked the runner Docker Buildx fix into release-2.16.0. Pull request #24243
- Release process preserves the empty installer argument. Pull request #24241
- Quoted all getAssets arguments to keep the empty assetsPath parameter. Pull request #24242
- Archived ADDOPTERS and pointed to the community page only. Pull request #24221
- Refreshed the base image. Pull request #24253
- Added OSS Scanner build and threat model enrollment. Pull request #24165
Harbor v2.16.0-rc1 is out with Valkey cache and multi-arch amd64/arm64 images. This week also fixed registry_id updates, release workflow Buildx permissions, installer arguments, and bumped Go to 1.26.10 on release-2.13 and release-2.15.
Harbor v2.16.0-rc1 is available, bringing Valkey as the cache backend, full multi-architecture images for amd64 and arm64, and a source column on artifact accessories. This week also fixed UpdateProject to reject registry_id changes with 400 Bad Request instead of returning 200 OK. The publish-release workflow now uses the runner's Docker engine to avoid a Buildx permission failure, and the release process preserves the empty installer argument. Go was bumped to 1.26.10 on release-2.13.0 and release-2.15.0, adding a crypto/x509 SPKI distrust list for compromised eMudhra intermediate CAs. ADDOPTERS was archived in favor of the community page.
Week of October 19, 2026
What shipped
- The 2.14 branch now avoids a panic in the user audit event resolver when event data is nil for a PUT on the users collection, so a request that previously terminated core no longer does. Pull request #24152
- The 2.13 branch received the same fix for the nil event data panic in the user audit event resolver. Pull request #24153
- The replication resource filter now actually filters again, so an image policy no longer replicates charts alongside images. Pull request #24176
- The replication resource filter fix was backported to the 2.15 branch. Pull request #24180
- Replication now preserves the artifact type for multi-tier accessories, so sub-accessories such as signatures of an SBOM keep the subject artifact type instead of becoming UNKNOWN. Pull request #24200
- The accessory artifact type fix was cherry-picked to another branch. Pull request #24203
- Project metadata cache entries are now invalidated after the database transaction commits, with a project-level cache version added. Pull request #24139
- The bundled Trivy adapter binary is now stamped with version, commit and date instead of reporting placeholder values. Pull request #24164
- The robot account permission selector label now matches the Tag Immutability wording used elsewhere in the locale files. Pull request #24171
- Go was bumped to 1.27.3, which fixes GO-2026-6809 by distrusting compromised intermediate certificates in crypto/x509. Pull request #24188
Why it matters
This week brought two safety fixes for older branches: a nil event data panic on the users endpoint is fixed on both 2.13 and 2.14, and a replication filter that stopped applying is restored so image policies no longer carry charts. Replication also keeps correct artifact types for nested accessories, and the Go bump addresses a certificate vulnerability.
Changelog entry
- Release-2.14: avoid panic in user audit event resolver on nil event data Pull request #24152
- Release-2.13: avoid panic in user audit event resolver on nil event data Pull request #24153
- Fix(replication): make the image resource filter take effect again Pull request #24176
- Release-2.15 backport of the replication resource filter fix Pull request #24180
- Fix(replication): preserve artifact type for multi-tier accessories Pull request #24200
- Cherry-pick of the artifact type fix for multi-tier accessories in replication Pull request #24203
- Improve project metadata cache consistency Pull request #24139
- Stamp version info into the bundled Trivy adapter binary Pull request #24164
- Portal: align robot account immutability label Pull request #24171
- Bump Go to v1.27.3 Pull request #24188
- Release-2.16 backport of the Go v1.27.3 bump Pull request #24192
- Bump Go to 1.26.10 for release-2.14.0 Pull request #24199
This week: the replication resource filter works again, and the fix went back to 2.15. Replication now preserves artifact type for multi-tier accessories. Nil event data no longer panics the user audit resolver on 2.13 and 2.14. Go moved to 1.27.3 for the crypto/x509 fix.
This week in Harbor: replicated artifacts keep their correct type for multi-tier accessories, so signatures of an SBOM no longer inherit an UNKNOWN type from the accessory. The replication resource filter is applied again when fetching artifacts, and that fix was backported to 2.15. A panic in the user audit event resolver on nil event data for a PUT on the users collection is fixed on both the 2.13 and 2.14 branches. The bundled Trivy adapter binary now carries version info instead of placeholders, and Go moved to 1.27.3 to distrust compromised intermediate certificates.
Week of October 12, 2026
What shipped
- Manifest PUT bodies in core are now capped at 4 MiB, including chunked bodies without a Content-Length, and oversized bodies return 413. Pull request #24102
- The CNAI parser now enforces the actual byte limit while unpacking a model's README or LICENSE layer, so a small tar in GNU sparse format can no longer expand to gigabytes in core memory. Pull request #24143
- The same CNAI parser byte limit fix was cherry-picked to release-2.13. Pull request #24144
- The same CNAI parser byte limit fix was cherry-picked to release-2.15. Pull request #24146
- Registryctl now rejects empty secrets and skips them during validation, preventing an authentication bypass when the service secret is empty or unset. Pull request #23946
- Cron expressions that parse but can never fire no longer cause jobservice to spin at high CPU. Pull request #23925
- Registry upload Location headers are now validated against the request origin rather than the configured endpoint. Pull request #24131
- Failed tasks now record a status message and execution status aggregates task errors, with the message exposed in the replication task API and shown as a tooltip. Pull request #24028
- Replication tasks from event-based executions now run in a dedicated higher-priority queue so bulk manual or scheduled replication cannot block them. Pull request #24138
- Private, loopback and link-local webhook targets are allowed by default again, with the installer defaulting the private network setting to allow. Pull request #24129
Why it matters
This week mixes security hardening and reliability fixes for people running Harbor. Decompression and request body limits, empty secret rejection, upload location checks and cron CPU spin all close ways a deployment could be abused or degraded. Replication and task reporting changes make event-triggered work and failure diagnosis more predictable, and several fixes were backported across maintained release branches.
Changelog entry
- Bound audited and manifest request bodies in core, including chunked bodies, returning 413 for oversized manifests. Pull request #24102
- Enforce the actual byte limit in the CNAI parser when unpacking model README and LICENSE layers. Pull request #24143
- Backport the CNAI parser byte limit fix to release-2.13. Pull request #24144
- Backport the CNAI parser byte limit fix to release-2.15. Pull request #24146
- Registryctl rejects empty secrets to prevent an authentication bypass when the service secret is empty or unset. Pull request #23946
- Prevent jobservice CPU spin from cron expressions that are valid but can never fire. Pull request #23925
- Validate registry upload Location headers against the request origin instead of the configured endpoint. Pull request #24131
- Record task failure status messages and aggregate task errors into execution status, exposed in the replication task API. Pull request #24028
- Run event-triggered replication in a dedicated higher-priority queue to avoid head-of-line blocking. Pull request #24138
- Allow private network webhook targets by default and default the installer setting to allow. Pull request #24129
- Redact the scanner URL in candidate listings for callers without system admin permission. Pull request #23947
- Require update permission to start a manual preheat execution. Pull request #24141
This week: manifest body limits and decompression bounds close abuse paths, empty registryctl secrets are rejected, and cron expressions that can never fire no longer spin jobservice CPU. Event-triggered replication got a higher-priority queue, and task failures now surface error
This week in Harbor: manifest PUT bodies are capped at 4 MiB including chunked uploads, the CNAI parser bounds the bytes it actually unpacks, and registryctl rejects empty secrets. Upload Location headers are validated against the request origin, and cron expressions that can never fire no longer spin jobservice CPU. Event-triggered replication now runs in a dedicated higher-priority queue, and failed tasks record a status message that is exposed in the replication task API and shown in the UI.
Week of October 5, 2026
What shipped
- Release v2.13.6 warns that webhooks to internal addresses are blocked by default after the fix for GHSA-2phj-cp9f-qq6w. Release
- Release v2.14.5 carries the same webhook blocking default for internal, loopback, link-local and other non-public addresses. Release
- Release v2.15.3 ships the webhook change and its breaking-change warning for internal receivers. Release
- Release v2.15.4 restores webhook delivery to internal receivers and makes legacy signer pull the default. Release
- Webhook and Slack notifications to private, loopback or link-local addresses work by default again instead of requiring an explicit setting. Pull request #24082
- Webhook egress now has three policy levels plus an allowlist in place of a single boolean switch. Pull request #24079
- Legacy signer pull is enabled by default for content trust so existing cosign and notation signing workflows keep working after upgrade. Pull request #24085
- The legacy signer pull switch is exposed in harbor.yml so the setting survives a restart. Pull request #24101
- Rejected pagination Link errors no longer quote the base URL with its query, dropping userinfo, query and fragment before reporting. Pull request #24095
- The redis base image on the 2.14 line installs Redis 7.2.11 instead of 7.2.6, picking up the CVE-2025-49844 fix. Pull request #24065
Why it matters
This week was mostly about releases and about undoing a breaking default. Operators upgrading to the 2.13, 2.14 or 2.15 patch releases had webhooks and Slack delivery to internal addresses blocked, including hostnames that resolve to cluster-local names, so many on-premise and Kubernetes receivers stopped working. The follow-up releases make private network access the default again and add policy levels and an allowlist, while content trust keeps legacy signer pull on by default so existing cosign and notation workflows are not broken.
Changelog entry
- Release v2.15.4: webhooks to internal receivers allowed by default, legacy signer pull allowed by default, plus cherry-picked fixes. Release
- Release v2.15.4-rc1 with the same webhook and content trust defaults. Release
- Release v2.15.3: warning that webhooks to internal addresses are blocked by default. Release
- Release v2.14.5: warning that webhooks to internal addresses are blocked by default. Release
- Release v2.13.6: warning that webhooks to internal addresses are blocked by default. Release
- Webhook and Slack notifications reach private, loopback and link-local addresses by default again, with the setting kept. Pull request #24082
- Webhook egress policy now offers three levels and an allowlist instead of one boolean switch. Pull request #24079
- Content trust allows legacy signer pull by default to avoid breaking cosign and notation signing on upgrade. Pull request #24085
- The legacy signer pull switch is exposed in harbor.yml so it survives a prepare restart. Pull request #24101
- Rejected pagination Link errors redact userinfo, query and fragment of the base URL. Pull request #24095
- Redis base image on the 2.14 line pins Redis 7.2.11 instead of 7.2.6 for the CVE-2025-49844 fix. Pull request #24065
- Redis base image on the 2.13 line pins Redis 7.2.11 instead of 7.2.6 for the CVE-2025-49844 fix. Pull request #24066
Several patch releases shipped this week. Webhooks to internal addresses are blocked by default in the 2.13, 2.14 and 2.15 releases, then allowed by default again in the follow-ups, which add egress policy levels and an allowlist. Legacy signer pull is on by default.
This week Harbor published patch releases on several branches, and the headline change for operators is the webhook egress default. The fix for GHSA-2phj-cp9f-qq6w blocks webhook and Slack delivery to private, loopback, link-local and other non-public addresses, including hostnames that resolve to them such as *.svc.cluster.local, so webhooks to internal receivers stopped working after upgrade. The follow-up releases make private network access the default again, keep the setting configurable, and add three egress policy levels plus an allowlist instead of a single boolean. Content trust also defaults to allowing legacy signer pull so existing cosign and notation signing workflows keep working. Other fixes cover redaction of pagination links in rejection errors, the redis base image on the
Week of September 28, 2026
What shipped
- Scheduled garbage collection now reads the registry Redis URL from the core environment at runtime instead of relying on a potentially stale URL saved in the database, fixing cases where Redis was moved, renamed, or had its password changed. Pull request #24037
- Custom project roles are now available as a hybrid implementation that keeps built-in roles in code while allowing custom roles to be stored in the database. Pull request #23804
- The proxy cache backend's stale content option label and tooltip were updated to clarify that local content is always served when the upstream registry is unhealthy, removing the misleading unavailable-upstream description. Pull request #23978
- Robot tests for CVE export were updated to expect the corrected toast message 'Triggered exporting CVEs successfully.' Pull request #24010
- The spectral binary download in CI now retries on failure, preventing transient GitHub Releases issues from breaking the
lint_apisbuild step. Pull request #23984 - Added the missing
get_member_role_idhelper method to the project test helper for API tests. Pull request #23997
Why it matters
This week's changes improve garbage collection reliability after Redis configuration changes, add support for custom project roles alongside built-ins, and clarify proxy cache behavior. Bug fixes and test updates ensure the export and audit features work correctly.
Changelog entry
- Fix(gc): Use the current registry Redis URL for scheduled runs instead of potentially stale cached URL Pull request #24037
- Feat: custom project roles with hybrid approach keeping built-in roles in code and custom roles in database Pull request #23804
- Fix(portal): clarify proxy cache serve stale content option label and remove misleading unavailable-upstream description Pull request #23978
- Fix(test): update CVE export toast message expectation in Robot tests Pull request #24010
- Ci: retry spectral binary download to handle transient GitHub Releases failures Pull request #23984
- Test(apitests): add missing
get_member_role_idhelper method to project test helper Pull request #23997
Harbor updates: GC now uses current Redis config at runtime, custom project roles are available, and proxy cache stale content labeling is clearer. CI improvements prevent transient failures.
This week's Harbor updates focus on reliability and flexibility. Scheduled garbage collection now reads Redis configuration from the environment at runtime, so moves or password changes no longer break GC. Custom project roles join built-in roles for more granular access control. Proxy cache behavior is now more clearly documented. CI improvements make builds more resilient to transient network issues.
Week of September 21, 2026
What shipped
- Released v2.15.3-rc2 with fixes for user audit event resolution, registry ping endpoint constraint, and other component updates. Release
- Fixed retention policy metadata leak when deleting projects, which previously left orphaned
retention_idreferences in the database. Pull request #23942 - Fixed garbage collection to not report blobs missing from storage as freed space, preventing inaccurate size reporting in GC jobs. Pull request #23972
- Corrected grammar, formatting, and error messages in user-facing strings across middleware, REST API handlers, core controllers, jobservice, and portal. Pull request #23974
- Added
merge_grouptrigger to CI and CodeQL workflows to support merge queue functionality. Pull request #23986
Why it matters
This week addresses data consistency issues in retention policies and garbage collection reporting, while improving the clarity of user-facing messages. These fixes reduce database leaks and ensure GC operations report accurate freed space metrics.
Changelog entry
- V2.15.3-rc2 released with multiple bug fixes and component updates Release
- Fix(retention): drop
retention_idmetadata on project delete Pull request #23942 - Fix(gc): do not count blobs missing from storage as freed space Pull request #23972
- Fix: correct grammar, formatting, and non-actionable error messages Pull request #23974
- Ci: add
merge_grouptrigger to CI and CodeQL workflows Pull request #23986
Harbor v2.15.3-rc2 is out. This release fixes retention policy metadata leaks, corrects GC freed space reporting, and improves error messages across the platform.
Harbor v2.15.3-rc2 is available. Key improvements include fixing retention policy metadata that leaked after project deletion, correcting garbage collection to accurately report freed space without counting missing blobs, and refining error messages for better clarity. These fixes improve data consistency and operational reliability.
Week of September 14, 2026
What shipped
- Retention settings are now exposed during proxy-cache project creation. Pull request #23863
- HTTPS URL scheme checking for CA download is now case-insensitive per RFC 3986. Pull request #23888
- Cache prefix handling fixed to prevent double prefixing when removing expired entries. Pull request #23913
- Graceful shutdown no longer produces misleading error logs from http.ErrServerClosed. Pull request #23296
- GitHub CodeQL action updates are now applied in a single Dependabot PR instead of separate ones. Pull request #23929
- Dependabot is configured to ignore major Angular and TypeScript updates in the portal. Pull request #23858
- Documentation typo corrected in member component. Pull request #23807
Why it matters
This week's changes improve proxy-cache configuration options, fix protocol handling edge cases, and address cache consistency issues. The fixes ensure cleaner shutdown behavior and more reliable dependency management for the project.
Changelog entry
- Feature: Expose retention setting during proxy-cache project creation Pull request #23863
- Fix: HTTPS URL scheme check for CA download is now case-insensitive Pull request #23888
- Fix: Avoid double prefix when removing expired cache entries Pull request #23913
- Fix: Ignore http.ErrServerClosed on graceful shutdown to prevent misleading error logs Pull request #23296
- CI: Consolidate GitHub CodeQL action updates into single Dependabot PR Pull request #23929
- CI: Ignore Angular and TypeScript major updates in portal Dependabot groups Pull request #23858
- Docs: Fix typo in member component Pull request #23807
Harbor's latest updates include retention settings for proxy-cache projects, RFC-compliant URL scheme checking, and fixes for cache handling and graceful shutdown behavior.
Harbor continues improving with this week's releases: retention settings are now configurable during proxy-cache project creation, URL scheme checking for CA downloads is now RFC 3986 compliant, cache prefix handling is fixed to prevent entry duplication, and graceful shutdown produces cleaner logs. Plus updated dependency management strategies for better CI stability.