CVE-2023-2253
Medium · 6.5CVSS
6.5
EPSS
0.9%
Published
Jun 6, 2023
CISA due date
—
Cloudanix analysis
An attacker who can reach the container registry can send one specially crafted request that uses up all the server's memory and makes the registry stop working.
- Exploitation
- Remote Authenticated
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Application
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw allows an authenticated user to supply an arbitrarily large integer for the 'n' query parameter on the /v2/_catalog endpoint, triggering allocation of a correspondingly large in-memory string slice that exhausts available heap memory and terminates the registry process.
Why it matters to the business
Service disruption for container image registries, potentially halting CI/CD pipelines, deployments, and runtime operations that depend on the registry in OpenShift environments. With no public fixes listed, organizations must apply vendor patches or implement workarounds promptly to avoid prolonged outages.
How an attack unfolds
An attacker with valid credentials to the registry sends a single GET request to /v2/_catalog?n=<very large number>, causing the server to attempt to allocate an enormous array and crash due to memory exhaustion.
How to fix it
Upgrade affected Red Hat OpenShift components to patched versions once released. In the interim, restrict access to the registry API or implement rate limiting and input validation on the n parameter at a reverse proxy or WAF.
How to confirm the fix worked
Monitor registry logs for requests containing unusually large n values; test by sending controlled large-n requests in a staging environment and confirm memory usage remains bounded after remediation.
Typical attack path
- Obtain valid registry credentials
- Craft HTTP GET request to /v2/_catalog with oversized n parameter
- Observe service crash or high memory consumption leading to DoS
How to detect it
Review web server or registry access logs for GET requests to /v2/_catalog containing the n parameter with values exceeding expected bounds (e.g., >10000); correlate with sudden memory exhaustion or OOMKilled events in container orchestration logs.
- /v2/_catalog?n=999999999
- large n parameter in registry API requests
- OOMKilled events on distribution registry containers
What your security team should do
- Prioritize patching OpenShift registry components as soon as fixes become available
- Implement network-level controls to limit unauthenticated or excessive API calls to the catalog endpoint
- Add monitoring for memory spikes on registry pods
The record
A flaw was found in the `/v2/_catalog` endpoint in distribution/distribution, which accepts a parameter to control the maximum number of records returned (query string: `n`). This vulnerability allows a malicious user to submit an unreasonably large value for `n,` causing the allocation of a massive string array, possibly causing a denial of service through excessive use of memory.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/distribution/distribution | 0 | 2.8.2-beta.1+incompatible |
| Go | github.com/docker/distribution | 0 | 2.8.2-beta.1 |
| Chainguard | aactl | 0 | 0.4.12-r7 |
| Chainguard | argocd-image-updater | 0 | 0.17.0-r1 |
| Chainguard | argocd-image-updater-compat | 0 | 0.17.0-r1 |
| Chainguard | argocd-image-updater-fips | 0 | 0.17.0-r2 |
| Chainguard | bom | 0 | 0.6.0-r0 |
| Chainguard | flux-0 | 0 | 0 |
| Chainguard | flux-compat | 0 | 0 |
| Chainguard | flux-helm-controller-0.37 | 0 | 0.27.0-r7 |
| Chainguard | flux-image-reflector-controller-0 | 0 | 0.26.1-r3 |
| Chainguard | goreleaser-1.18 | 0 | 1.18.2-r12 |
| Chainguard | kpt | 0 | 1.0.0_beta31-r5 |
| Chainguard | kube-apiserver-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kube-apiserver-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kube-controller-manager-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kube-controller-manager-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kube-proxy-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kube-proxy-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kube-scheduler-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kube-scheduler-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kubeadm-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kubeadm-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kubectl-bash-completion-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kubectl-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kubectl-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kubelet-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kubelet-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | kubernetes-dashboard | 0 | 2.7.0-r2 |
| Chainguard | kubernetes-fips-1.27 | 0 | 1.27.12-r1 |
| Chainguard | kubernetes-fips-1.27-default | 0 | 1.27.12-r1 |
| Chainguard | prometheus-2.38 | 0 | 2.38.0-r7 |
| Chainguard | prometheus-2.38-bitnami-compat | 0 | 2.38.0-r7 |
| Chainguard | prometheus-fips-2.38 | 0 | 0 |
| Chainguard | traefik | 0 | 2.10.1-r2 |
| Debian:10 | docker-registry | 0 | 2.6.2~ds1-2+deb10u1 |
| Debian:11 | docker-registry | 0 | 2.7.1+ds2-7+deb11u1 |
| Debian:12 | docker-registry | 0 | 2.8.2+ds1-1 |
| Debian:13 | docker-registry | 0 | 2.8.2+ds1-1 |
| Mageia:8 | docker-registry | 0 | 2.8.2-1.mga8 |
| SUSE:Linux Enterprise Module for Containers 12 | docker-distribution | 0 | 2.6.2-13.9.1 |
| SUSE:Linux Enterprise Module for Containers 15 SP4 | distribution | 0 | 2.8.1-150400.9.18.1 |
| SUSE:Linux Enterprise Module for Containers 15 SP4 | distribution | 0 | 2.8.2-150400.9.21.1 |
| Ubuntu:20.04:LTS | docker-registry | 0 | 2.7.1+ds2-7ubuntu0.3 |
| Ubuntu:22.04:LTS | docker-registry | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | docker-registry | 0 | 2.3.0~ds1-1ubuntu0.1~esm1 |
| Ubuntu:Pro:18.04:LTS | docker-registry | 0 | 2.6.2~ds1-1ubuntu0.1~esm1 |
| Ubuntu:Pro:22.04:LTS | docker-registry | 0 | 2.8.0+ds1-4ubuntu0.1~esm2 |
| Wolfi | aactl | 0 | 0.4.12-r7 |
| Wolfi | argocd-image-updater | 0 | 0.17.0-r1 |
| Wolfi | argocd-image-updater-compat | 0 | 0.17.0-r1 |
| Wolfi | bom | 0 | 0.6.0-r0 |
| Wolfi | flux-compat | 0 | 0 |
| Wolfi | goreleaser-1.18 | 0 | 1.18.2-r12 |
| Wolfi | kpt | 0 | 1.0.0_beta31-r5 |
| Wolfi | kubernetes-dashboard | 0 | 2.7.0-r2 |
| Wolfi | traefik | 0 | 2.10.1-r2 |
| openSUSE:Leap 15.4 | distribution | 0 | 2.8.1-150400.9.18.1 |
| openSUSE:Leap 15.4 | distribution | 0 | 2.8.2-150400.9.21.1 |
| openSUSE:Tumbleweed | distribution-registry | 0 | 2.8.2-1.1 |
Related vulnerabilities
- CVE-2017-11468 Docker Registry before 2.6.2 in Docker Distribution does not properly restrict the amount… Also affects github.com/docker/distribution
- CVE-2026-33186 gRPC-Go is the Go language implementation of gRPC. Also affects aactl
- CVE-2025-15558 Docker CLI for Windows searches for plugin binaries in C:\ProgramData\Docker\cli-plugins… Also affects aactl
- CVE-2026-1229 The CombinedMult function in the CIRCL ecc/p384 package (secp384r1 curve) produces an… Also affects aactl
- CVE-2026-26958 filippo.io/edwards25519 is a Go library implementing the edwards25519 elliptic curve with… Also affects aactl
- CVE-2025-68121 During session resumption in crypto/tls, if the underlying Config has its ClientCAs or… Also affects aactl
- CVE-2025-61732 A discrepancy between how Go and C/C++ comments were parsed allowed for code smuggling… Also affects aactl
- CVE-2025-68119 Downloading and building modules with malicious version strings can cause local code… Also affects aactl