Distribution: Tag deletion bypasses `storage.delete.enabled` configuration
Exploitation and risk
Source statusCISA KEV lists vulnerabilities known to be exploited. FIRST EPSS estimates the likelihood of exploitation in the next 30 days. An unavailable score does not mean zero risk.
Which CVEs have scores here?
This view includes predictions for CVE identifiers explicitly listed in public NuGet advisories. Microsoft release pages have their own prediction coverage. Check source status for the scope and latest checks.
No exploitation or prediction data is available here for these CVEs. This does not mean they are safe or unlikely to be exploited.
cve-program · CVE-2026-41888
PublishedDistribution is a toolkit to pack, ship, store, and deliver container content. Prior to 3.1.1, tag deletion via the DELETE /v2/<name>/manifests/<tag> endpoint bypasses the storage.delete.enabled: false configuration, allowing any API client to remove tags from repositories even when the operator has explicitly disabled deletion. This vulnerability is fixed in 3.1.1.
- Source published
- 14 May 2026 16:53:37 UTC
- Source modified
- 14 May 2026 18:38:43 UTC
- Saved here
- 23 Oct 2026 15:48:27 UTC
- Source terms
- CVE Program Terms of Use
Original source record · Cite this exact observation · Complete original publisher JSON
Source: cve-program · CVE Program Terms of Use. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.
CVSS 4.0 · 6.3 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
euvd · EUVD-2026-30341
PublishedDistribution is a toolkit to pack, ship, store, and deliver container content. Prior to 3.1.1, tag deletion via the DELETE /v2/<name>/manifests/<tag> endpoint bypasses the storage.delete.enabled: false configuration, allowing any API client to remove tags from repositories even when the operator has explicitly disabled deletion. This vulnerability is fixed in 3.1.1.
Additional publisher context
EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.
Original publisher date fields
datePublished: May 14, 2026, 4:53:37 PM
dateUpdated: May 14, 2026, 6:38:43 PM
19 related source bulletins · separate from aliases
openSUSE-SU-2026:10814-1: helm-4.2.0-1.1 on GA media
CVE-2026-41888
SUSE-SU-2026:23984-1: Security update for helm
CVE-2026-33814 · CVE-2026-35204 · CVE-2026-35205 · CVE-2026-35206 · CVE-2026-41178 · CVE-2026-41888 · CVE-2026-48978 · CVE-2026-50151 · CVE-2026-50163 · CVE-2026-56852 · CVE-2026-56854 · CVE-2026-56855 · CVE-2026-56864 · CVE-2026-56865 · CVE-2026-78662 · CVE-2026-81871 · CVE-2026-81872 · CVE-2026-85732
SUSE-SU-2026:22001-1: Security update for helm
CVE-2026-33814 · CVE-2026-41888
openSUSE-SU-2026:21084-1: Security update for distribution
CVE-2026-33814 · CVE-2026-39821 · CVE-2026-39827 · CVE-2026-39828 · CVE-2026-39829 · CVE-2026-39830 · CVE-2026-39831 · CVE-2026-39832 · CVE-2026-39833 · CVE-2026-39834 · CVE-2026-39835 · CVE-2026-41888 · CVE-2026-42508 · CVE-2026-46595 · CVE-2026-46597 · CVE-2026-46598
SUSE-SU-2026:23973-1: Security update for helm
CVE-2026-33814 · CVE-2026-35204 · CVE-2026-35205 · CVE-2026-35206 · CVE-2026-41178 · CVE-2026-41888 · CVE-2026-48978 · CVE-2026-50151 · CVE-2026-50163 · CVE-2026-56852 · CVE-2026-56854 · CVE-2026-56855 · CVE-2026-56864 · CVE-2026-56865 · CVE-2026-78662 · CVE-2026-81871 · CVE-2026-81872 · CVE-2026-85732
openSUSE-SU-2026:11574-1: hauler-2.0.3-1.1 on GA media
CVE-2026-41888 · CVE-2026-72817
openSUSE-SU-2026:21983-1: Security update for helm
CVE-2026-33814 · CVE-2026-35204 · CVE-2026-35205 · CVE-2026-35206 · CVE-2026-41178 · CVE-2026-41888 · CVE-2026-48978 · CVE-2026-50151 · CVE-2026-50163 · CVE-2026-56852 · CVE-2026-56854 · CVE-2026-56855 · CVE-2026-56864 · CVE-2026-56865 · CVE-2026-78662 · CVE-2026-81871 · CVE-2026-81872 · CVE-2026-85732
SUSE-SU-2026:21881-1: Security update for helm
CVE-2026-33814 · CVE-2026-41888
openSUSE-SU-2026:21841-1: Security update for hauler
CVE-2026-41888 · CVE-2026-56854 · CVE-2026-56855 · CVE-2026-78662 · CVE-2026-84303 · CVE-2026-84304 · CVE-2026-84445
openSUSE-SU-2026:20860-1: Security update for helm
CVE-2026-33814 · CVE-2026-41888
SUSE-SU-2026:21915-1: Security update for helm
CVE-2026-33814 · CVE-2026-41888
openSUSE-SU-2026:21816-1: Security update for hauler
CVE-2026-41888 · CVE-2026-56854 · CVE-2026-56855 · CVE-2026-78662
openSUSE-SU-2026:10824-1: helm3-3.21.0-1.1 on GA media
CVE-2026-33814 · CVE-2026-41888
openSUSE-SU-2026:21793-1: Security update for hauler
CVE-2026-37236 · CVE-2026-41178 · CVE-2026-41888 · CVE-2026-72815 · CVE-2026-72816 · CVE-2026-72817
SUSE-SU-2026:22159-1: Security update for distribution
CVE-2026-33814 · CVE-2026-39821 · CVE-2026-39827 · CVE-2026-39828 · CVE-2026-39829 · CVE-2026-39830 · CVE-2026-39831 · CVE-2026-39832 · CVE-2026-39833 · CVE-2026-39834 · CVE-2026-39835 · CVE-2026-41888 · CVE-2026-42508 · CVE-2026-46595 · CVE-2026-46597 · CVE-2026-46598
SUSE-SU-2026:2049-1: Security update for helm
CVE-2026-33814 · CVE-2026-41888
openSUSE-SU-2026:10812-1: distribution-registry-3.1.1-1.1 on GA media
CVE-2026-41888
SUSE-SU-2026:24282-1: Security update for helm
CVE-2026-33814 · CVE-2026-35204 · CVE-2026-35205 · CVE-2026-35206 · CVE-2026-41178 · CVE-2026-41888 · CVE-2026-48978 · CVE-2026-50151 · CVE-2026-50163 · CVE-2026-56852 · CVE-2026-56854 · CVE-2026-56855 · CVE-2026-56864 · CVE-2026-56865 · CVE-2026-63209 · CVE-2026-78662 · CVE-2026-81870 · CVE-2026-81871 · CVE-2026-81872 · CVE-2026-85732
SUSE-SU-2026:21952-1: Security update for helm
CVE-2026-33814 · CVE-2026-41888
- Source published
- May 14, 2026, 4:53:37 PM (timezone not stated)
- Source modified
- May 14, 2026, 6:38:43 PM (timezone not stated)
- Saved here
- 15 Nov 2026 13:02:55 UTC
- Source terms
- ENISA EUVD · source terms and attribution apply
Original source record · Cite this exact observation · Complete original publisher JSON
Source: euvd · ENISA EUVD · source terms and attribution apply. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.
EUVD CVSS 4.0 · 6.3 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
nvd · CVE-2026-41888
PublishedDistribution is a toolkit to pack, ship, store, and deliver container content. Prior to 3.1.1, tag deletion via the DELETE /v2/<name>/manifests/<tag> endpoint bypasses the storage.delete.enabled: false configuration, allowing any API client to remove tags from repositories even when the operator has explicitly disabled deletion. This vulnerability is fixed in 3.1.1.
Additional publisher context
NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.
Source analysis status: Analyzed
Weakness classifications: CWE-863
Original publisher date fields
published: 2026-05-14T18:16:47.380
lastModified: 2026-11-11T20:10:00.273
1 source CPE criteria · context only
- cpe:2.3:a:distribution:distribution:*:*:*:*:*:*:*:*
The original JSON retains the logical configuration operators, exclusions and version bounds.
- Source published
- 14 May 2026 18:16:47 UTC
- Source modified
- 11 Nov 2026 20:10:00 UTC
- Saved here
- 12 Nov 2026 16:19:25 UTC
- Source terms
- NIST NVD usage terms; underlying source attribution retained
Original source record · Cite this exact observation · Complete original publisher JSON
Source: nvd · NIST NVD usage terms; underlying source attribution retained. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.
CVSS 4.0 · [email protected] · Secondary · 6.3 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1 · [email protected] · Primary · 6.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
osv · GHSA-6pjf-3r9x-m592
Published### Summary Tag deletion via the `DELETE /v2/<name>/manifests/<tag>` endpoint bypasses the `storage.delete.enabled: false` configuration, allowing any API client to remove tags from repositories even when the operator has explicitly disabled deletion. ### Details When `storage.delete.enabled` is configured to false, digest-based manifest deletion is correctly rejected by the guard in [registry/storage/linkedblobstore.go:212-215](https://github.com/distribution/distribution/blob/main/registry/storage/linkedblobstore.go#L213-L215). However, tag deletion takes a separate code path that never checks this setting: In [`registry/handlers/manifests.go:439-453`](https://github.com/distribution/distribution/blob/main/registry/handlers/manifests.go#L439-L453), `DeleteManifest` detects a tag reference, calls `tagService.Untag()`, returns, never consulting `registry.deleteEnabled`. In turn, [`tagStore.Untag()`](https://github.com/distribution/distribution/blob/main/registry/storage/tagstore.go#L111-L121) calls the storage driver directly to delete the tag path without checking whether deletes are enabled. ### PoC Using a paired down Distribution configuration that explicitly disables deletes, such as this one, stored as `config.yaml`: ```yaml version: 0.1 storage: delete: enabled: false filesystem: rootdirectory: /var/lib/registry http: addr: :5000 ``` Start a local Distribution, mounting in the above configuration from the current directory: ```shell docker run -p 5000:5000 -v "$(pwd)/config.yaml":/config.yaml --restart=always --name registry registry:3.1.0 /config.yaml ``` In a separate terminal session/tab, push `alpine:3.23` into the running instance: ```shell docker pull alpine:3.23 docker tag alpine:3.23 localhost:5000/alpine:3.23 docker push localhost:5000/alpine:3.23 ``` Confirm that the tag shows up as expected: ```shell curl 'http://localhost:5000/v2/alpine/tags/list' {"name":"alpine","tags":["3.23"]} ``` Issue a delete for the `3.23` tag: ```shell curl -X DELETE 'http://localhost:5000/v2/alpine/manifests/3.23' ``` Observe that the tag is now gone, despite deletes being disabled: ```shell curl 'http://localhost:5000/v2/alpine/tags/list' {"name":"alpine","tags":null} ``` ### Impact This is an authorization bypass vulnerability. Any client with network access to the registry can delete tags despite the operator having disabled deletion. This can cause denial of service for consumers pulling by tag and enables supply-chain disruption by removing trusted tags from a registry that the operator and/or users believed to be immutable.
- Source published
- 4 May 2026 20:48:57 UTC
- Source modified
- 10 Sep 2026 03:50:45 UTC
- Saved here
- 24 Oct 2026 13:19:41 UTC
- Source terms
- GitHub Advisory Database · CC-BY-4.0
Original source record · Cite this exact observation · Complete original publisher JSON
Source: osv · GitHub Advisory Database · CC-BY-4.0. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.
CVSS_V4 · CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
Publisher rating · MODERATE
osv · GO-2026-5185
PublishedDistribution's tag deletion bypasses `storage.delete.enabled` configuration in github.com/distribution/distribution
- Source published
- 25 Jun 2026 18:43:15 UTC
- Source modified
- 18 Aug 2026 11:25:33 UTC
- Saved here
- 24 Oct 2026 13:19:41 UTC
- Source terms
- OSV · upstream source license applies
Original source record · Cite this exact observation · Complete original publisher JSON
Source: osv · OSV · upstream source license applies. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.