Skip to main content
CVE Vulnerability Database

CVE-2022-1708: Kubernetes CRI-O DOS Vulnerability

CVE-2022-1708 is a denial of service vulnerability in Kubernetes CRI-O that allows attackers with Kube API access to exhaust node memory or disk space. This article covers technical details, affected versions, and mitigations.

Published:

CVE-2022-1708 Overview

A resource exhaustion vulnerability was discovered in CRI-O, the lightweight container runtime for Kubernetes. The vulnerability exists in the ExecSync request handling mechanism, where the runtime reads command output in an unbounded manner. When the ExecSync request executes commands within a container and captures the output, CRI-O reads the entire output file into memory without size restrictions. This allows an attacker with access to the Kubernetes API to generate excessively large command outputs that exhaust either the memory or disk space of the host node, resulting in a denial of service condition.

Critical Impact

Any user with access to the Kubernetes API can cause node-level denial of service by exhausting memory or disk space through crafted ExecSync requests, potentially disrupting all containerized workloads on affected nodes.

Affected Products

  • Kubernetes CRI-O (versions prior to patched releases including 1.24.0)
  • Red Hat OpenShift Container Platform 3.11, 4.0, 4.9, 4.10
  • Red Hat Enterprise Linux 7.0, 8.0, 9.0
  • Fedora 36

Discovery Timeline

  • 2022-06-07 - CVE-2022-1708 published to NVD
  • 2024-11-21 - Last updated in NVD database

Technical Details for CVE-2022-1708

Vulnerability Analysis

The vulnerability is classified under CWE-400 (Uncontrolled Resource Consumption) and CWE-770 (Allocation of Resources Without Limits or Throttling). The core issue lies in how CRI-O handles the output from commands executed via the ExecSync request. The runtime reads the entire output file corresponding to the command execution without implementing any size limitations or streaming mechanisms. This architectural flaw means that a command producing large amounts of output (such as printing contents of large files or generating data in a loop) will cause CRI-O to allocate memory proportional to the output size.

The attack is particularly dangerous in multi-tenant Kubernetes environments where multiple users or services have API access. Since the resource exhaustion occurs at the node level rather than within the container, a successful attack can impact all workloads running on the affected node, not just the attacker's containers.

Root Cause

The root cause stems from unbounded file read operations in CRI-O's ExecSync implementation. When executing commands in containers and capturing output, the runtime reads the complete output file into memory in a single operation. The code lacked proper size constraints on the output data, allowing arbitrarily large files to be loaded into memory. This is a classic case of missing resource allocation limits in system software handling user-controlled input.

Attack Vector

The attack vector is network-based, requiring only authenticated access to the Kubernetes API. An attacker can exploit this vulnerability by:

  1. Creating or accessing a container within the Kubernetes cluster
  2. Issuing an ExecSync request through the Kubernetes API
  3. Executing a command that generates excessive output (e.g., reading from /dev/zero, creating large files, or running infinite output loops)
  4. The CRI-O runtime attempts to read all output, exhausting node resources

The attack requires no special privileges beyond standard Kubernetes API access and no user interaction, making it highly accessible to malicious actors within the cluster.

go
// Security patch introducing maxExecSyncSize limit
// From internal/oci/oci.go

	// killContainerTimeout is the timeout that we wait for the container to
	// be SIGKILLed.
	killContainerTimeout = 2 * time.Minute

	// maxExecSyncSize is the maximum size of exec sync output CRI-O will process.
	// It is set to the amount of logs allowed in the dockershim implementation:
	// https://github.com/kubernetes/kubernetes/pull/82514
	maxExecSyncSize = 16 * 1024 * 1024

Source: GitHub CRI-O Commit

Detection Methods for CVE-2022-1708

Indicators of Compromise

  • Unusual memory consumption spikes on Kubernetes nodes running CRI-O
  • Disk space exhaustion events correlating with container exec operations
  • Kubernetes API audit logs showing repeated or suspicious ExecSync requests
  • Node instability or OOM (Out of Memory) killer events affecting CRI-O processes

Detection Strategies

  • Monitor node-level resource metrics for sudden memory or disk consumption increases
  • Implement Kubernetes audit logging to track ExecSync API calls and identify anomalous patterns
  • Configure alerting on CRI-O process memory usage exceeding normal operational thresholds
  • Deploy runtime security monitoring to detect containers executing commands with large output generation

Monitoring Recommendations

  • Enable detailed Kubernetes API audit logging for exec operations
  • Set up node-level resource monitoring with alerting thresholds below critical limits
  • Monitor CRI-O daemon logs for errors related to memory allocation or file operations
  • Implement rate limiting on exec API calls at the admission controller level

How to Mitigate CVE-2022-1708

Immediate Actions Required

  • Update CRI-O to a patched version that implements the maxExecSyncSize limit
  • Apply Red Hat security updates for affected OpenShift Container Platform and Enterprise Linux versions
  • Review and restrict Kubernetes API access to reduce the attack surface
  • Implement resource quotas and limits at the namespace level to contain potential impact

Patch Information

The vulnerability has been addressed in CRI-O with commit f032cf649ecc7e0c46718bd9e7814bfb317cb544. The fix introduces a maxExecSyncSize constant set to 16 MB (16 * 1024 * 1024 bytes), aligning with the limit used in the dockershim implementation. This ensures that CRI-O will not read output exceeding this size limit, preventing resource exhaustion attacks.

For detailed information, see the GitHub Security Advisory GHSA-fcm2-6c3h-pg6j and the Red Hat Bug Report #2085361.

Workarounds

  • Implement strict RBAC policies to limit which users and service accounts can execute commands in containers
  • Deploy admission controllers to restrict or audit exec operations cluster-wide
  • Configure node resource limits and monitoring to detect and respond to resource exhaustion before complete node failure
  • Consider network policies to isolate sensitive workloads from potentially compromised nodes
bash
# Example: Verify CRI-O version after patching
crio --version

# Check if running a vulnerable version
# Ensure your version includes commit f032cf649ecc7e0c46718bd9e7814bfb317cb544

# Review RBAC permissions for exec operations
kubectl auth can-i create pods/exec --all-namespaces --list

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.